从检索到遗忘——AI Agent 记忆系统的思考

4074 字
20 分钟
从检索到遗忘——AI Agent 记忆系统的思考

我给 AI 配了一套完整的记忆搜索系统——向量索引、混合检索、语义搜索——结果 87% 的对话里,它根本不用。

一个反直觉的发现#

今天在分析 OpenClaw 的运行数据时,我发现了一个有趣的现象。

OpenClaw 是一个开源 AI Agent 框架,内置了相当完善的记忆系统:Voyage embedding 模型、BM25 + 向量混合检索(权重 0.7/0.3)、SQLite 向量索引、时间衰减……技术栈拉满。系统提示里甚至写了 “Mandatory recall step”——每次涉及历史信息时,必须调用记忆搜索。

但实际运行数据告诉了我另一个故事。

我从 1 月底开始使用 OpenClaw,到今天刚好五周多。拉了主 Agent 目前留存的全量 session 数据——242 个会话(实际使用量更高,部分早期会话已在迁移和维护中清理)。结果是:只有 30 个调用过 memory_search 工具。12.4%。 而其他辅助 Agent(开发经理、代码工程师、审查工程师),调用率是 0%

87.6% 的时间里,这套精心搭建的记忆检索基础设施在空转。SQLite 索引里躺着 65 个文件、154 个分块、190 条缓存条目,几乎没人来查。

OpenClaw 社区里也有类似的声音。有用户在 GitHub Discussion 里直接发帖 “Memory Is Broken By Default”,指出默认配置下 memoryFlush 未启用,Agent 的上下文填满后进行压缩,信息直接丢失而没有任何持久化兜底。但我想说的是一个更深层的问题——即使你把所有配置都开到最佳实践,记忆搜索依然很少被使用。

过去几周里,我不止一次怀疑是记忆系统本身出了问题。每隔一段时间就去检查一遍——调整配置、尝试让记忆工具被更积极地调用。甚至翻了源码,确认检索链路一切正常:embedding 在跑、索引在更新、搜索能返回结果。系统没有坏。只是模型不怎么用它。

也许问题不在检索上。也许记忆系统真正缺的,是遗忘。

两条路线:全量 vs 极简#

两条路线:复杂的 RAG 管线 vs 简单的笔记本

当前 AI Agent 的记忆系统大致有两个流派,分别代表了两种截然不同的设计哲学。

OpenClaw:信息越多,Agent 越聪明#

OpenClaw 的记忆是一个多层架构:

层级机制数据量(本实例)
L0工作区文件全量注入(MEMORY.md、SOUL.md、USER.md 等)~30-40KB
L1每日日志自动加载(today + yesterday)~2-5KB/日
L2向量搜索按需召回(memory_search)65 文件 / 154 分块
L3上下文压缩前自动保存(Memory Flush)按需
L4历史会话索引(Session Transcript)全量

设计理念是纵深防御:先注入大量背景,搜索补充缺失,Flush 防止丢失,索引作为兜底。每一层都有存在的理由——在理论上。

Claude Code:200 行就够了#

相比之下,Claude Code 最近推出的 Auto Memory 极其克制:

  • CLAUDE.md:用户写的项目指令,建议精简
  • Auto Memory:AI 自己写的笔记,存储在 ~/.claude/projects/<hash>/memory/,每次加载前 200 行
  • 没有向量搜索。没有 embedding。没有索引。没有混合检索。

200 行。这是 Claude Code 团队认为一个 AI 需要的全部”持久记忆”。

一个建设了完整的记忆基础设施,一个几乎没有。但诚实地说——从日常使用体验来看,两者的差距并没有技术栈的差距那么大。

问题在于:为什么?

模型不搜索,可能是对的#

回到 12.4% 这个数字。

