上一篇讲完 Active Memory 是什么、为什么 AI 的记忆正在进化,有读者留言问:那如果我自己要给 Agent 加记忆,代码层面到底在做什么?
别把它想复杂。本质上就四步:提取、存储、去重、检索。先把这条链路搞清楚,再看框架怎么选。
一次对话,记忆系统在后台做了什么
先从一个最简单的场景开始想:你告诉 AI"我不喜欢废话,直接给结论"。如果有一套记忆系统在工作,这句话的完整生命周期大概是这样的:
• 提取(Extraction):对话结束后,LLM 扫一遍刚才的对话,判断哪些内容值得保存。"不喜欢废话"这类偏好被识别为重要信息,提炼成一条结构化条目,比如 {"type":"preference","content":"喜欢简洁回答,直接给结论"}
• 向量化(Embedding):这条记忆被转化为向量,存入向量数据库(比如 Qdrant、Pinecone、pgvector)。简单理解,就是把一句话压成一串数字表示,后续靠相似度匹配来检索
• 去重合并(Deduplication):如果之前已经有类似条目,系统会判断是更新、合并还是保持原条目不变
• 检索注入(Retrieval):下次对话开始时,系统根据当前问题做语义检索,把最相关的记忆条目塞进系统提示,让 AI 带着这些上下文来回答
你把这四步串起来,基本就得到一套能用的记忆系统了。
和传统 RAG 最大的区别:RAG 是查文档,记忆系统是查"你这个人"。RAG 检索的是外部知识库,记忆系统检索的是从你过去对话里蒸馏出来的、关于你的结构化事实。
Mem0 的技术原理:向量 + 图谱双路径
如果只想先看一个最典型的样本,Mem0 基本绕不过去。GitHub 超 5 万 star,背后有 2400 万美元融资,是独立记忆框架里目前最受关注的一个。
Mem0 的核心是两条存储路径并行:
• Mem0(向量路):把记忆提炼成事实条目,向量化后存入向量数据库,按语义相似度检索。适合存储"用户喜欢简洁"这类离散事实
• Mem0g(图谱路):把记忆中的实体和关系存成知识图谱(公开实现中使用 Neo4j),保留条目之间的关联。比如"用户在北京工作""用户在一家互联网公司"这两条记忆,在图谱里会连在一起,检索时能把关联信息一起拉出来
两条路各自解决的问题不一样:
| 场景 | 向量路(Mem0) | 图谱路(Mem0g) |
|---|---|---|
| 离散偏好 | ✅ 擅长 | 一般 |
| 关系推理 | 一般 | ✅ 擅长 |
| 部署复杂度 | 低(只需向量库) | 高(需要 Neo4j) |
| 检索延迟 | p95 约 1.4 秒 | 稍高(图遍历) |
Mem0 在自家发布的 LOCOMO benchmark 评测中,LLM 评判得分 66.9%,对比 OpenAI 原生记忆的 52.9%,相对提升约 26%;同时每轮 token 消耗约 1.8K,对比把全上下文塞进去的 26K,节省约 90%。不过先泼个冷水,这组数据出自 Mem0 自家论文,外部复现一直有争议,只能当参考。
Letta:把记忆做成操作系统的内存管理
Letta(原来叫 MemGPT)和前面几家不太一样,它不是把记忆当外挂,而是把记忆管理直接塞进了 Agent 行为里。它的核心问题是:上下文窗口有限,但 Agent 的生命周期可以无限长,怎么办?
答案是借鉴操作系统:把上下文窗口当 RAM,把外部数据库当磁盘,让 Agent 自己控制"页面置换"——主动决定把哪些记忆换进来、把哪些暂存出去。翻成人话,就是让 Agent 学会"需要时再翻出来",不用把所有东西一直记在眼前。
Letta 的架构可以粗略理解为三层:
• Core Memory(核心记忆):始终在上下文窗口里,容量有限。存用户的基本情况、当前任务状态。Agent 可以通过 function call 直接读写
• Archival Memory(归档记忆):外部向量数据库,容量无限。历史对话、积累经验都在这里,按需检索进入上下文
• 外部知识接入层:文档、代码库等,RAG 负责这层
最关键的是,记忆操作是 Agent 推理的一部分,不是外部钩子。Agent 在对话中就可以主动调用"存档""检索""更新记忆"的函数,记忆管理本身成了推理的一环。这让 Letta 特别适合需要超长生命周期的 Agent,比如长期陪伴类应用或者跑数周的自主任务。
Zep:企业级,强调时序和因果
Zep 的定位是企业级对话记忆,它在技术上有一个比较有意思的选择:用的是时序知识图谱(Graphiti)。
普通知识图谱存的是"A 和 B 有关联",但没有时间信息。Zep 的图谱里每条关系都带时间窗口,知道这个关系从什么时候开始,到什么时候还有效。这对业务场景非常有用:
• 用户上个月说"最近在用 MacBook Pro",这个月又换成了 Windows——图谱能处理"旧事实已失效"的情况
• 查询时可以指定时间范围,只拿"最近有效"的记忆,不会把过时信息混进来
此外,Zep 还内置了对话渐进式摘要,长对话会自动压缩成摘要,旧细节慢慢淡出,关键事实保留。面向企业,Zep 提供 BYOC / 私有云部署选项,适合有数据安全合规要求的场景。
如果只想快点上线,先看 Mem0;如果真在做长期运行的 Agent,Letta 更对路;如果是企业场景,Zep 更像正经工程方案。
LangChain 和 LlamaIndex:框架内置的记忆模块
如果你已经在用 LangChain 或 LlamaIndex,不一定要引入额外的记忆框架,两者都有内置的记忆模块。
LangChain Memory 提供多种策略可以直接切换:
• ConversationBufferMemory:直接保留全部对话历史(简单但 token 消耗大)
• ConversationSummaryMemory:自动摘要历史,节省 token
• EntityMemory:专门追踪对话中出现的实体(人名、地点、项目等)
• VectorStoreRetrieverMemory:向量化存储历史,语义检索最相关片段塞回上下文
值得注意的是,这些传统 Memory 类在 LangChain 新版本里已逐步转为 legacy 模块,新版推荐的是基于 stateful agent 的记忆机制。如果你是新项目,最好看官方最新文档。
LlamaIndex 的优势在于"文档 + 对话"混合记忆。它的记忆模块和数据索引引擎是同一套,Agent 既能记住对话,也能同时在你给它的文档库里检索,两者语义是打通的。这对需要在私有知识库上做个性化问答的场景很实用。
但如果记忆本身就是你产品体验的核心,这两套多半不够,最好直接上专门方案。
MemOS:把记忆当成可调度资源
前面几家都偏工程实践,如果再往前看一步,研究圈对"记忆"的想法其实已经开始变了。
MemOS 来自国内研究团队,2025 年在 arXiv 上发表,目前处于研究原型阶段。它把记忆分成三种形态,参照论文术语:
• 激活记忆(Activation Memory):当前上下文窗口里的内容,速度最快但容量最小,类似 CPU 寄存器
• 明文记忆(Plaintext Memory):向量库、知识图谱等外部存储,按需加载,类似内存。这是大多数框架主要做的那层
• 参数记忆(Parametric Memory):通过微调直接沉淀进模型权重,不占上下文但也没法动态更新,类似只读磁盘
(说明一下:这个类比只是帮助理解三种形态的访问速度和可修改性,不是严格一一对应。)
最有意思的想法是:用户反复提到的偏好,可以从明文记忆"蒸馏"进参数记忆,下次加载模型就自带,不需要每次检索。这有点像人的肌肉记忆——用得多了,就内化了。
MemOS 还引入了 MemScheduler,负责记忆的调度与加载策略,设计目标之一是降低运行时开销。
这东西还早,离你下周接进产品还有距离。但它至少把问题想得更完整——不只是"多存点、快点查",而是把记忆当成一种可在三种形态之间流转的系统资源来管。
那我该用哪个?选型建议
直接给结论。
场景 1:快速验证,想先把记忆功能跑起来
→ 用 Mem0。pip install mem0ai,文档清晰,三步接入,开源版免费。
场景 2:Agent 需要长期独立运行,自己管理记忆
→ 用 Letta。Agent 可以主动读写记忆,适合长生命周期的自主 Agent。
场景 3:企业级,需要对话历史的时序管理和合规部署
→ 用 Zep。时序知识图谱、渐进式摘要、BYOC 私有云部署,企业场景更成熟。
场景 4:已经在用 LangChain / LlamaIndex,不想引入新依赖
→ 用框架内置的 Memory 模块。ConversationSummaryMemory 是个不错的起点,但记得看新版文档,老 API 有 legacy 倾向。
场景 5:文档问答 + 个性化记忆要打通
→ 用 LlamaIndex。文档索引和对话记忆是同一套检索引擎,天然融合。
| 框架 | 核心优势 | 适合场景 | 上手难度 |
|---|---|---|---|
| Mem0 | 快速接入,向量+图谱双路 | 个人偏好,快速验证 | ⭐ |
| Letta | Agent 自主记忆管理 | 长期自主 Agent | ⭐⭐⭐ |
| Zep | 时序知识图谱,企业合规 | 企业对话,客服系统 | ⭐⭐ |
| LangChain Memory | 多策略可切换,生态完整 | LangChain 项目内 | ⭐⭐ |
| LlamaIndex | 文档+对话记忆融合 | 知识库问答+个性化 | ⭐⭐ |
说到这儿,也别觉得记忆已经做明白了
真正难的几个坑,现在还没人填平:
记忆的遗忘策略:什么样的记忆该衰减、该删除?目前大多数系统是手动管理或者简单按时间删,没有像人一样"自然遗忘不重要的、保留重要的"的机制。
记忆的准确性:AI 从对话里提取记忆时,有时候会提取错,或者把两件事混在一起。记忆一旦写错,后续对话里 AI 就带着这个"误解"在跑,用户往往不知道。
跨平台的记忆标准:你在 ChatGPT 攒的记忆,搬到 Claude 只是"导入",不是同一套格式。目前没有统一的记忆交换标准,各家各做各的。
多 Agent 共享记忆:一个企业里有多个 Agent 在跑,怎么让它们共享一部分关于用户的记忆,又不互相污染?这个问题目前基本没有成熟方案。
记忆这个方向,现在的感觉有点像 2022 年的向量数据库:大家都知道很重要,工具链也在快速成熟,但最佳实践还在形成中。现在进场,踩坑是必须的,但也是最好学东西的时候。
小结
把这两篇合起来看,AI 的记忆进化路线大概是这样的:
• 早期:把对话历史塞进上下文,被动记忆
• 现在:主动提取关键信息、结构化存储、按需检索注入,Active Memory
• 未来:记忆在激活态、明文存储、模型权重三种形态间流转,记忆成为可调度的系统资源
技术层面,现在可以动手的方案已经足够多。更大的问题其实是产品侧的:你的用户愿不愿意让 AI 记住他?记什么、忘什么,他能不能控制?记忆系统做出来,用户信不信任它?
所以最后拼的不只是检索和存储,而是产品规则、用户控制权和信任设计。
如果这篇文章对你有帮助,点个赞、转发给朋友,是最直接的支持。
夜雨聆风