为什么 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 | 你: 请记住,我的项目都托管在 GitLab 上,不是 GitHub |
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 | # ~/.hermes/config.yaml |
如果你不需要这么深度的个性化,可以把 Honcho 关掉。前三层记忆已经够大部分场景使用了。
记忆检索的优先级
当一个新任务到来,Agent 检索记忆的顺序是:
- L1 持久记忆:直接在 prompt 中,无需检索,永远生效
- L3 技能文件:语义匹配,看有没有可用的执行方案
- L2 会话存档:关键词 + 语义搜索,查找相关历史
- 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 不是盲目按技能走,而是把它当参考,所以误匹配的影响有限。
实际管理建议
持久记忆要精简。每隔一两个月手动整理一次
~/.hermes/memory/prompt.md,删掉过时的信息,合并重复的。会话存档适度清理。特别旧的存档可能已经没用了(你两年前在一台已退役的服务器上做的操作),可以清理掉。
技能文件是核心资产。定期审查和优化高频技能。如果你换了新的工作流或工具链,记得更新对应的技能。
Honcho 看场景启用。如果你是个人使用且交互不频繁,可以不开 Honcho。如果你在团队中频繁使用,Honcho 的个性化建模会越来越有价值。
备份
~/.hermes/目录。这里面是你所有的记忆资产,丢了就真丢了。建议纳入你的常规备份策略。cocoloop 社区有人分享了用 cron + rsync 自动备份的方案,可以参考。
记忆系统是让 Hermes Agent 从「一个工具」变成「你的助手」的关键。花点时间理解它、打理它,回报会很明显。