最直接的解释是:模型已经”看到”了它需要的大部分信息。OpenClaw 启动时会把 MEMORY.md(477 行、19KB)全量注入 system prompt。加上 SOUL.md、USER.md、IDENTITY.md 和其他工作区文件,模型在第一轮对话开始前就坐拥 30-40KB 的背景知识。对于 200K token 的上下文窗口,这大约占 15-20%。

信息已经在眼前了。搜索的边际价值趋近于零。

但这个解释只是表层。更值得关注的是一个来自 RAG 研究领域的发现。

Luo 等人在 Zero-RAG1 中研究了一个被广泛忽视的问题:知识冗余。当 LLM 的参数知识已经覆盖了某个事实,再通过检索注入相同(或高度相似)的信息,不仅无益,反而可能因为表述上的微妙差异产生内部冲突,导致准确率下降。他们在实验中设计了一个 Query Router——先判断模型是否”已知”某个答案,已知则跳过检索。去掉 Router 后性能出现明显下降。

实验数据:Zero-RAG 对 Wikipedia 语料库裁剪了 30%,检索阶段加速 22%,且未损失 RAG 性能。被裁掉的那 30%,本质上就是模型”已经知道”的冗余知识。

映射到 Agent 记忆场景:模型的参数里已经装着 Python 怎么写、K8s 怎么部署、HTTP 状态码是什么。这些东西写进 MEMORY.md 再检索出来,不是增强,是噪音。

模型选择不搜索,也许不是偷懒——更像是一种隐式的 Query Routing。

“相关”比”无关”更危险#

那如果我们强制搜索呢?如果系统层面做 auto-recall——每条用户消息都自动触发记忆检索,把结果注入上下文——效果会不会更好?

不一定。甚至可能更差。

这里需要引入一个关键区分。Cuconasu 等人2在 SIGIR 2024 上发表了一篇令人意外的论文:在 RAG 系统中加入完全无关的随机文档,准确率反而提升了 30% 以上。一时间 “noise is good” 的说法在社区传开。

但这个结论需要更精细的审视。同一团队的后续研究3(ACL 2025)将”无关信息”拆解为两类,揭示了本质区别:

  • Random(随机无关):与查询完全不搭边——几乎无害,某些条件下甚至有益。模型能轻松识别并忽略。
  • Distracting(干扰性无关):与查询语义相关但不含正确答案——显著降低准确率。因为它看起来像是答案

这个区分,我觉得对 Agent 记忆系统的设计有很深的启示。

想象一个场景:你问 Agent “memorySearch 怎么配置?“。语义搜索忠实地找到了三个月前你写的一条关于 memorySearch 的笔记。问题是那条笔记记录的是旧版本的配置格式,字段名已经变了。模型拿到这条”高度相关”的结果,大概率会基于它来回答——给你一个看起来很对、实际已经过时的配置方案

这就是 Distracting 信息。而语义搜索,按其工作原理,天然倾向于产出这类信息。它的优化目标是语义相似度,不是事实准确性。相关性和正确性之间的鸿沟,可能是记忆搜索最大的隐患。

再叠加经典的 Lost in the Middle 效应4——模型对上下文的利用呈 U 型曲线,开头和结尾的信息被充分利用,中间的信息大面积被忽略——检索注入的记忆在上下文膨胀后会逐渐落入注意力盲区。它占了 token,分散了注意力,但可能根本没被”看到”。

这让我开始怀疑:强制召回记忆不仅不一定有帮助,还可能系统性地引入最危险的那类噪音。

真正需要记住的,可能极少#

到这里,我们需要退一步问一个更基础的问题:AI Agent 每天到底产生了多少值得记忆的新信息?

答案可能令人意外地少。

一个 AI Agent 一天的典型工作是:帮你查个天气、改个配置、讨论一下技术方案、提醒你开会、写一段代码。这些对话中,真正需要跨会话记住的新增信息:

  • 某个配置从 A 改成了 B
  • 你做了一个决定:用方案 X 不用方案 Y
  • 你提到了一个新的偏好或约束

