四层记忆体系:Hermes Agent 如何管理长期信息

目录

  1. 为什么 Agent 需要记忆
  2. 总览:四层各管什么
  3. L1:持久 Prompt 记忆
    1. 这是什么
    2. 存了什么
    3. 3575 字符限制
    4. 怎么管理
  4. L2:会话存档
    1. 这是什么
    2. 为什么不存原始对话
    3. FTS5 全文搜索
    4. 容量和清理
  5. L3:技能文件
  6. L4:Honcho 用户建模
    1. 这是什么
    2. 它能捕捉什么
    3. 隐式 vs 显式的区别
    4. 配置
  7. 记忆检索的优先级
  8. 跨会话记忆的实际效果
  9. 隐私与数据安全
  10. 记忆系统的局限
  11. 实际管理建议

为什么 Agent 需要记忆

你有没有遇到过这种情况:用 ChatGPT 聊了半小时,关掉窗口,下次打开又是一个「全新的自己」。你前面说过的偏好、交代的背景、讨论的结论——全没了。

对于一个聊天机器人,这可以接受。但对于一个要帮你干活的 Agent,这就不行了。

想象你的 Agent 每次都要重新了解「你的服务器 IP 是什么」「你的项目用什么框架」「你上次让它部署到一半的任务进展到哪了」——效率会极其低下。

Hermes Agent 设计了四层记忆体系来解决这个问题。每一层处理不同类型的信息、有不同的存储时长和检索方式。

总览:四层各管什么

先看全局图:

层级 名称 存储内容 持久性 大小限制
L1 持久 Prompt 记忆 核心偏好和身份信息 永久 3575 字符
L2 会话存档 历史对话的压缩摘要 永久 无硬限制
L3 技能文件 任务执行方案 永久 无硬限制
L4 Honcho 用户建模 行为模式和偏好画像 永久 动态调整

四层从上到下,信息粒度从粗到细,自动化程度从低到高。下面逐层拆解。

L1:持久 Prompt 记忆

这是什么

这是最直接、最高优先级的记忆层。它的内容会被直接注入到每次对话的 system prompt 中。换句话说,Agent 每次「醒来」,第一件事就是读这层记忆。

存了什么

典型内容包括:

  • 你的身份信息(「我是后端开发者,主要用 Go 和 Python」)
  • 回复偏好(「用中文回复,代码注释用英文」)
  • 常用环境信息(「生产服务器在 192.168.1.100」)
  • 工作习惯(「我偏好 Docker 部署,不要直接装在宿主机上」)

3575 字符限制

这个限制看起来不大,但这是故意的。

system prompt 的长度直接影响每次调用的 token 消耗。如果你往持久记忆里塞了一篇文章,每次对话都要带上它,成本会很高,而且会挤压留给任务本身的上下文空间。

3575 字符大约够你写 1500-1800 字的中文或 500 词的英文。这逼着你只保留最重要的信息,把次要的东西交给其他层。

怎么管理

两种方式:

自然语言方式

1
2
你: 请记住,我的项目都托管在 GitLab 上,不是 GitHub
Hermes: 好的,我已经记录到持久记忆中。

Agent 会自动把这条信息追加到持久记忆文件中。

手动编辑

直接打开 ~/.hermes/memory/prompt.md 文件编辑。有时候手动整理比让 Agent 一条条添加更高效。

我个人的习惯是先让 Agent 添加,积累一段时间后手动整理一次——删掉过时的、合并重复的、精简冗长的。

L2:会话存档

这是什么

每次完整对话结束后,Hermes Agent 会用 LLM 对对话内容做摘要压缩,然后存入本地的 SQLite 数据库。

为什么不存原始对话

原始对话太长了。你和 Agent 聊了半小时,可能产生几万 token 的对话记录。全部存下来没意义,也没法高效检索。

LLM 摘要能把一段长对话压缩成几百字的核心要点。比如一段关于「配置 Nginx SSL」的对话,摘要可能是:

