教程概述
系列索引: Hermes Agent 教程系列
本文介绍 Hermes Agent 的记忆系统。这是它区别于其他 AI 助手的第一个核心能力。与 Claude Code 或 Cursor 不同,Hermes 会在不同会话之间保留记忆。
你将学到什么
- ✅ 为什么 Hermes 的记忆能力和其他 Agent 不一样
- ✅ Honcho 的辩证式用户建模方式
- ✅ 记忆提示是如何工作的
- ✅ 如何通过 FTS5 实现跨会话回忆
- ✅ 如何查看与管理已存储的记忆
为什么记忆很重要
大多数 AI 助手的问题
每次和 Claude Code、Cursor 或 ChatGPT 开始一段新对话时,几乎都是从零开始。它们会忘记:
- 你的编码风格偏好
- 你上周解释过的项目上下文
- 你们共同做出的决策
- 之前调试过程中总结出的经验
flowchart LR
A[会话 1] --> B[知识逐渐积累]
B --> C[会话结束]
C --> D[会话 2]
D --> E[重新从零开始]
style C fill:#ffcccc
style E fill:#ffcccc
Hermes 的不同做法
Hermes Agent 实现了一个可持续积累知识的学习循环:
flowchart TD
A[用户交互] --> B[经验被记录]
B --> C[触发记忆提示]
C --> D[知识被持久化]
D --> E[会话搜索建立索引]
E --> F[未来可被回忆]
F --> A
style B fill:#e1f5ff
style D fill:#e8f5e9
style F fill:#fff3e0
对比
| 功能 | Hermes Agent | Claude Code | Cursor | ChatGPT |
|---|---|---|---|---|
| 跨会话记忆 | ✅ Honcho | ❌ 无 | ❌ 无 | ❌ 有限 |
| 用户建模 | ✅ 辩证式 | ❌ 静态 | ❌ 静态 | ❌ 档案式 |
| 会话搜索 | ✅ FTS5 | ❌ 无 | ❌ 无 | ❌ 有限 |
| 自动持久化 | ✅ 记忆提示 | ❌ 手动 | ❌ 手动 | ❌ 手动 |
Honcho 辩证式用户建模
什么是 Honcho?
Honcho 是 Hermes 的用户建模引擎,建立在辩证原则之上。它不是维护一个静态的用户画像,而是在持续对话中逐步形成一个不断演化的用户模型。
类比:你可以把 Honcho 想象成一位图书管理员。它不只是帮你存书,还会理解你为什么读这些书、其中呈现出什么模式,以及你的兴趣是如何逐步变化的。
辩证式建模如何工作
sequenceDiagram
participant U as 用户
participant H as Hermes
participant Honcho as Honcho 引擎
participant M as 记忆存储
U->>H: 分享偏好
H->>Honcho: 处理交互
Honcho->>Honcho: 识别模式
Honcho->>M: 存储洞察
M->>Honcho: 取回上下文
Honcho->>H: 更新用户模型
H->>U: 给出更贴合的响应
style Honcho fill:#e1f5ff
核心组成部分
- 用户档案 — 偏好、风格、限制条件
- 交互历史 — 被索引的全部对话
- 模式识别 — 重复出现的主题与行为
- 洞察综合 — Hermes 对你的持续理解
记忆提示
什么是记忆提示?
记忆提示是 Hermes 定期发给自己的内部提醒,核心问题是:“这段信息值得被持久保存吗?”
它解决的是一个常见问题:人类往往不会主动告诉 Agent,什么信息是长期重要的。
提示触发时机
| 提示类型 | 触发条件 | 目的 |
|---|---|---|
| 会话结束 | 对话关闭时 | 总结关键收获 |
| 检测到模式 | 出现 3 次以上相似请求 | 持久化偏好 |
| 用户显式声明 | 如“记住这个” | 立即存储 |
| 周期性触发 | 每 10 轮对话 | 检查是否有高价值信息 |
记忆提示流程示例
用户: 我做 Python 测试时一直用 pytest,不用 unittest
[3 轮对话后]
Hermes(内部提示): 检测到模式:pytest 偏好。是否持久化?
→ 是:存储偏好
→ 记忆内容:"用户在 Python 测试中偏好 pytest 而不是 unittest"
[下一个会话]
用户: 给这个函数写测试
Hermes: 按照你的偏好,我会使用 pytest……(从记忆中检索得到)
跨会话回忆
FTS5 搜索
Hermes 使用 SQLite 的 FTS5(全文搜索)来索引会话历史:
flowchart LR
A[历史会话] --> B[建立 FTS5 索引]
B --> C[触发查询]
C --> D[找到相关匹配]
D --> E[LLM 进行摘要]
E --> F[注入当前上下文]
style B fill:#e8f5e9
style E fill:#fff3e0
回忆如何发生
- 建立索引 — 每段对话都会连同元数据一起进入索引
- 触发查询 — 当前上下文触发搜索
- 召回结果 — FTS5 找到相关历史会话
- 摘要压缩 — LLM 将结果压缩为可用上下文
- 注入提示词 — 将相关记忆加入当前提示中
手动回忆
你也可以显式查询记忆:
/recall "我们之前是怎么决定 API 结构的?"
/search "上个月的调试会话"
查看与管理记忆
记忆存放位置
Hermes 会将记忆存储在:
~/.hermes/memory/
├── sessions/ # 已索引的对话历史
├── user_profile.json # 辩证式用户模型
├── insights.json # 综合形成的洞察
└── preferences.json # 用户显式声明的偏好
查看记忆
使用 /memory 命令:
/memory show # 查看当前用户档案
/memory list # 列出已存储洞察
/memory search [query] # 搜索历史会话
管理记忆
# 通过 CLI 查看
hermes memory show
# 导出记忆
hermes memory export --format json
# 删除特定记忆
hermes memory forget "pytest 偏好"
# 完全重置(谨慎)
hermes memory reset
手动编辑记忆
你也可以直接编辑相关文件:
# 查看用户档案
cat ~/.hermes/memory/user_profile.json
# 编辑偏好
nano ~/.hermes/memory/preferences.json
最佳实践
如何让记忆更有效
- 显式声明偏好 — 例如“记住:我使用 TypeScript strict mode”
- 确认重要决策 — 例如“我们就按这个 API 结构定下来”
- 定期检查 — 使用
/memory show确认内容准确 - 清理过时信息 — 删除已经失效的偏好
记忆卫生
| 做法 | 命令 | 频率 |
|---|---|---|
| 查看用户档案 | /memory show |
每周 |
| 清理过时信息 | /memory forget |
按需 |
| 导出备份 | hermes memory export |
每月 |
常见问题排查
记忆没有持久化
原因:记忆提示功能被关闭。
解决方案:
hermes config set memory.nudges.enabled true
回忆结果为空
原因:搜索条件过于具体。
解决方案:改用更宽泛的关键词,或者先查看 /memory list。
记忆占用空间太大
原因:会话历史积累过多。
解决方案:
# 压缩旧会话
hermes memory compress --older-than 30d
# 或清理最旧的会话
hermes memory prune --keep-last 100
总结
Hermes 的记忆系统是它最核心的差异化能力:
- Honcho 辩证式建模 — 持续演化的用户模型,而不是静态档案
- 记忆提示 — 自动化的持久化提醒机制
- FTS5 搜索 — 支持跨会话召回
- 透明可管理 — 你可以查看、编辑、导出记忆
关键要点
- ✅ Hermes 会自动在跨会话之间保留记忆
- ✅ 用户建模会通过辩证过程持续演化
- ✅ 搜索可以召回相关的历史上下文
- ✅ 记忆是透明且可管理的
系列导航:
- ← 上一篇: 教程 1:前 5 分钟 — 安装与快速体验
- → 下一篇: 教程 3:技能系统 — 创建与管理技能
- 返回: 系列索引
毕业里程碑 G1:完成本文和教程 3 后,你就具备了基础能力。此时你的 Hermes Agent 已经可以运行、记忆,并开始使用技能。