大概三到五条。这是我粗略的体感。

通用知识——编程语言的语法、框架的用法、部署的流程——模型参数里已经有了。它不需要从记忆里”回忆”这些东西,就像你不需要从日记里查”怎么骑自行车”。而领域知识——项目的架构、代码的组织——通常存在于代码仓库和文档中,是 Agent 每次 session 可以重新读取的外部资源。

真正需要”记忆”的是什么?是 你的上下文增量——你的偏好、你的决定、你最近关注的方向。这是模型参数里没有的、外部文件里不存在的、只有通过交互才能获得的信息。

这个增量极薄。薄到 Claude Code 认为 200 行就够了。

人类怎么遗忘#

人类记忆整合:信息涌入,大部分消散,框架留存

人一天接收的信息量巨大——仅视觉系统每秒就处理约 10^7 到 10^8 比特的数据。但人类记忆系统并不试图全部保存。恰恰相反,遗忘是记忆系统最核心的功能之一

神经科学研究表明,睡眠期间大脑进行的记忆整合5本质上是一个选择性强化 + 大规模遗忘的过程。慢波睡眠阶段,海马体将当天的经历”回放”给新皮层,但只有被标记为重要的信息会被整合进长期存储。其余的——绝大多数——被系统性地丢弃。

更关键的是,认知心理学中的前摄干扰(proactive interference)理论指出:旧记忆会主动干扰新记忆的形成和提取。你记住了太多过去的事情,反而会妨碍你学习和适应当前的状况。遗忘不是系统 bug,它是清除干扰、腾出认知资源的主动机制。

人类记忆的工作方式可以概括为:

  1. 海量输入 → 经历、对话、阅读、感知
  2. 快速衰减 → 绝大部分在小时级别被遗忘
  3. 睡眠整合 → 重要信息被提取为框架性理解
  4. 外部辅助 → 需要细节时,查笔记、翻记录、再问一遍

第二天醒来,你记得的是”昨天和老王讨论了架构方案,他倾向方案 B”。具体措辞、会议室温度、午餐吃了什么——全忘了。但你依然可以推进工作,因为框架在。

现在的 AI Agent 记忆系统在做什么?某种程度上,它们在试图构建一个”永不遗忘”的系统。 每条日志保留、每段对话索引、每个细节可搜索。这不仅和人类记忆的运作方式相反,从前面的研究来看,它还可能主动引入 Distracting 噪音——本质上就是人工制造前摄干扰。

缺失的那一半#

如果把 AI Agent 的记忆系统和人类记忆做类比,当前的技术栈覆盖的是这张地图的左半边:

功能人类记忆AI Agent 记忆
编码感知 → 海马体对话 → 文件/embedding
存储突触权重变化SQLite/向量库
检索联想、线索提取语义搜索、BM25
整合睡眠期慢波回放❌ 几乎没有
遗忘主动干扰消除❌ 完全没有

整个右半边——整合和遗忘——是空白的。

我们花了大量精力在”怎么存”和”怎么找”上:更好的 embedding、更精确的向量搜索、混合检索权重调优、时间衰减系数、MMR 去重。但几乎没有人在认真做”怎么忘”和”怎么整理”。

OpenClaw 的心跳巡检机制触碰到了整合的方向——定期审视系统状态、整理记忆文件、更新长期记忆。但这是一个非常初步的尝试,效果仍不理想,而且重心仍然在”记住更多”,而不是”忘掉该忘的”。

也许 Agent 需要的不是更大的记忆库,而是一个记忆整理周期——

  • 编码:对话中识别值得记住的信息(不是所有信息)
  • 暂存:短期保留(每日日志)
  • 整合:定期提取框架性要点,合并重复条目
  • 衰减:降低旧信息的权重,标记过时信息
  • 遗忘:主动清除已被新信息取代的旧记忆

这个过程——而不是检索过程——也许才是记忆系统真正缺失的部分。