用户在 Ubuntu 22.04 上为 example.com 配置了 Nginx SSL。使用 Let’s Encrypt 证书,certbot 自动续签。配置了 HTTP 到 HTTPS 的自动跳转。过程中遇到端口 443 被占用的问题,通过停止旧的 Apache 进程解决。

几十轮对话被压缩成这么一小段,但关键信息(做了什么、遇到什么问题、怎么解决的)全保留了。

FTS5 全文搜索

存储用的是 SQLite,搜索引擎是 FTS5(Full-Text Search 5)。这东西在本地跑,速度非常快。

当新任务来了,Agent 会用当前任务的关键词去搜索会话存档。比如你说「上次配的那个 SSL 证书好像过期了」,Agent 会搜索包含「SSL」「证书」的历史会话,找到上面那条摘要,瞬间知道你说的是 example.com 上用 certbot 配的那个。

这种检索不需要你精确描述,模糊匹配就够用。

容量和清理

会话存档没有硬性的大小限制,理论上可以无限积累。但时间久了,搜索结果中可能会有很多过时的信息干扰判断。

建议定期清理特别旧的、不再相关的存档。Hermes Agent 提供了清理命令:

1
hermes memory archive --clean --before "2026-01-01"

这会删除指定日期之前的所有会话存档。

L3:技能文件

这一层前面已经有一篇专门的文章详细讲过了,这里简单归纳它在记忆体系中的角色。

技能文件是一种特殊的记忆——它记的不是「发生了什么」,而是「怎么做事」。如果说会话存档是你的日记,技能文件就是你的操作手册。

在记忆检索时,技能匹配的优先级高于会话存档。道理很简单:一个经过验证的执行方案,比历史对话里的片段信息更有用。

L4:Honcho 用户建模

这是什么

前三层记忆处理的是「显式信息」——你说了什么、做了什么、怎么做的。第四层处理的是「隐式信息」——你的行为模式、偏好倾向、习惯变化。

这一层通过 Honcho{rel=”nofollow”} 实现。Honcho 是一个专门为 AI 应用设计的用户建模系统,能从交互历史中提取用户画像。

它能捕捉什么

偏好变化:你最开始让 Agent 用 pip 装 Python 包,后来越来越多地用 poetry。Honcho 会捕捉到这个变化,让 Agent 在之后的建议中默认用 poetry。

行为模式:你每次做部署前都会先跑一遍测试。Agent 逐渐学到这个模式,以后会主动在部署前建议跑测试。

专业水平:你和 Agent 交互的方式能反映你的技术水平。如果你总是给出很具体的技术指令,Agent 会判断你是高级用户,回复中减少基础解释。反之,如果你的提问比较基础,Agent 会给更详细的说明。

时间模式:你通常什么时候活跃、什么时候处理什么类型的任务,这些时间维度的模式也会被记录。

隐式 vs 显式的区别

举个例子帮你理解区别:

  • 你告诉 Agent「我喜欢用 vim」→ 这是显式信息,存到 L1 持久记忆
  • Agent 观察到你每次编辑文件都选 vim 而不是 nano → 这是隐式信息,被 L4 Honcho 捕捉

前者需要你主动告知,后者是 Agent 自己观察推断的。两者互补——你不可能把所有偏好都明确告诉 Agent,但 Honcho 能从你的行为中推断出来。

配置

Honcho 功能需要额外配置:

1
2
3
4
5
# ~/.hermes/config.yaml
honcho:
enabled: true
app_id: "你的 Honcho app ID"
api_key: "你的 Honcho API key"

如果你不需要这么深度的个性化,可以把 Honcho 关掉。前三层记忆已经够大部分场景使用了。

记忆检索的优先级

当一个新任务到来,Agent 检索记忆的顺序是:

  1. L1 持久记忆:直接在 prompt 中,无需检索,永远生效
  2. L3 技能文件:语义匹配,看有没有可用的执行方案
  3. L2 会话存档:关键词 + 语义搜索,查找相关历史
  4. L4 用户建模:提供偏好和行为上下文

