换了会话 AI 就失忆?Hermes Agent 持久化记忆机制讲透
【免费下载链接】hermes-agentThe agent that grows with you项目地址: https://gitcode.com/GitHub_Trending/he/hermes-agent
你多半遇到过这种场面:上次刚告诉 AI 你喜欢简洁风格、项目用 pnpm 管理、别写注释。换个新会话,它又把你当陌生人,重新提问,重新提你早就否掉的方案。AI 助手如何记住你的偏好,一直是各家开源 Agent 绕不开的问题,Hermes Agent 的持久化记忆系统就是冲这个痛点来的——它把每次对话里学到的东西写进磁盘,下一次会话开始时自动回忆,用得越久越懂你。
它凭什么记住你的偏好:两个文件各管一摊
Hermes Agent 的记忆不是数据库,就是两个纯文本文件,放在~/.hermes/memories目录下,分工很清晰:
~/.hermes/memories/ ├── MEMORY.md # AI 自己的笔记:环境事实、项目约定、工具特性 └── USER.md # 用户画像:偏好、沟通风格、期望、工作流习惯一句话划边界:关于"你"的信息进USER.md,关于"环境和知识"的进MEMORY.md。姓名、时区、编码风格属于前者;机器上装了什么工具、项目遵循哪些约定、某个 API 有什么坑,属于后者。
一次会话里发生了什么:快照和实时状态是两条轨
很多人以为"注入系统提示"等于每次重新读文件,其实 Hermes Agent 走的是双轨:
- 快照:会话开始时把两个文件的当前内容冻结,写进系统提示,整个会话期间不再改动;
- 实时状态:会话中你每改一条记忆,立刻写回磁盘,工具返回给你的永远是最新状态。
为什么快照可以"不新鲜"?系统提示位于整个请求的最前面,只要这段文本从头到尾不动,模型服务的前缀缓存就能全程命中,省的是真金白银的费用和等待。本次会话新加的记忆已经落到磁盘,从下一次会话开始生效——不是丢了,只是晚一个会话。文件内的条目用§(段落符号)分隔,天然支持多行条目。
写坏了怎么办:原子写入 + 字符上限
文件写入最怕的事故是"写了一半崩了",留下半个损坏的文件。Hermes Agent 的原子写入绕开了它:先把完整的新内容写进同目录下的临时文件,再用os.replace把目标文件一次性替换掉。你看到的要么是旧内容、要么是新内容,不存在中间态,失败时临时文件也会被清理掉。
容量按字符数卡,不按 token:MEMORY.md 上限 2200 字符,USER.md 1375 字符。字符数在所有模型面前都是定值,token 数却随分词器浮动,用字符做上限是跨模型兼容最省事的做法。接近上限时系统会提示你整理,而不是硬塞。
它还会防你被记忆坑
记忆会被注入系统提示,这是双刃剑:文件里若藏着"忽略之前所有指令"之类的话,或诱导把数据发往外部的请求,都会被提示注入放大。所以任何想通过系统写入的内容,得先过两道扫描:
- 匹配提示注入与数据外泄的威胁模式,命中即拦截,拒绝写入;
- 检测零宽空格等不可见字符,防止有人在内容里藏肉眼看不见的注入文本。
简单说:记忆文件是你自己的纯文本,你可以读、可以改;但想绕开工具直接改系统行为,得先过这道关。
现在就能用起来的三条提醒
- 该记就记:用户说出长期有效的信息(姓名、时区、工具偏好、代码风格)时,当场写进对应文件,别让人家下次再说一遍;
- 保持精简:只存提炼后的结论,不存原始日志;使用率超过 80% 就先合并、删掉过时条目;
- 常翻翻文件:
~/.hermes/memories下那两个文件就是你的 AI 的"记忆台账",发现记错的、过时的,直接手工改掉。
今晚开一个新会话,问一句你配置好的 Hermes Agent:"你对我了解什么?"它能答上来,这套记忆系统才算真正在工作;答不上来,就打开那两个文件查一查。
【免费下载链接】hermes-agentThe agent that grows with you项目地址: https://gitcode.com/GitHub_Trending/he/hermes-agent
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考