大多数 AI 助手的记忆,说白了就是一条金鱼——每次开新对话,之前聊的全清空,你得从头解释一遍自己是谁、在做什么项目。Hermes Agent 的四层记忆架构就是专门解决这个问题的,从基础的事实记录到长期知识库,一层叠一层,搭起来的 Agent 才算真正有了"记忆"。下面把每一层是什么、怎么用,给你说明白。 第一层:两个 Markdown 文件
内置记忆就是两个纯文本文件,放在 ~/.hermes/memories/ 下面。
memory.md 是 Agent 的工作笔记,写项目进展、环境配置、工作流偏好、踩过的坑,硬上限 2200 字符,大约 800 tokens。user.md 是 Agent 对你的画像,记你的角色、偏好、说话风格、工作习惯,上限 1375 字符,大约 500 tokens。
每次开新会话,这两个文件整个塞进系统提示词。Agent 睁眼就知道你是谁、之前干了什么。
为什么容量这么小?
不加限制的话,memory.md 会变成垃圾堆——AI 什么都往里塞,上下文暴涨,费用上升,回复质量反而下降。2200 字符的硬上限逼着它做选择:什么值得留,什么该扔,什么得合并。跟人脑一个道理,你记不住每天中午吃了什么,但你记得"楼下哪家难吃"。
有个细节很多人不知道
Agent 在会话中途可以用 memory 工具写新记忆,磁盘文件立刻更新。但当前会话的系统提示词不会变,还是开场时加载的那个版本。这轮写的东西,下轮才生效。原因很简单,系统提示词有缓存(prompt caching),中途改了缓存就废了,token 成本直接翻倍。牺牲实时性换性能,让长对话不至于烧钱。
第二层:翻遍每次历史对话
memory.md 只有不到 1000 tokens,那之前聊的细节呢?在 ~/.hermes/state.db 里。
这是个 SQLite 数据库,用 FTS5 全文搜索索引了每一次会话。微信、飞书、Telegram 消息、CLI 交互全在里面。Agent 有 session_search 工具,可以搜自己的对话历史,结果经过摘要,不用重读原始记录。 举个例子,你之前跟它头脑风暴过 App 名字,列了十几个候选。一周后问"上次那 App 名字方案有啥来着?",这种碎片细节 memory.md 不会存,但 session_search 能翻出来。
第一层是"一直带着的笔记本",第二层是"随时能翻的档案室",两者互补,不竞争。
搜索有个坑:FTS5 默认 AND 逻辑,搜不到时换关键词,用 OR 效果更好,比如写 docker OR container OR 容器。
第三层:外置记忆插件
前两层已经够大多数人用了。但如果你想让 Agent 真正"懂你",而不只是"记住你说过的话",或者历史聊天记录经常找不到,就得上外置记忆插件。
目前主流的几个插件各有侧重:
Honcho:不只是记事,而是在建立一个关于"你"的动态模型——你的思维偏好、决策模式、沟通风格。这个模型跨会话持续更新,Agent 每次开新对话带着的不只是历史记录,而是一个越来越准确的用户画像。两个不同的 Hermes Profile 共享同一套用户画像,但各自从自己的角度理解你。
Mem0:写入时用 LLM 提取结构化内容,存的不是原始文字而是语义化的知识单元。召回走向量相似度检索,"腕表项目"和"手表 App"在语义空间里距离很近,检索不会因为关键词不同而失败。免费套餐每月 1 万条记忆存储、1 千次检索,付费从 $19/月起。
Hindsight:知识图谱 + 实体解析 + 多策略检索,自动保留完整对话轮次(包括工具调用),有跨会话的文档追踪。它有个 Reflect 工具,能跨记忆做综合推理。如果需要显式的实体关系图,选它。本地部署完全开源免费,是三个主流选项里自部署门槛最低的。
Supermemory:多容器分区,每个容器有独立的保留策略、检索模式和身份。按项目或按客户隔离记忆命名空间,是最干净的方案。有个"上下文围栏"机制,会从写入内容里剥离已经召回过的记忆,防止递归污染。不支持本地部署。
插件的存储基本无上限,两年积累的上下文不会因为装不进 memory.md 就丢失,只是按需召回而不是全量注入。
几个注意点
同一时间只能跑一个插件,Honcho 和 Mem0 不能同时开。切换插件不迁移数据,用了三个月 Honcho 切到 Mem0,旧数据不跟过来。内置的 Markdown 记忆层一直都在,第三层是叠加在上面的。
激活记忆插件后配置命令:
前三层管的是"记住对话"。但有些东西不适合放在对话里:一份完整的行业调研、一个项目的竞品分析、一个领域的知识体系。第一层容量太小存不下,第二层是全文检索没有结构,第三层管的是用户理解不是项目资料。
Obsidian 技能就是为这个场景设计的。注意,它不是记忆插件,是个 skill——不会像前两层那样自动注入上下文,需要你主动触发,或者 Agent 判断需要时调用。
配置只需要在 ~/.hermes/.env 里加一行:
不需要在服务器上装 Obsidian 应用,Agent 直接读写 Markdown 文件。
实际用法
假设让 Agent 做一个行业调研,它会:搜索并收集信息,为每个调研对象创建独立的笔记文件,创建汇总页用 Wiki 链接([[笔记名]])串联所有子页面。后续你可以随时在 Obsidian 里浏览和编辑。
对话是线性的,知识库是网状的。项目越复杂,这个区别越明显。
四层配合起来是什么感觉
拿一个 HVAC 行业 AI 报价工具的项目举例:
第一层,Agent 把项目名称、你的角色写进 memory.md,下次会话睁眼就知道你在做这个。第二层,一周后你问"上次聊的竞品有哪些",从 state.db 直接检索出来。第三层(如果开了 Honcho),它发现你习惯先调研再写代码,后续主动先安排调研环节。第四层,竞品分析、供应商数据写进 Obsidian 知识库,随时能翻、能编辑、能扩展。
四层各干各的,互不干扰。
常见问题
写入了但当前会话没反应:正常,冻结快照机制,下一轮才生效。
memory.md 快满了:Agent 会自动精简,你也可以手动编辑,就是个纯 Markdown 文件。
切了插件旧数据没了:没丢,还在原来的后端,只是新插件里看不到。
Obsidian 笔记太乱:跟 Agent 说清楚让它按项目建目录,别全堆根目录。
Hermes Agent 的四层记忆架构,每一层的限制背后都有权衡,每一个设计都有它的理由。搞懂了这套东西,你才能真正驾驭 Agent 的记忆系统,而不是被它牵着走。