八月底 Marcos Somma 在 dev.to 发的那篇讲 AI 记忆的,我上周翻到,读完正文又翻完 45 条评论,今天才写。值得推的原因不是骨架新。MemGPT 的分层记忆、Letta 的有状态 agent、官方 MCP 示例里的知识图谱记忆服务器,作者自己在文里都列了,没装新架构。
我读到讲 RAG 和记忆的区分那段才确认这条要推。大意是:RAG 检索的是已经存在于文档、代码、工单、政策、数据库里的信息;记忆要保存的是流程自己产生的信息——那些本该变成文档却从未变成文档的东西,比如为什么选 A 不选 B,为什么 C 失败,为什么容忍 D。大部分团队现在干的,是把项目文档扔进检索接口然后管它叫长期记忆。那只是给文档加了个缓存。真正会消失的从来不是文档,是没人写下来的决策和失败。新开一个会话,模型对通用编程知识懂得比我还多,对“上个星期二这个项目里发生了什么”一无所知——不是它不够聪明,是这些信息从来就没变成它能检索到的东西。
他有一句我记最牢,把现在主流的「保存信息、日后检索、注入提示词、称之为记忆」比作在公寓各处贴便利贴然后宣布这间公寓有了记忆。准确到有点损。还给那种不加选择把整段历史塞进每个提示词的做法起了个名字——「品牌包装良好的上下文污染」。
然后他开始讲自己的原型。一个团队共享的小 HTTP 记忆中枢,记忆是带结构化元数据的纯 Markdown 文件。每个 AI 会话通过各自的 MCP 服务器接入,工具面刻意做小:列出已有内容、拉取相关内容、写入新内容。模型、客户端和 MCP 服务器都不是记忆存储,记忆独立于它们存在。会话启动只拿一个小索引,知道有哪些记忆存在,完整内容等 agent 主动要才进上下文。
作者自己承认,当前原型的相关性判断主要交给模型按索引里的描述做,没有包装成成熟检索系统,说这是刻意保持最原始的做法。他原话大意是:存在但从未被检索到的记忆,功能上等于被遗忘;拉错记忆,只是多绕几步的上下文污染。检索的精确率和召回率必须进评测,不能藏在「由 agent 决定」这句话里。这三句是正文里我最愿意转述的。
正文到这儿其实只算把问题说清楚了。真正让我觉得这篇值得点开的是评论区。
Heinrich Neb 提的三种动词,我头一回读到这个角度。supersession 是「世界变了,旧记录当时为真」,correction 是「记录从一开始就是错的」,invalidation 是「记录可能仍准确但不再有约束力」。他的意思是,只有一个动词的存储回答不了审计最先要问的那句——误导我们的是错的,还是只是旧的。大部分记忆系统的写入接口只有一个“写”,旧和错用同一个操作抹掉,审计时根本没法再分开。
Peter 那句不绕弯,直接打在作者设计的软肋上。信任状态放在元数据层,改变不了模型处理文本的方式。一条命令式措辞的记忆一旦进提示词,读起来和系统指令没区别,低信任标签挡不住它影响推理。他建议把未审核记忆的注入当作不可信输入边界处理,用分隔符和显式框架化,让模型把它当第三方证词读,而不是一个元数据标记。
我回头又读了一遍正文,作者其实已经挡了一部分:记忆是一份报告而不是一条指令,未经审核的记忆只等价于「某个 agent 在某个时间点说过这是真的」。已审核记忆有更高权威,一旦被 AI 修改,审核状态就消失,除非人重新确认。所以模型没法悄悄改写已批准的历史还保住批准标记。但 Peter 说的不是“悄悄改”,是「低信任但命令式措辞的记忆,在提示词里读起来像系统指令」。这是注入层的问题,不是存储层。作者的设计挡得住前者,没挡得住后者。
还有个首尔 AI 工程师 Tae Kim 讲了段实操。他们让 agent 每次工具调用后写进度笔记,六周攒了大约 40 条记录,只覆盖同 5 条经验的不同表述,agent 会拉同一决策的多份冲突摘要,检索质量反而下降。后来在写入前对最近十条做去重检查。作者回应说,他目前把「一条记忆一个事实」和「更新而非重复」写进写入契约,但那只能挡明显情况,抓不住五个 agent 用不同措辞描述同一经验——每条看起来都合法有效。
40 条记录只覆盖 5 条经验,这个比架构问题更真实。写入门槛一放低,去重就成了第一道鬼门关。作者自己也认,写入契约需要回答比“是否重复”更丰富的问题:是重复、是对同一事实的更新,还是同一故事里的新事件。这个问题他还没答案。
作者后来在评论区补了一个思路,我记住的是这个:他倾向用 TTL、时间排序和分段来保存「故事」,而不是某一时点的真相快照。很少被召回的记忆较快消失,每次被有用召回就延长寿命。持久性证明的是记忆还在被用,不是它正确。召回频率和正确性必须保持两个独立信号——如果只拿检索频率接进信任阶梯,最好被检索到的错误最后会变成机构宗教。
这条没法顺手跑一下。架构帖搭一遍只是照抄,验证不了什么。我只读了正文和 45 条评论。所以读完能带走的不是仓库地址,是那句:记忆系统真正的第一道鬼门关不是检索,是写入时怎么判断「这是重复、是更新、还是新的事」。
