从检索到遗忘——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 极简

当前 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,它是清除干扰、腾出认知资源的主动机制。
人类记忆的工作方式可以概括为:
- 海量输入 → 经历、对话、阅读、感知
- 快速衰减 → 绝大部分在小时级别被遗忘
- 睡眠整合 → 重要信息被提取为框架性理解
- 外部辅助 → 需要细节时,查笔记、翻记录、再问一遍
第二天醒来,你记得的是”昨天和老王讨论了架构方案,他倾向方案 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
-
Luo, Q., et al. Zero-RAG: Towards Retrieval-Augmented Generation with Zero Redundant Knowledge. 2025. arXiv:2511.00505 ↩
-
Cuconasu, F., Trappolini, G., et al. The Power of Noise: Redefining Retrieval for RAG Systems. SIGIR 2024. arXiv:2401.14887 ↩
-
Amiraz, C., Cuconasu, F., Filice, S., & Karnin, Z. The Distracting Effect: Understanding Irrelevant Passages in RAG. ACL 2025. arXiv:2505.06914 ↩
-
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 ↩
-
Rasch, B. & Born, J. About Sleep’s Role in Memory. Physiological Reviews, 93(2), 681–766, 2013. DOI:10.1152/physrev.00032.2012 ↩
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!