理解智能体记忆(38分钟阅读)
摘要
本文比较了三种常见的智能体记忆系统形态——基于文件的、结构化存储和基于经验的,并通过一个使用常见智能体循环和开源模型的基准测试评估了它们的有效性。
这项分析比较了基于精选文件构建的持久化智能体记忆、自动维护的结构化存储和习得的经验。它在受控模型和智能体基准测试下研究了这些方法,以展示不同记忆表示如何影响性能。
查看缓存全文
缓存时间: 2026/08/17 15:30
# 智能体记忆的形态——文件、存储与体验
来源:https://www.pinglin.tw/blog/the-shapes-of-agent-memory/
仅能在单次对话中保持记忆的智能体,就像一位举止得体的陌生人:它每天都热情地与你打招呼,却不知你是谁。一旦你希望它了解你的项目、偏好以及上周二提到的那件事,就需要一种能突破上下文窗口限制的持久记忆。现代智能体记忆系统通常以三种形态存在(图1)。其中两种存储位于冻结模型的旁边,分别占据了设计轴的两端;第三种则将记忆行为融入模型自身。
第一种将记忆保存为**模型整理的文件**:一个简短索引加上主题文件,使用纯 Markdown 编写,通过搜索和读取文件的方式进行检索——如同处理任何其他文件一样。这是当智能体拥有文件系统而没有数据库时,编程智能体(Coding Agent)会采用的方案,也是目前Claude Code、Cline、Cursor和Windsurf等产品正在使用的形态。OpenClaw是其中最完善的实现版本:其默认的`memory-core`插件会在按日期记录的会话日志旁维护一个整理好的`MEMORY.md`索引,并增加了一个后台整合过程——这是其他基于文件的产品所没有的。
第二种将记忆保存为**结构化存储**:每个回合(turn)都被挖掘成细小的原子事实,嵌入到向量索引中,串联进时间图谱,并通过排序检索进行读取。这是当记忆成为核心产品时你会构建的形态,也是专业记忆初创公司mem0、Letta和Zep所销售的方案。
第三种将记忆保存为**经过训练模型学会使用的体验**:情节(episodes)仍然存放在记忆库中,但所有构成记忆的要素——该检索什么、是否信任它、如何将其转化为行动——都通过强化学习训练进了行动策略(acting policy)。这是当前智能体领域的尖端技术(MemHarness),是该领域在检索效果遇到瓶颈时所追求的形态,也是本文最终要探讨的方向。
在本文中,我旨在通过实测来比较哪种形态更优,而非空谈理论,这意味着我需要构建出前两种形态的实现。结构化分支采用了两种结构化技术谱系的混合体,外加一层两者都没有的功能:一个通过实际共同检索情况学习到的关联图谱,使得回忆能够触及查询从未排名靠前的项目。基于文件的分支则是对一款已发布编程智能体自动记忆系统的重构,其每项声明都可追溯至公开文档,并附带其规格说明发布——这并非一个注定失败的稻草人模型。两者都在相同的智能体循环(agent loop)下运行,使用相同的本地开源模型,由同一个评判器在相同的公开基准上进行评分,因此只有记忆层能够影响结果。每题的详细行分、用于重新计算每个图表的脚本,以及少量已发布分数中无法公开具体行分的明确清单,都存放于 a40-labs/memory 仓库中。
托管模型在需要保证公平性时介入:在“头对头”对比中,所有存储的内容都通过同一个共享读取器和评判器——`gpt-4o-mini`(与图谱服务商自身评分使用的是同一模型)——进行读取;在智能体实验中,则使用了一个前沿模型`claude-sonnet-5`。经过训练的形态无法参与这种受控比较,因为训练过程本身就是方法:一旦拔掉它的记忆库,你就得到了一个不同的策略,而非一个基线。最后一节则在经过训练形态最熟悉的领域——智能体基准测试——与它一决高下。
**摘要**:结构化存储在准确率和令牌成本上同时击败了文件存储;文件存储则在记忆规模较小,或当正确答案是“我不知道”的情况下胜出。令我意外的是,在LoCoMo基准测试中,混合结构与普通向量索引在统计上难以区分;在更长文本的LongMemEval-M测试中,这两种存储之间出现了15个显著点的差距,且混合结构更有利,这与随着历史记录增长,结构化设计回报提升的假设一致(两个分支在结构之外也有差异,因此测量的是整体效果)。目前还没有单一基准测试能完整评估记忆系统。
更换读取和评判记忆的模型栈,其得分变化甚至超过了在任何两种有效存储方案之间的切换,这就是为什么分数无法在不同协议间直接迁移。在智能体基准测试中,检索到的体验仅在行动者较弱且尚有提升空间时才有价值;对于能够通过推理解决的任务,前沿模型即使没有记忆也能达到经过训练系统的水平;而对于只有通过实践才能掌握的奖励形态,经过训练的策略则独树一帜。
(此处为图1说明)两个面板。左图:基于存储的记忆:一个冻结模型向其旁边的存储写入并从中读取,该存储包含两种类型:文件行和结构化数据点;写入来自模型整理或嵌入器,读取来自文本搜索或排序检索;它可以附加到任何模型上,在写入和读取时支付成本。右图:基于体验的记忆:一个处于强化学习训练边界(虚线框)内的行动者,与情节库交换数据,将完成的情节写回并检索;一个模型,不可分割,成本计入训练计算。
## 存储架构
(此处为图2说明)两个面板。左图:基于文件的记忆:新回合引导模型写入或编辑文件,在约200行的MEMORY.md索引中添加一行条目,该索引指向独立的主题文件;读取意味着将索引放入上下文,然后文本搜索并读取文件,不使用嵌入,进行字面量搜索。右图:结构化记忆:新回合被自动提取成原子单元,这些单元通过非大语言模型写入方式被嵌入,分成稠密加稀疏向量存储和一个时间事实图谱(该图谱会取代旧事实),在后台进行合并,并通过排序检索加上显著单元的预加载进行读取。
两个面板展示了同一任务的两种架构。基于文件的记忆将模型放在写入路径上,将文本搜索放在读取路径上。结构化记忆将嵌入器放在写入路径上,将排序器放在读取路径上。
两者都位于冻结模型旁边,并在会话间持久化事实。关键的区别在于**谁在何时完成工作**。
### 基于文件的记忆
基于文件的记忆在写入时通过模型花费其预算。在一个回合之后,模型决定是否有值得保留的信息,如果有,则编辑文件:在索引中添加新行,或在主题文件中添加段落。索引故意保持较小,因为每次会话都会加载到上下文中;一个常见的预算是前200行左右。其他所有内容都保存在主题文件中,这些文件在模型主动去读取之前不会被加载。因此,回忆完全取决于模型在保持索引可见的情况下,通过文本搜索能找到什么。没有嵌入器,也没有排序器。整个系统就是模型自身的判断加上文本搜索,这也正是它如此易于部署的原因:只要你有文件工具,你就能实现它。
这种方法在已发布的编程智能体中随处可见:Claude Code的自动记忆(一个按项目划分的、由模型整理主题文件的`MEMORY.md`索引)、Anthropic API中的memory tool原语、社区的Cline “Memory Bank”及其衍生品,以及Cursor和Windsurf中的自动记忆功能。请将其与指令文件家族(如`AGENTS.md`、`CLAUDE.md`、`.cursorrules`)区分开来,后者是由人类编写的静态上下文;而本文评估的是那种累积的、由模型编写的类型。
### 结构化记忆
结构化记忆也在写入时花费预算,但不是通过模型。每个回合都被挖掘成原子单元,每个单元都被嵌入并存储了稠密和稀疏向量,显著的事实被串联进一个图谱,其边带有有效期窗口,因此较新的事实可以取代较旧的事实。一个后台过程会合并重复项并整合图谱。写入路径上没有任何地方要求模型进行推理;它只是提取和嵌入。回忆是一个排序的混合查询,最显著的单元会在用户输入第一个词之前就被预加载,因此智能体通常无需搜索即可应答。
这就是专业记忆初创公司所销售的方案:mem0将事实提取到一个以向量优先的存储中(可选图谱层),Letta(前身为MemGPT)将分层记忆按需换入换出上下文,Zep则构建了一个双时态知识图谱——这是该理念最强的形式。它们都在基于文件方法中由模型判断和文本搜索所处的位置,放上了提取器和排序器。
这种划分直接引出了两个设计决策,它们是全部的关键:
- **保存什么**。基于文件的记忆保存模型**选择**保存的内容。结构化记忆**保存所有内容**,然后再进行排序。
- **发现什么**。基于文件的记忆从一个必须保持小型的索引中,通过文本搜索发现表面化的结果。结构化记忆从一个可以无限增长的存储中,通过相似度排序器发现结果。
#### 两个谱系:按地点,以及按实体与时间
将所有这些都称为一种“形态”掩盖了一个真实的分歧,因为结构化这一端存在两个谱系,它们围绕着相反的原始概念组织记忆:**按地点,或按实体与时间。**
按地点组织的谱系根据**它所属的位置**来归档记忆,而不是根据它关于谁。MemPalace是公开示例中最清晰的一个:人和项目成为翼楼,主题成为房间,原始的对话文本存放在它们内部的抽屉中,通过限定区域内的语义搜索进行检索,而不是在整个扁平语料库中搜索。其定义性的选择在于它在写入时拒绝做的事情。它逐字存储文本,不进行总结、提取或转述,因此摄入过程只是一个嵌入和归档决定,完全没有模型推理。其结构性弱点在于聚合:一个分散在许多房间中的答案,依赖于一次排序查询同时检索出所有内容,而存储中没有任何机制提前将它们聚合起来。
实体与时间谱系(Zep的Graphiti)存储一个知识图谱:保留原始消息作为事实基础,通过大语言模型提取的实体节点,这些节点经过解析、跨会话去重,并维护着摘要,以及实体之间的一行式精炼事实边。每条边都持有有效时间戳,相对日期在摄入时解析为绝对日期,一个矛盾的新事实会**关闭旧边的有效窗口**而不是删除它。读者接收到的是带有日期范围的精炼事实和实体摘要,从未直接看到原始消息。成本发生了反转:大语言模型在摄入时对每一条消息进行推理,用于提取、解析和失效处理。
(此处为图3说明)两个面板。左图:按地点组织:一个始终加载的托盘,包含身份和显著事实,下方是三个存放事实卡片的房间,一条实线箭头表示限定范围的回忆指向一个房间,一条虚线箭头表示广泛搜索跨越所有房间;标语:廉价的写入、无实体合并、通过排序保持新鲜度。右图:实体与时间:一个已解析的实体节点,连接到事实卡片,每张卡片带有一个日期范围,一条虚线边表示其有效窗口已关闭(被取代),一条时间线条带显示新事实关闭了旧事实的窗口;标语:实体聚合、有效窗口、摄入时使用大语言模型。
这带来了三个后果(图3):
- **聚合**。一个实体节点通过结构本身就累积了关于一个人的每个事实,因此一个枚举型问题(“X有哪些爱好?”)到达时就已附带一个预构建的聚合结果。按地点组织的存储没有这样的机制:它只能寄希望于一次排序查询能检索出所有分散的项目,而一个可枚举答案中的成员通常在语义上相距甚远(跑步、陶艺和电影之夜除了人物之外几乎没有共同点),因此即使所有项目都在存储中,也没有单个查询能将它们全部排名在前k位。请记住这个弱点:在本研究的两个基准测试中,对于结构化分支来说最难的问题,正是那些需要从分散在多个会话中的事实中组装答案的题目。
- **时间**。在一个谱系(有效窗口)中,更替关系存在于存储本身;在另一个谱系中,则存在于排序启发式规则中。
- **成本**。按地点组织的方案写入成本低,依赖检索;实体与时间的方案在摄入时支付高昂的大语言模型成本,以换取读取时的廉价和精准。
没有哪种方案占绝对优势。如果你的工作负载是对演变主题进行限定范围的回忆,按地点谱系的加载分层更合适;如果是跨会话聚合和“当前真实情况”,那么图谱谱系值得其摄入成本。这就引出了一个显而易见的问题:为什么不取两者之长?
### 混合架构
混合架构正是采取了这种折中方案,也是本研究测量的形态(图
相似文章
智能体记忆:剖析
探讨智能体记忆库的组件与设计决策,澄清认知科学术语与工程实现之间的差距。
Agent Memory Atlas - 智能体应该记住什么?
Claude研究了61个智能体记忆系统的代码库(包括OpenClaw、Hermes、Pi),分析了它们记忆的工作原理,旨在帮助开发者构建自己的实现。
智能体记忆不仅仅是基于用户事实的RAG
文章认为,简单的基于RAG的智能体记忆系统在生产中会失败,原因包括过时的偏好、遗漏的关键词和提示注入等问题,并主张采用分层记忆架构,具备主动选择、确定性回退、治理和测试等功能。
AI 智能体记忆机制详解(28 分钟阅读)
本文全面介绍了 AI 智能体记忆机制的技术原理,区分了工作记忆与长期记忆的实现方式,并探讨了上下文管理、基于嵌入的检索以及数据生命周期治理等关键策略。
尝试让智能体记忆跨会话持久化所学的经验
本文反思了AI智能体记忆的复杂性,远超简单的存储问题,强调了诸如判断真实性、优先级变化、区分决策与噪音以及何时恰当地呈现上下文等挑战。