每次跟 Agent 聊天它都像第一次见到你。你的名字、你的偏好、之前做过的事它全忘了。这是 Agent 最让人抓狂的地方。好消息是 Hermes 有完整的记忆系统,调好了 Agent 可以记住你想让它记住的所有东西。

Agent 的三种记忆

Hermes 的记忆分三层。第一层是短记忆(Memory)。每次会话中 Agent 自动记录的关键事实。退出会话就丢了。适合放临时性信息——比如这周在处理什么项目、刚才提到的 Bug 编号。不用手动管理,Hermes 会自动处理和遗忘。第二层是持久记忆(Permanent Memory)。存在 ~/.hermes/memories/ 目录下的文件里。跨会话保留。适合放应该长期记住的信息——你的名字、你的工作角色、你用的工具链、代码风格偏好。这是人工管理的,你告诉它记住什么它就记住什么。第三层是技能文件(Skills)。存在 ~/.hermes/skills/ 目录下,是结构化的可执行知识。适合放工作流程和操作指南。

这三层的关系就像人的记忆一样:短记忆是今天吃了什么,长记忆是你做的第一份工作是什么,肌肉记忆是你怎么骑自行车。缺哪层 Agent 的行为都不完整。设置的关键不是一股脑全塞给它,而是按层级分类存放。我刚用 Hermes 的时候把所有东西全塞进持久记忆,结果几周后记忆文件长到十几 KB,每次对话都要读一篇长文,反而拖慢了 Agent 的响应速度。

怎么教 Agent 记住你的偏好

假设你想让 Agent 永远记得你习惯 Python 优先、喜欢简洁的风格、不喜欢写文档注释。打开终端运行 memory 命令。选择 target 为 memory。内容写:用户偏好 Python 优先于 JavaScript,回复风格简洁不废话,不需要文档注释。这就写进去了。之后每次跟 Agent 对话它都会读这段记忆。效果立竿见影——之前我每次都要跟 Agent 说请用 Python 写,设好记忆后它默认就选 Python 了,除非我主动说要别的语言。

我让 Agent 记住的东西:工作目录是 ~/projects/;代码默认不写注释;测试用 pytest 框架;回应用户时先给结论再给过程。设好之后省了太多事了。原来每次开新会话都要重复一遍,现在不用了。不过记忆需要定期维护,太旧的信息删掉,太长的截短。我大概一个月整理一次记忆文件,去掉已经过时的项目信息,更新一下最新的工作习惯。否则 Agent 会参考过期的记忆做出错误的判断。

技能文件:把经验写成模板

持久记忆还不够——有时候你要的不只是记住一个事实,而是记住一个完整的工作方法。技能文件就管这个。在 ~/.hermes/skills/ 下建一个目录,里面写 SKILL.md 描述你这个技能的用途和执行流程。Hermes 启动时自动加载所有技能,在需要的时候会自动选择合适的技能来用。

我写了个代码审查技能。每次我说审一下这段代码,Agent 自动按技能里的步骤执行。技能的内容精确到每一步做什么、用什么工具、输出什么格式。比如说第一步检查代码有没有语法错误,第二步检查性能问题,第三步检查安全漏洞,最后用固定格式输出审查报告。不用每次都说一遍怎么审,Agent 记得整个流程。技能写多了之后 Agent 工作的质量明显提升,因为每一步都是你设计好的最优流程,而不是让 AI 随机发挥。

清理记忆比创建记忆更重要

我犯的最大的错不是没设记忆,是设了太多不管它。几个月下来积累了几十条记忆,有些内容互相矛盾。Agent 的回复有时候很奇怪——后来查才发现是因为它同时读了三条相互冲突的记忆。比如一条说用户喜欢用 Python,另一条说用户最近切换到 Rust 了,还有一条说用户讨厌编译型语言。Agent 不知道该听哪个,结果它的输出里面 Python 和 Rust 的内容夹杂在一起。

解决办法是定期用 memory 命令查看当前存储的记忆列表。删掉过期的、合并重复的、修正自相矛盾的。保持记忆文件在 1-2 KB 以内最理想——够用又不拖慢响应。我每次写完一个项目后都会清理相关记忆,避免多个项目的上下文交叉污染。整理记忆就跟整理办公桌一样——每周花两分钟收拾一下,工作效率高很多。