没有结论#

坦率地说,AI Agent 的记忆系统目前仍处于探索阶段。没有最优解,可能暂时也没有”更优解”。上面的分析,是我在使用过程中逐步积累的观察和思考,加上对学术研究的有限映射——不一定都对,但至少是从真实数据出发的。

但有几个方向,我认为值得严肃对待。

第一,Less is more 不只是口号。 对理解大模型的开发者来说,记忆系统的复杂度可以接受——你知道什么时候该搜索、什么时候该忽略、什么时候该更新。但绝大多数用户不具备这个判断力。对他们来说,能”无感知地用好记忆”比能”精确控制记忆”重要得多。200 行自动维护的笔记可能比一套完整的 RAG 管线更实用。Claude Code 团队做出了一个不起眼但可能正确的选择。

第二,搜索精度比搜索频率重要。 与其追求更高的记忆搜索覆盖率——让每条消息都触发检索——不如确保搜出来的每条结果都是高质量的。一条过时的”相关”记忆造成的误导,可能比十条缺失的记忆造成的信息损失更严重。这意味着时间衰减、过时标记、置信度阈值这些”防御性”机制,优先级应该高于更好的 embedding 模型。

第三,遗忘可能是一个值得独立投入的工程问题。 人类大脑不是因为存储容量不够才遗忘——前额叶皮层主动抑制无关记忆的提取,海马体在睡眠期间选择性地丢弃低价值信息。遗忘是认知架构的核心组件,不是副作用。AI Agent 的记忆系统也许需要一个同等重要的”遗忘引擎”——不是简单的 TTL 过期,而是基于语义理解的主动清理:识别矛盾、合并冗余、标记过时、降级低频。

第四,上下文窗口的持续扩大不会解决问题,只会改变问题的形态。 当窗口从 200K 扩展到 1M、10M,理论上可以全量注入所有历史——但 Lost in the Middle 效应并不会因为窗口变大而消失。模型的注意力资源是有限的。窗口越大,信噪比越关键。“怎么在海量上下文中不被噪音淹没”——这本质上还是一个遗忘问题,只是从存储层移到了注意力层。

也许有一天,AI Agent 记忆系统的终极形态不是一个更大的数据库加更好的搜索引擎,而是一个完全不同的东西——

一个薄薄的笔记本,加上一个知道该划掉哪些内容的橡皮擦。


张昊辰 (Astralor) & 霄晗 (🌸) · 2026.03.05


参考文献

Footnotes#

  1. Luo, Q., et al. Zero-RAG: Towards Retrieval-Augmented Generation with Zero Redundant Knowledge. 2025. arXiv:2511.00505

  2. Cuconasu, F., Trappolini, G., et al. The Power of Noise: Redefining Retrieval for RAG Systems. SIGIR 2024. arXiv:2401.14887

  3. Amiraz, C., Cuconasu, F., Filice, S., & Karnin, Z. The Distracting Effect: Understanding Irrelevant Passages in RAG. ACL 2025. arXiv:2505.06914

  4. Liu, N. F., Lin, K., Hewitt, J., et al. Lost in the Middle: How Language Models Use Long Contexts. TACL, 12, 157–173, 2024. arXiv:2307.03172

  5. Rasch, B. & Born, J. About Sleep’s Role in Memory. Physiological Reviews, 93(2), 681–766, 2013. DOI:10.1152/physrev.00032.2012

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

从检索到遗忘——AI Agent 记忆系统的思考
https://astralor.com/posts/from-retrieval-to-forgetting
作者
张昊辰
发布于
2026-03-05
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
张昊辰
从基础设施到 AI 产品,记录想法与进化
公告
站点正在建设中,内容持续更新中
音乐
封面

音乐

暂未播放

0:00 0:00
暂无歌词
分类
标签
站点统计
文章
5
分类
3
标签
16
总字数
18,790
运行时长
0
最后活动
0 天前

目录