去年 12 月,我正在搭建一套 AI SEO 流水线。我们在 context/ 目录下准备了一套非常完备的“LLM Wiki”:结构化的架构文档、Agent 可以 grep 的函数索引等等,应有尽有。说句公道话,在上下文污染爆发之前,它_确实_是个挺不错的系统。后来,Agent 开始回想起我们在同一会话中刚刚更新过的过时信息。带着全新上下文生成的新 Agent 会立即开始胡扯同样的过时废话。Agent 不断重读它已经看过的文件,试图调和本不该存在的矛盾,导致我的上下文窗口膨胀速度快了一倍。与此同时,我整个人气得要命,一边狂骂 Agent,一边收到它那句“神预言”一般的:“您说得完全正确!”(我他妈最讨厌的就是这句话,没有之一)。
检索出来的上下文还包含了 Agent 自己捏造的内容。我们的系统并没有区分观测到的事实与猜测或编造,因此下一个 Agent 就会把所有这些统统当成证据来用。
我之前花了很多精力在检索上:寻找相关的数据块并把它们塞进上下文窗口。但我并没有给系统提供一种机制,去检查检索出的断言是否有据可依或依然有效。这便成了我想着手解决的记忆问题。
这就是业界所说的上下文腐化(context rot)。
在 RAG 中,相似度有助于找到相关文本,但它无法判定这些文本是否正确。六周前存入的一条毫无根据的断言,依然可能与今天的查询高度匹配。
像 Mem0 和 Zep 这样的产品解决了跨会话的记忆问题,但仅靠持久化并不能解决相互冲突的记录。如果一个 Agent 在周一存入“使用 OAuth”,而在周二存入“使用 API key”,我需要知道是系统改版了、这两条陈述针对的是不同组件,还是其中一条本身就错了。时间戳会有帮助,但最新的陈述不一定是最有证据支持的。我希望能保留每项断言的证据,并记录冲突是如何解决的。
Agent 可能会利用一次搜索结果做出决定,然后把这个决定作为后续决策的上下文。我希望能追踪这些依赖关系。如果某项观测被证实是错误的,我们应该能够顺藤摸瓜找出依赖于它的所有结论。
学术界也开始意识到这一点了。Google DeepMind 今年发表的一篇论文探讨了“认知漂移(epistemic drift)”,即校准不良的 AI 系统如何通过自信满满地提供不可靠信息,随着时间的推移反过来削弱人类的判断力。还有一项关于多轮推理中“信念偏离”的研究表明,仅仅通过检测 Agent 的内部状态何时过度偏离连贯性,就能获得 30 个百分点的性能提升。多个研究团队正在独立走向形式化的信念修正(belief revision)模型,因为事实证明,那种光是存下东西再检索出来的非形式化方法根本无法扩展。
有趣的是,生物学早在很久以前就解决了这个问题。海马体负责对特定情景进行快速、稀疏的编码,而新大脑皮层则对泛化知识进行缓慢的整合,整个系统每天晚上都会运行一个流程,来决定哪些内容可以从“发生过的事”晋升为“我知道的事”。睡眠期间的尖波涟漪,以及明确的遗忘机制。
在这一类比中,最让我感兴趣的是选择性保留:什么被保留下来,什么被修正,什么被遗忘。这些正是我希望应用在 Agent 记忆上的问题。
!! 技术宅信息大轰炸预警 :3 !!
不过,现在已经出现了一些朝正确方向迈进的探索。HippoRAG 通过知识图谱和 PageRank 明确建模了海马体索引理论,通过严肃借鉴生物学机制,在多跳问答(multi-hop QA)上获得了 20% 的性能提升。机器人领域也有关于基于惊奇门控的情景记忆研究,其中只有新颖的观测才会被存储,这正是大脑所做的那种显著性过滤。
Zep 构建了包含情景层和语义层的时序知识图谱。Hindsight 则更进一步,采用了四个独立的记忆网络和冲突解决策略,但矛盾依然只是带上时间戳被保存了下来,而不是在存储前被解决,并且也没有具体的方法来精确追溯 Agent 为什么会说出某句话。
对于 Engrammic,我希望将信念状态、写入时的冲突处理以及可供审查的溯源信息整合在一起。目标是让系统能够检查检索出来的断言是否依然成立,以及还有哪些其他断言依赖于它。
我所说的“信念”,是指由观测所支持的解释。“她已读不回”是一个观测。“她生我气了,因为她已读不回,而且她以前从不这样”则是一种解释,当她回发短信时,这种解释可能就会改变。我希望系统能保留这种区分。
在这种设计中,我希望记录独立于模型权重之外,以便进行检查和编辑。估计每个参数大约 3.6 比特的相关研究探讨了模型的存储容量,但仅凭容量并不能为我们提供关于每个断言的可审计记录。而这正是我试图满足的需求。
去问模型为什么做出某种断言,并不能给我一份可供独立检验的推导记录。为此,我需要存储下来的观测,以及表明哪些结论使用了这些观测的关联链路。而且这些链路在经过修改后也必须依然有效。
我们称之为外化认识论(externalized epistemics)。“Engrammic”这个名字来源于印迹(engram),即假想中大脑里记忆的物理痕迹。在软件层面,其核心思想是将断言连同其证据、状态和关联关系一起存储,以便我们进行审查和修改。
具体来说,这意味着当 Agent 试图存入“她回消息了,我们和好了”,而系统中已经存在“她生我气了”时,系统不会只是简单地追加一行新记录。它会标记出冲突,并强制你去理清它。要么旧的信念被取代,并附带指向新内容的明确链接;要么新的观测被拒绝;要么两者都被挂起,等待人工介入。但绝不会发生的是:互相矛盾的事实悄无声息地堆积起来,并在日后不可避免地再次冒头,把一切搅得一团糟。
这意味着每一个信念都有迹可循:不再是“模型生成了这个”,而是“这来自于在时间 A、B、C 记录的观测 X、Y、Z,且其置信度随时间衰减”。当企业客户询问“为什么你们的 Agent 会对我们的客户说这番话”时,你可以通过遍历图谱来给出确切回答,而不是耸耸肩表示不知道。这也意味着遗忘成了一个实打实需要专门设计的功能。陈旧的观测会衰减,过时的上下文会淡化,系统会主动决定哪些内容足够重要、值得保留。这里的目标不是追求某种所谓的“完美”回忆,而是对相关性具备良好的判断力。
这确实比单纯存储和检索文本引入了更多的机制。但我认为对于那些决策依赖跨多个会话积累记录的 Agent 来说,这种尝试是非常值得的。
共享记忆让冲突处理变得尤为重要。如果 agents 1 and 2 写入了相互冲突的观测,那么 agent 3 应该接收到什么?它需要足够的上下文来识别这种分歧,并拥有一种能够在不丢失原始证据的前提下记录解决方案的方法。
我也很感兴趣这套机制如何应用于世界模型和机器人领域,包括 LeCun 的 JEPA 工作中所讨论的外部记忆角色。对于根据已存观测采取行动的系统,我同样想就溯源、冲突记录和修正提出这些问题。
技术论文可访问 engrammic.ai/research,核心架构已开源。如果你正在研究 Agent 记忆、信念修正或多 Agent 协同,我很乐意与你交流探讨。我们正在寻找科研合作者;也欢迎在代码仓库中提出疑问或提交 issue。
对我来说,真正的检验标准就是最初引发这一切的问题:当一个 Agent 重复一条过时的断言时,我能否找到其来源、予以纠正,并阻止下一个 Agent 继续重复它?
题图来自 cosmos.so。