这个优先级体现了一个设计哲学:先看「怎么做」,再看「之前发生了什么」。

实际对话中,这四层的信息会被整合成一个统一的上下文注入到 prompt 中。用户感知不到背后有四层记忆在工作——你只会觉得这个 Agent 比别的「更懂你」。

跨会话记忆的实际效果

给几个具体场景感受一下:

场景一:延续之前的工作

你昨天让 Agent 帮你搭了半个 CI/CD 流水线,还没弄完就关了终端。今天打开新会话说「继续昨天的 CI/CD 配置」。Agent 通过会话存档检索到昨天的对话摘要,知道你已经配好了 GitHub Actions 的基础工作流,还差测试步骤和部署步骤没做。直接接着来。

场景二:记住你的环境

你两个月前让 Agent 在你的服务器上装过一堆东西。现在你说「帮我在服务器上加个 Redis」,Agent 不需要你再告诉它服务器 IP、系统版本、登录方式——这些信息在会话存档里都有。

场景三:学习你的风格

你连续几次让 Agent 写配置文件时,都手动把它的缩进从 4 空格改成了 2 空格。Honcho 捕捉到这个模式后,Agent 之后生成的配置文件会默认用 2 空格缩进。

隐私与数据安全

记忆系统存了这么多信息,安全性怎么样?

全部本地存储。四层记忆中,前三层完全存在本地(~/.hermes/ 目录)。没有任何数据被上传到云端。你的对话记录、技能文件、偏好设置,全在你自己的机器上。

Honcho 的情况稍微不同。如果你启用了 Honcho 用户建模,数据会发送到 Honcho 的服务。但 Honcho 本身也支持自托管——如果你对隐私特别敏感,可以在自己的服务器上跑 Honcho 服务。

没有遥测。Hermes Agent 不收集任何使用数据。开源代码可以验证这一点。

更多安全相关的讨论可以看 Hermes Agent 安全指南

记忆系统的局限

坦率说几个目前的局限:

LLM 摘要可能丢信息。会话存档的质量取决于摘要模型的能力。有时候摘要会遗漏你觉得重要的细节。目前没有很好的办法,只能用更强的模型来做摘要。

持久记忆的字符限制。3575 字符听着不多,但其实这是一个合理的权衡。如果你确实需要更大的持久记忆空间,可以把一些信息放到技能文件里变相扩展。

跨设备不同步。记忆数据在本地,你在 A 机器上积累的记忆不会自动同步到 B 机器。目前的解决方案是手动拷贝 ~/.hermes/ 目录,或者用 Git 来管理。

技能匹配偶尔不准。语义匹配不是 100% 准确的,有时会匹配到不太相关的技能。不过因为 Agent 不是盲目按技能走,而是把它当参考,所以误匹配的影响有限。

实际管理建议

  1. 持久记忆要精简。每隔一两个月手动整理一次 ~/.hermes/memory/prompt.md,删掉过时的信息,合并重复的。

  2. 会话存档适度清理。特别旧的存档可能已经没用了(你两年前在一台已退役的服务器上做的操作),可以清理掉。

  3. 技能文件是核心资产。定期审查和优化高频技能。如果你换了新的工作流或工具链,记得更新对应的技能。

  4. Honcho 看场景启用。如果你是个人使用且交互不频繁,可以不开 Honcho。如果你在团队中频繁使用,Honcho 的个性化建模会越来越有价值。

  5. 备份 ~/.hermes/ 目录。这里面是你所有的记忆资产,丢了就真丢了。建议纳入你的常规备份策略。cocoloop 社区有人分享了用 cron + rsync 自动备份的方案,可以参考。

记忆系统是让 Hermes Agent 从「一个工具」变成「你的助手」的关键。花点时间理解它、打理它,回报会很明显。

参与讨论

对这篇文章有疑问或想法?cocoloop 社区有不少开发者在讨论 Hermes 相关话题,欢迎加入交流。

前往 cocoloop 社区 →