智能体记忆:剖析
摘要
探讨智能体记忆库的组件与设计决策,澄清认知科学术语与工程实现之间的差距。
暂无内容
查看缓存全文
缓存时间: 2026/05/27 00:58
# 智能体记忆:解剖学
来源:https://brgsk.xyz/agent-memory-anatomy
每个智能体记忆库都使用相同的词汇:`episodic`(情景)、`semantic`(语义),有时还有`procedural`(程序性)。它们是从认知科学借来的词汇,被移植到了 API 中。但工程实践往往没有随之移植。一个库可能有一个`procedural`字段,却使用与`semantic`完全相同的存储和检索方式——这只是一个标签,而非独立的系统。更深的误区在于*memory*(记忆)这个词本身:这些库构建的大多数东西比这个词的含义要窄,而使用更窄的术语能让我们更清晰地看到问题所在。
这些术语源自 Endel Tulving 1972 年的一章论文¹ (https://brgsk.xyz/agent-memory-anatomy#user-content-fn-tulving72)。他提出,人们一直当作一件事来处理的“记忆”至少应该分为两种:对事件的记忆(发生了什么、在哪里、什么时候)和对事实的记忆(法国首都、水的沸点)。他分别称之为*episodic*和*semantic*。它们的行为方式不同,失效方式也不同。
这些库所谓的“记忆”,大多数都比这个词的字面含义更窄:不是完整的认知记忆系统,而是*关于用户的自传性内容*,由系统代用户持有——用户住在哪里、正在做什么、已经决定了什么。
## 智能体记忆系统的解剖结构
一个智能体记忆库由少量组件构成。了解这些部分,你就可以读懂任何库的文档。
**提取器。** 用于读取对话记录并决定保留什么内容的模块。通常是一个 LLM 调用,有时带有严格的提示词或类型化的输出模式。它生成*陈述*——关于用户、世界或任务的简短抽象事实。
提取器做出的最关键的决策是时机。即时提取,在每条消息后立即进行,你会把 token 花费在可能毫无进展的闲聊上。延迟提取,在会话结束时进行,那么解决代词指代所需的上下文可能已经丢失。两种时机都没有错;每种都会丢失另一种所保留的信息。任何一个库都值得问的问题是:*什么被丢弃了*?常见牺牲品包括:指代线索(哪个“他”指代哪个人)、时间锚点(“昨天”、“下周”),以及消除歧义的局部上下文。从认知角度看,提取是一种从情境化事件到去情境化事实的压缩:*用户周二喝咖啡时提到他们更喜欢 TypeScript*变成了*用户更喜欢 TypeScript*。一个库的压缩程度是其核心设计决策之一。
**存储器。** 数据库。一个或多个:向量索引(条目按语义相似度索引)、关系表(条目按可过滤的列索引)、知识图谱(条目通过带类型的边连接)。每条陈述都带有元数据——时间戳,有时还有置信度分数,有时还有指向原始对话的源指针。
存储器最难回答的问题不是把东西放在哪里。而是当新陈述与旧陈述矛盾时该怎么做。用户四月份之前住在巴黎,然后搬到了阿姆斯特丹——现在存储器中同时存在这两条信息,每条都呈现为当前状态。选择是:
- 覆盖(一个真相,无历史记录)
- 追加(两者都保留,交由检索去判断)
- 两者都保留,将旧的标记为已作废。
无法回答*上个月我相信什么?*的存储器不是记忆系统。它只是一个带有时间戳的快照。
**检索器。** 在查询时,这个组件将当前问题转化为搜索,并返回最可能相关的陈述。向量相似性是基础。在此基础上加上关键词搜索很常见。重排序器是标准的第三层。从结构上看,这就是 RAG;其语料库是用户积累的陈述,而非文档库。一些库还运行时间过滤器(不返回已知过时的陈述)和预设检查——检测问题本身是否假设了一个过时的事实,并阻止该事实被拉入上下文。
智能体记忆库之间的所有差异都存在于这三个部分中。你可以用它们来描述任何库,而无需事先知道它的用途。
## 记忆的种类
认知科学的经典分类包括四种:情景、语义、程序性和工作记忆。智能体中的工作记忆就是上下文窗口——这是一台与本篇文章所讨论的不同的机器,暂且按下不表。² (https://brgsk.xyz/agent-memory-anatomy#user-content-fn-wooders26) 这样就剩下三种。再加上前瞻性——它不在经典分类中,但它填补了该领域尚未填补的一个空白。
**情景记忆。** 与时间和地点绑定的具体事件。*上周二我在 Mostowa 街那家店和 Aleksandra 喝了咖啡。*这个记忆有日期、有地点、是个人化的。你亲身经历过。回忆起来就像重新体验——你可以把自己放回到那个场景中。
智能体记忆库通过一个带时间戳的陈述表来处理这一点。*用户提到他们住在柏林(2026-03-14)。*每条条目都是系统观察到的单个事件。一些库会在提取的事实旁边保留原始的对话片段。
**语义记忆。** 关于世界的事实,不与任何具体事件绑定。*柏林是德国的首都。水在海平面上的沸点是 100°C。*你知道这些事;但通常记不清是什么时候学到的。这些知识是去情境化的。
人们所说的“智能体记忆”大部分就是指这个。*用户更喜欢 TypeScript*最初是一个情景观察——他们周二这么说的——但到了存储器里,上下文已经消失,剩下的只是一个关于用户的事实,在被否定之前一直为真。
**程序性记忆。**³ (https://brgsk.xyz/agent-memory-anatomy#user-content-fn-declarative) 知道如何做事情。系鞋带、骑自行车、键盘快捷键的肌肉记忆。你通常无法用语言表达程序性记忆——试着解释你是如何保持平衡的——但它可靠地塑造了行为。
程序性记忆是衡量一个库声称的内容与实际实现之间差距的最清晰试金石。LangMem⁴ (https://brgsk.xyz/agent-memory-anatomy#user-content-fn-libraries) 将其视为一种独立的机制——根据评分轨迹演化系统提示词,因此记住的不是可检索的事实,而是编码在指令中的行为倾向。Mem0 暴露了`procedural`标签,但将其写入与事实相同的索引中——唯一的区别是`metadata.memory_type = "procedural"`。Graphiti 根本不暴露程序性记忆;所有内容都进入同一个双时态图,不论来源。
**前瞻性记忆。** 记住将来要做某事。*别忘了明天发合同。* *下次用户询问价格时,提到新套餐。*前瞻性记忆是人类中最常被研究的失效模式之一——人们忘记意图的频率远高于忘记事实。生产环境中最近的类似物是智能体框架中的定时触发器;它们解决了*在时间 T 做 Y*的情况,但没有解决更难的*下次条件 X 出现时就做 Y*,而这正是前瞻性记忆的实际形式。在我见过的生产库中,没有一个提供这个功能。这是开放领地。
## 这些库实际上是什么
在这四种记忆里,有三种基本上不存在于生产级记忆库中——情景在提取时被压缩成了语义,程序性大多被错误地标记为语义,前瞻性几乎不存在。
剩下的只有语义记忆,而在语义内部,是特定的一个子集:*自传式记忆*——一个人关于自己生活的事实。借用这个术语粗略地说:智能体不是记住自己的“生活”,而是代理维护用户的生活。
当人们说智能体应该“记住用户”时,他们通常指的是由智能体代持的用户自传性内容:用户住在哪里、正在做什么、谁对他们重要、他们要求过什么、决定了什么——智能体维护的关于用户生活和偏好的事实,以便跨会话保持行为一致。大多数智能体记忆库就是带有额外步骤的自传式记忆系统。该领域的核心问题比“记忆”更窄——而且一旦你给它命名,就会更清晰。
## 类比在哪里失效
这三个部分有粗略的生物对应。提取是智能体版的*巩固*——从情境化体验到去情境化事实的缓慢压缩(在人类中,是在睡眠期间,耗时数小时;在智能体中,以对话速度大规模进行)。存储器对应*长期记忆*——不过这是三者中最弱的类比,因为实际上实现的是一个没有合理生物等效物的状态机。检索则对应*线索回忆*(具有与 top-k 相同的固定截断偏差——一旦线索激活了一个记忆,搜索就停止)和*源监测*——即人类判断一个记住的事实是否是自己的、当前的、真实的那种脆弱过程。
这些类比——连同开篇的 Tulving 分类——作为词汇是有用的。但作为设计指南则很危险。
生物记忆具有一些属性,而智能体记忆库要么不具备,要么无法具备,要么不应尝试具备。这些不是细节;它们是构成生物记忆运作方式的关键部分。每个属性值得问的问题是它属于以下三个类别中的哪一个:缺乏但可解决,无法拥有,或不应尝试。
**巩固。** 在人类中,睡眠会回放白天的体验并修剪冗余的部分——从情境化事件到抽象知识的缓慢压缩。智能体实验室已经开始推出对应的功能:离线处理,重新审视存储的材料并重新编写,去重、解决矛盾、发现跨会话的模式。Anthropic 的*Dreams*和 Letta 的*sleep-time compute*是截至 2026 年中期的两个生产实例;两者都会定期对累积的记忆运行离线处理,并产生重组后的存储器。⁵ (https://brgsk.xyz/agent-memory-anatomy#user-content-fn-consolidation) 这是一个值得引入的属性。那些在每条消息上同步运行提取的库,是在实时延迟预算下进行一种退化的巩固版本;而那些离线处理、针对累积材料进行巩固的库,则实现了与生物学更匹配的版本。它是否能产生更好的输出仍然是一个悬而未决的经验问题——但从结构上看,后者的论证更清晰。*目前缺乏,但可解决。*
**情感显著性。** 在人类中,杏仁核会标记带有强烈情感的经历,以便更牢固地编码——恐惧、惊讶、尴尬都会留下比中性内容更深的痕迹。在纯文本智能体中,没有任何信号具有这种性质。没有身体,没有自主神经系统,没有产生情感的生理基础。输入纯粹是文本 token。尝试通过重要性评分来添加这一点是存在的——Park 等人的 Generative Agents 将记忆按感人程度评分 1-10⁶ (https://brgsk.xyz/agent-memory-anatomy#user-content-fn-park23)——但那些是由 LLM 判断的代理指标,不是真正的情感:同一个缺乏情感的模型被要求去估计情感。这是一种结构性的缺失,源于仅操作文本这一事实。具有环境基础的多模态模型最终可能有对应的机制。纯文本智能体*无法*做到。
**遗忘。** 生物记忆会主动遗忘——衰减、干扰、修剪,所有这些都在底层持续运行。一些智能体记忆库尝试通过时效性加权、重要性分数或定期清理任务来模仿这一点。其假设是智能体应该像人一样遗忘,因为记忆本来就应该如此运作。
这在很大程度上是错误的。生物记忆中的遗忘是一种约束,而非特性——大脑遗忘是因为它无法负担存储一切的成本,而不是因为遗忘是目标。智能体记忆系统没有这种约束。它可以为了磁盘的成本而保留一切。⁷ (https://brgsk.xyz/agent-memory-anatomy#user-content-fn-cheap-disk) 而一个保留一切的系统,也是一个能回答“我们去年三月知道什么?”的系统——这是可审计、可调试的,而且通常是用户真正需要的。一个激进遗忘的系统会失去这些。
生物遗忘背后的真正问题——随着存储器增长,检索性能下降——并不会因为磁盘便宜就消失。但生物式的遗忘不是答案。智能体记忆系统需要的是让保存的信息保持可发现状态。这是一个检索问题(将当前事实排在新旧之上,将搜索限定在相关主题)和一个裁决问题(标记已作废的事实但不删除)。像 Dreams 这样的巩固系统从另一端解决同一个问题——在会话之间进行非破坏性的离线重组,产生更干净的存储器而不丢失输入。是否存在一个原则性的遗忘规则,这个问题仍然是开放的。但是把“生物记忆会遗忘,因此智能体记忆也应该遗忘”的框架当作教训来导入,是把约束本身当成了目标。生物式的遗忘属于第三个类别——*不应尝试*。是否有其他遗忘规则属于哪个类别,是另一个问题。
四种记忆和三个解剖部分不是一个配方。它们是一张地图。当你阅读一个库的文档时,你可以在地图上找到它的选择——它处理哪种记忆,它实现了哪些部分、哪些只是占位,它在哪里只取了词汇而没有做对应工程。Sebastian Lund 的“LLM 记忆终极指南”⁸ (https://brgsk.xyz/agent-memory-anatomy#user-content-fn-lund-taxonomy) 值得一读——它以不同的方式划分领域(按运行时提示词中填充的内容),并且两种视角是互补的。
词汇比产品更稳定。学会这些部分。产品会围绕它们来命名自己。
---
1. Endel Tulving,“Episodic and Semantic Memory”,载于 *Organization of Memory*,Tulving 与 Donaldson 编(Academic Press, 1972)。程序性区分是后来提出的,见于 Tulving 的“How Many Memory Systems Are There?” *American Psychologist* 40 (1985)。工作记忆作为独立系统源于 Baddeley & Hitch (1974)。↩ (https://brgsk.xyz/agent-memory-anatomy#user-content-fnref-tulving72)
2. Sarah Wooders(Letta)和 Harrison Chase(LangChain)认为记忆不是一个可分离的系统——它就是 harness 保留在上下文中的一切(Wooders, X, 2026-03-31 (https://x.com/sarahwooders/status/2040121230473457921);Chase, X, 2026-04-03 (https://x.com/hwchase17/status/2042978500567609738))。在会话内部他们是对的。跨会话时,必须有东西比任何一个 harness 的选择更持久——这就是三个组件所描述的基础层。不同的问题,兼容的答案。↩ (https://brgsk.xyz/agent-memory-anatomy#user-content-fnref-wooders26)
3. 认知科学还画了一条更高层的线:*陈述性*记忆(语义加情景——你可以用语言表达的事实和事件)与*非陈述性*记忆(程序性技能、条件反射、启动效应)。智能体库原生处理陈述性记忆;非陈述性记忆基本缺席。↩ (https://brgsk.xyz/agent-memory-anatomy#user-content-fnref-declarative)
4. 此处引用的三个开源记忆库:LangMem (github.com/langchain-ai/langmem (https://github.com/langchain-ai/langmem)),Mem0 (github.com/mem0ai/mem0 (https://github.com/mem0ai/mem0)),Graphiti (github.com/getzep/graphiti (https://github.com/getzep/graphiti),由 Zep 开发)。所有信息截至 2026 年中期;API 可能有变化。程序性记忆的声明已在源代码中验证:LangMem 的提示词优化器是一个独立的机制,不涉及向量存储写入;Mem0 的程序性路径与其语义路径仅在一个元数据标签上有所不同;Graphiti 根本没有程序性概念。↩ (https://brgsk.xyz/agent-memory-anatomy#user-content-fnref-libraries)
5. 截至 2026 年中期的两个生产实例:**Letta 的睡眠时计算**——后台子代理,在会话之间重写和合并存档窗口中的记忆,生成新的摘要;**Anthropic 的 Dreams**——针对累积的记忆运行非破坏性的离线重组(“梦想”),可能包括重写、去重和模式发现。两者都以不同的形式实现了巩固过程。↩ (https://brgsk.xyz/agent-memory-anatomy#user-content-fnref-consolidation)
6. Park, J. S. et al., “Generative Agents: Interactive Simulacra of Human Behavior” (arXiv:2304.03442, 2023). 他们使用重要性分数(感人程度 1–10)来近似情感显著性。↩ (https://brgsk.xyz/agent-memory-anatomy#user-content-fnref-park23)
7. Letta 的文档明确反对生物式遗忘:*我们建议不要删除记忆——相反,使用时间戳和重要性分数来确保在有限上下文窗口中优先显示正确的记忆——保留完整历史记录以供审计。*这是对的。↩ (https://brgsk.xyz/agent-memory-anatomy#user-content-fnref-cheap-disk)
8. Sebastian Lund,“Ultimate Guide to LLM Memory”,2026。以运行时提示词填充为中心的补充性分类。↩ (https://brgsk.xyz/agent-memory-anatomy#user-content-fnref-lund-taxonomy)
相似文章
智能体记忆不仅仅是基于用户事实的RAG
文章认为,简单的基于RAG的智能体记忆系统在生产中会失败,原因包括过时的偏好、遗漏的关键词和提示注入等问题,并主张采用分层记忆架构,具备主动选择、确定性回退、治理和测试等功能。
Agentmemory
Agentmemory 为 Codex、Hermes、OpenClaw 和 Claude 等 AI 模型提供持久记忆,使其能够在交互过程中保持长期上下文。
rohitg00/agentmemory
agentmemory 是一个开源的持久化记忆层,专为 AI 编程智能体(Claude Code、Cursor、Gemini CLI、Codex CLI 等)设计。它通过知识图谱、置信度评分和混合搜索技术,借助 MCP、Hooks 或 REST API,为智能体提供跨会话的长期记忆能力。该项目基于 iii 引擎构建,无需外部数据库,提供 51 个 MCP 工具。
智能体的记忆尚未成熟
对当前AI智能体记忆解决方案的批评,认为RAG包装器及类似方法未能解决模型偏见和上下文膨胀的核心问题。
智能体记忆是数据库吗?重新思考长期AI智能体记忆的数据基础
本文重新思考长期AI智能体记忆的数据基础,认为当前的数据库范式存在不足。它引入了受控演化记忆(GEM),一种包含状态级别操作符和正确性条件的形式化方法,并提出了一个名为MemState的原型,构建在属性图后端之上。