模块 6 / 10
记忆系统 (Memory)
跨会话持久化——Agent 不会"失忆",你也不用重复说同样的话。
预计阅读时间:10 分钟
1 两类 Memory
| 维度 | User Profile | Agent Memory |
| 存什么 | 用户是谁——姓名、角色、偏好、环境 | Agent 的笔记——项目路径、工具版本、踩过的坑 |
| 谁写 | Agent 观察到用户信息后自动保存 | Agent 主动保存环境事实、约定、经验 |
| 目标 | 减少用户重复自我介绍 | 积累跨会话知识,越用越聪明 |
| 示例 | "用户偏好直接执行,不要确认" | "JDK 21 路径在 /opt/jdk-21" |
💡 好的 Memory:跨会话仍然有效的事实。不要存会话进度、TODO、commit SHA 等一周后就过期的信息。原则:如果 7 天后还需要这个信息,就存。
2 Memory 的运作方式
Memory 在每个 turn 的 System Prompt 构建时自动注入(Layer 3 和 Layer 4)。Agent 看到 Memory 就像看到"背景知识"——不需要主动查询。
flowchart LR
A["Agent 会话"] --> B["Memory 自动注入
System Prompt Layer 3+4"]
B --> C["Agent 基于 Memory 工作"]
C --> D{"学到新事实?"}
D -->|"是"| E["保存到 Memory"]
D -->|"否"| F["继续"]
E --> G["下次会话自动加载"]
Memory 有字符预算(默认 2,200 字符)。快满时需要合并优化——删掉过时条目、缩短冗余内容、为新事实腾空间。
3 操作命令
# 配置
hermes memory status # 查看状态
hermes memory setup # 配置 Backend
hermes memory off # 关闭 Memory
# config.yaml
memory:
memory_enabled: true
user_profile_enabled: true
provider: builtin # builtin / honcho / mem0
4 Memory Backend
🏠 builtin
默认。SQLite 存储,零配置。数据在 state.db 中。
🧠 Honcho
独立 Memory 服务。支持向量搜索、对话级记忆隔离。需要 hermes honcho setup。
🧪 Mem0
云端 Memory。自动提取实体、关系。适合多 Agent 共享记忆。
5 最佳实践
✅ 该存的
- 用户偏好和习惯
- 环境配置路径
- 工具版本、兼容性问题
- 项目约定和命名规范
❌ 不该存的
- 会话进度、TODO
- 临时文件路径
- PR 号、Issue 号、commit SHA
- 一周内会过期的信息
📌 要点
- User Profile 存"你是谁",Agent Memory 存"什么环境"
- Memory 自动注入 System Prompt,Agent 无需主动查询
- 字符预算有限,定期清理过时信息
- 不要存会话进度——用 session_search 回溯