第 04 期 | Memory 与用户画像:跨会话的持久记忆
🎯 学习目标
- 理解 Hermes Agent 跨会话持久记忆的实现机制及其重要性。
- 掌握
MEMORY.md和USER.md文件在 Hermes 记忆系统中的角色和区别。 - 学会使用
/insights命令来主动提取和构建用户画像,优化代理的个性化交互。 - 深入了解 Hermes Agent 如何利用记忆数据进行用户画像的构建与演化,从而提升代理的智能与适应性。
📖 核心概念讲解
在 AI 代理的世界中,"记忆"是实现真正智能和个性化交互的关键。一个能够记住过去对话、用户偏好乃至自身经验的代理,才能在复杂的任务中表现出更高的效率和更强的适应性。Hermes Agent 在这方面做出了卓越的设计,通过一套基于文件的记忆系统,实现了跨会话的持久记忆和动态的用户画像构建。
4.1 Hermes 的记忆系统概览
Hermes Agent 的记忆系统是其“自进化”特性的基石之一。它不仅仅是简单地存储对话历史,更重要的是能够从这些历史中提炼出有用的信息,并将其结构化,以供未来的决策和交互使用。
Hermes 的记忆系统主要由以下几个核心组件构成:
- 文件存储: Hermes 将其核心记忆存储在本地文件系统中,具体是用户主目录下的
~/.hermes/memory/目录中。这种设计带来了极高的透明度、可控性和持久性。 MEMORY.md: 代理的“工作记忆”或“情景记忆”。它记录了代理与用户之间的原始交互历史、代理执行任务的步骤、观察结果以及学习到的新技能草稿等。它是代理经验的原始日志。USER.md: 代理的“长期记忆”或“语义记忆”,专门用于存储关于用户的结构化信息,即“用户画像”。这里包含了用户的偏好、背景、目标、习惯等。USER.md的内容是经过提炼和抽象的,而非原始对话记录。- Honcho 集成: 虽然 Honcho 主要是一个进程管理工具,用于确保 Hermes Agent 及其相关服务(如消息网关)的稳定运行,但它间接支持了记忆的持久化。通过 Honcho,Hermes 进程即使在系统重启后也能自动恢复,并加载之前保存的记忆文件,从而实现真正的跨会话记忆。
记忆文件存储结构
Hermes Agent 的记忆文件默认存储在用户主目录下的 .hermes 文件夹中。
~/.hermes/
├── config.toml
├── models/
├── memory/
│ ├── MEMORY.md
│ └── USER.md
└── tools/
这个结构清晰地展示了记忆文件 MEMORY.md 和 USER.md 的位置,它们是 Hermes Agent 核心功能的重要组成部分。
4.2 MEMORY.md 与 USER.md:角色与区别
理解 MEMORY.md 和 USER.md 的区别对于掌握 Hermes 的记忆机制至关重要。
| 特性 | MEMORY.md |
USER.md |
|---|---|---|
| 角色 | 工作记忆、情景记忆、原始交互日志、技能草稿 | 长期记忆、语义记忆、用户画像、结构化用户信息 |
| 内容 | - 完整的对话历史 - 任务执行过程与结果 - 中间思考步骤 - 新技能的初步定义 |
- 用户的背景信息 (职业、兴趣) - 用户的偏好 (颜色、风格) - 用户的目标与需求 - 用户的习惯与行为模式 |
| 格式 | 通常是时间序的文本流,包含原始的对话和思考 | 通常是结构化的 Markdown,如列表、键值对,总结性的描述 |
| 更新频率 | 每次与代理交互、执行任务时都会频繁更新 | 通常在代理识别到重要用户信息或通过 /insights 命令时更新 |
| 目的 | 记录代理的实时经验,为学习和任务执行提供原始数据 | 建立对用户的长期理解,实现个性化交互和决策 |
| 透明度 | 原始、详细,可能包含冗余信息 | 提炼、精简,聚焦于用户的关键特征 |
记忆流转示意图
graph TD
A[用户输入] --> B(Hermes Agent)
B --> C{处理与决策}
C --> D[执行操作/生成回复]
D --> E[更新 MEMORY.md]
E -- (周期性或按需触发) --> F{分析 MEMORY.md}
F -- (提取用户洞察) --> G[更新 USER.md]
G -- (提供上下文) --> C
D --> H[输出给用户]4.3 /insights 命令:构建与演化用户画像
USER.md 的内容并非凭空产生,而是 Hermes Agent 通过分析 MEMORY.md 中的原始交互数据,提炼出关于用户的“洞察”(insights)后逐步构建的。/insights 命令正是触发这一过程的关键机制。
/insights 命令的作用:
- 主动提取: 当用户输入
/insights命令时,Hermes Agent 会被明确指示去分析当前的MEMORY.md内容(或最近的交互历史),从中识别出关于用户的关键信息。 - 结构化: 代理会将这些非结构化的信息(如对话中提及的职业、兴趣、偏好等)进行归纳总结,并以结构化的 Markdown 格式写入或更新
USER.md。 - 用户画像演化: 随着时间的推移和更多的交互,
USER.md会不断演化,变得越来越丰富和精确。这使得 Hermes Agent 能够对用户有更深入、更全面的理解,从而提供更加个性化、更符合用户期望的服务。
用户画像的价值:
- 个性化交互: 代理可以根据用户的职业、兴趣推荐相关内容,或者在对话中引用之前提及的偏好,让交互更自然、更贴心。
- 上下文感知: 代理无需用户重复提供背景信息,就能理解用户的意图,提高沟通效率。
- 预测用户需求: 随着画像的完善,代理甚至可以预测用户的潜在需求,并主动提供帮助。
- 技能学习优化: 在学习新技能时,代理可以结合用户画像,更好地判断哪些技能对当前用户最有价值。
简而言之,/insights 命令是 Hermes Agent 从“记住”走向“理解”用户的桥梁,也是实现其个性化、自适应能力的核心工具之一。
💻 实战演示
我们将通过几个实际的终端交互场景,演示 Hermes Agent 的记忆系统如何工作,以及如何利用 /insights 命令构建用户画像。
场景一:初次交互与记忆文件的生成
我们将启动 Hermes Agent,进行一些基础对话,并观察 MEMORY.md 和 USER.md 的初始状态。
启动 Hermes Agent
hermes(如果这是你第一次运行,Hermes 可能需要一些时间来初始化。确保你已经通过
hermes setup配置了 LLM。)进行一些对话
You: 你好,Hermes! Hermes: 你好!有什么我可以帮助你的吗? You: 我叫张三,是一名软件工程师,主要使用 Python 和 Go 语言。 Hermes: 很高兴认识你,张三!Python 和 Go 都是非常强大的语言。有什么关于软件工程的问题或者想讨论的吗? You: 我最近在研究如何优化微服务架构中的数据一致性问题。 Hermes: 这是一个很有趣且复杂的话题。你具体指的是哪种一致性模型(例如,最终一致性、强一致性)?或者你在考虑哪些具体的解决方案(例如,Saga 模式、Two-Phase Commit)?检查
MEMORY.md和USER.md在 Hermes Agent 运行的同时,或者在你退出 Hermes 之后,你可以查看其记忆文件。
cat ~/.hermes/memory/MEMORY.md预期输出(部分):
# Hermes Agent Memory ## Session 2023-10-27T10:30:00Z ### User: 你好,Hermes! ### Hermes: 你好!有什么我可以帮助你的吗? ### User: 我叫张三,是一名软件工程师,主要使用 Python 和 Go 语言。 ### Hermes: 很高兴认识你,张三!Python 和 Go 都是非常强大的语言。有什么关于软件工程的问题或者想讨论的吗? ### User: 我最近在研究如何优化微服务架构中的数据一致性问题。 ### Hermes: 这是一个很有趣且复杂的话题。你具体指的是哪种一致性模型(例如,最终一致性、强一致性)?或者你在考虑哪些具体的解决方案(例如,Saga 模式、Two-Phase Commit)?你会看到
MEMORY.md忠实地记录了我们与 Hermes 的对话内容。现在,我们查看
USER.md:cat ~/.hermes/memory/USER.md预期输出:
# User Profile此时
USER.md可能是空的,或者只包含一个标题。这是因为 Hermes 还没有主动将这些信息提炼成结构化的用户画像。
场景二:使用 /insights 构建用户画像
现在我们将使用 /insights 命令,让 Hermes Agent 从之前的对话中提取用户关键信息,并更新 USER.md。
在 Hermes 中使用
/insights命令You: /insights Hermes: 好的,我正在分析我们的对话以提取关于你的洞察并更新我的用户画像。请稍等... Hermes: 我已经更新了关于你的用户画像。再次检查
USER.mdcat ~/.hermes/memory/USER.md预期输出(部分):
# User Profile - **Name**: 张三 - **Occupation**: 软件工程师 - **Programming Languages**: Python, Go - **Current Interests**: 优化微服务架构中的数据一致性问题你会发现
USER.md现在包含了从我们对话中提取出的结构化信息,比如你的名字、职业和兴趣。这就是用户画像的初步构建。验证用户画像的效果
我们可以尝试问一个问题,看看 Hermes 是否能利用这些信息。
You: 你能基于我的背景,推荐一些关于数据一致性方面的高级阅读材料吗? Hermes: 当然,张三。考虑到你是一名软件工程师,并且对 Python 和 Go 有经验,同时关注微服务架构中的数据一致性问题,我推荐以下几类高级阅读材料: 1. **书籍**: * "Designing Data-Intensive Applications" by Martin Kleppmann (这是必读经典,涵盖了分布式系统中的一致性、可用性、分区容忍度等核心概念)。 * "Distributed Systems: Concepts and Design" by George Coulouris et al. (更偏向理论,但对理解分布式原理很有帮助)。 2. **模式与实践**: * 关于 **Saga 模式** 的文章和案例研究,尤其是在微服务上下文中的实现。 * 关于 **CDC (Change Data Capture)** 和 **事件溯源 (Event Sourcing)** 在构建最终一致性系统中的应用。 3. **特定技术**: * 关于 **Apache Kafka** 和 **Confluent Platform** 如何支持分布式事务和流处理一致性的文档。 * Go 语言生态中,关于构建高并发、强一致性服务的最佳实践和库(例如,如何使用 Raft 或 Paxos 算法的实现)。 这些资源应该能帮助你深入研究数据一致性问题。可以看到,Hermes 明确提到了“张三”、“软件工程师”、“Python 和 Go 经验”以及“微服务架构中的数据一致性问题”,并据此推荐了更具针对性的材料。这表明它成功地利用了
USER.md中的用户画像。
场景三:跨会话记忆的持久性
现在,我们将模拟 Hermes Agent 的重启,并验证其记忆(尤其是用户画像)的持久性。
退出 Hermes Agent
在 Hermes Agent 的提示符下,输入
exit或quit。You: exit Hermes: 再见!期待下次再见。重新启动 Hermes Agent
hermes验证记忆
无需再次介绍自己,直接提问,看看 Hermes 是否还记得你。
You: 你还记得我叫什么名字吗?我的职业是什么? Hermes: 当然记得,张三。你是一名软件工程师。很高兴能再次为你服务!这清楚地表明,Hermes Agent 成功地加载了之前保存的
USER.md,实现了跨会话的记忆持久化。即使代理进程重启,它也能保留对用户的认知。你也可以再次查看
MEMORY.md和USER.md,它们的内容应该与你上次退出时保持一致。cat ~/.hermes/memory/MEMORY.md cat ~/.hermes/memory/USER.md这两个文件将分别包含我们之前所有的对话记录和提炼出的用户画像。
通过这三个场景,我们亲身体验了 Hermes Agent 的记忆系统如何工作,从原始对话记录到结构化用户画像的构建,以及其跨会话的持久化能力。这正是 Hermes 实现高级智能和个性化交互的基础。
🔧 涉及的命令与工具
| 命令/工具 | 描述 | 用途 |
|---|---|---|
hermes |
启动 Hermes Agent 交互式会话。 | 开始与 Hermes Agent 对话和交互。 |
/insights |
Hermes Agent 内置命令,指示代理分析当前记忆并提取用户洞察,更新 USER.md。 |
主动构建或更新用户画像,提升代理对用户的理解。 |
cat |
Linux/macOS 命令,用于查看文件内容。 | 检查 MEMORY.md 和 USER.md 的内容,观察记忆的存储和变化。 |
~/.hermes/memory/ |
Hermes Agent 默认的记忆文件存储目录。 | 定位和管理 Hermes Agent 的记忆文件。 |
MEMORY.md |
Hermes Agent 的工作记忆文件,记录原始对话历史、任务执行过程等。 | 存储代理的实时经验和交互日志。 |
USER.md |
Hermes Agent 的用户画像文件,存储结构化的用户偏好、背景、兴趣等信息。 | 存储代理对用户的长期理解,支持个性化交互。 |
exit / quit |
在 Hermes Agent 交互会话中输入,用于退出当前会话。 | 结束 Hermes Agent 进程,但其记忆文件会保留。 |
Honcho |
(间接相关) 一个 Python 进程管理工具,Hermes 可能使用它来管理代理进程的启动和运行,从而确保持久性。 | 确保 Hermes Agent 及其服务的稳定运行,间接支持记忆文件的加载和保存。 |
📝 本期要点回顾
- 持久记忆是核心: Hermes Agent 通过基于文件的记忆系统实现了跨会话的持久记忆,这是其智能和个性化交互的基础。
MEMORY.md与USER.md的分工:MEMORY.md记录原始、详细的交互历史和代理经验(工作记忆),而USER.md则存储提炼过的、结构化的用户关键信息和偏好(用户画像/长期记忆)。/insights构建用户画像:/insights命令是 Hermes Agent 专门用于从原始交互中提取用户洞察并更新USER.md的机制,它使得代理能够主动构建和演化用户画像。- 用户画像的价值: 完善的用户画像能让 Hermes Agent 提供更个性化、更具上下文感知的交互,提高沟通效率和用户满意度。
- 文件透明与可控: 记忆文件存储在本地文件系统,用户可以直接查看和(谨慎地)编辑,提供了高度的透明度和可控性。
🔗 参考资料
- Hermes Agent GitHub 仓库: 了解项目的最新代码、特性和贡献指南。 https://github.com/NousResearch/hermes-agent
- Hermes Agent 官方文档: 最权威的教程和功能说明,建议深入查阅。 https://hermes-agent.nousresearch.com/docs/
- OpenRouter 文档: 了解 Hermes Agent 如何通过 OpenRouter 支持 200+ LLM 模型。 https://openrouter.ai/docs