返回

Hermes Agent 教程 2:记忆系统 — 持久记忆与用户建模

Hermes Agent 的记忆系统通过 Honcho 的辩证式用户建模,在跨会话之间积累持久知识。本文讲解记忆提示、跨会话回忆、FTS5 搜索,以及如何查看和管理 Agent 记忆。

教程概述

系列索引: 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

核心组成部分

  1. 用户档案 — 偏好、风格、限制条件
  2. 交互历史 — 被索引的全部对话
  3. 模式识别 — 重复出现的主题与行为
  4. 洞察综合 — 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

回忆如何发生

  1. 建立索引 — 每段对话都会连同元数据一起进入索引
  2. 触发查询 — 当前上下文触发搜索
  3. 召回结果 — FTS5 找到相关历史会话
  4. 摘要压缩 — LLM 将结果压缩为可用上下文
  5. 注入提示词 — 将相关记忆加入当前提示中

手动回忆

你也可以显式查询记忆:

/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

最佳实践

如何让记忆更有效

  1. 显式声明偏好 — 例如“记住:我使用 TypeScript strict mode”
  2. 确认重要决策 — 例如“我们就按这个 API 结构定下来”
  3. 定期检查 — 使用 /memory show 确认内容准确
  4. 清理过时信息 — 删除已经失效的偏好

记忆卫生

做法 命令 频率
查看用户档案 /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 的记忆系统是它最核心的差异化能力

  1. Honcho 辩证式建模 — 持续演化的用户模型,而不是静态档案
  2. 记忆提示 — 自动化的持久化提醒机制
  3. FTS5 搜索 — 支持跨会话召回
  4. 透明可管理 — 你可以查看、编辑、导出记忆

关键要点

  • ✅ Hermes 会自动在跨会话之间保留记忆
  • ✅ 用户建模会通过辩证过程持续演化
  • ✅ 搜索可以召回相关的历史上下文
  • ✅ 记忆是透明且可管理的

系列导航:


毕业里程碑 G1:完成本文和教程 3 后,你就具备了基础能力。此时你的 Hermes Agent 已经可以运行、记忆,并开始使用技能。