"Mem0:构建具备可扩展长期记忆的生产级 AI Agent"
"Mem0: Building Production-Ready AI Agents with Scalable Long-Term Memory"
推荐论文精读查看原文(PDF) ↗
导读
本文属于第 4 周「Agent 记忆」专题(importance: recommended),是 MemGPT 之后 Agent 记忆方向的重要后续:MemGPT 用"操作系统"隐喻解决"上下文装不下"的问题,而 Mem0(读作 mem-zero)则从生产部署视角出发,把记忆问题重新定义为"如何从持续到来的对话中增量式地抽取、去重、更新与检索显著信息"。
论文来自 Mem0 团队(Chhikara 等,arXiv 2504.19413,2025 年 4 月),提出两个互补架构:基础版 Mem0 用两阶段流水线(抽取 + 更新)把对话蒸馏为自然语言记忆事实,并通过 LLM 工具调用在 ADD / UPDATE / DELETE / NOOP 四种操作间自主决策;图增强版 Mem0g 把记忆表示为有向标签图以捕捉实体关系。在 LOCOMO 长对话基准上,Mem0 相对 OpenAI 的记忆功能在 LLM-as-a-Judge 指标上有 26% 的相对提升,同时相比全上下文方法把 p95 延迟降低 91%、节省 90% 以上的 token 成本——兼顾了记忆质量与生产可行性,是"记忆不仅要准,还要快和省"这一工程立场的代表工作。
论文精读
摘要(Abstract)
大语言模型(LLM)在生成上下文连贯的回复方面表现出色,但固定的上下文窗口使其在跨越多次会话的长期对话中难以保持一致性。本文提出 Mem0,一个可扩展的、以记忆为中心(memory-centric)的架构,通过从持续进行的对话中动态抽取(extract)、整合(consolidate)与检索(retrieve)显著信息来解决该问题。在此基础上,作者进一步提出利用基于图的记忆表示(graph-based memory)来捕捉对话元素间复杂关系结构的增强变体。在 LOCOMO 基准上的全面评估中,作者系统对比了六类基线:(i) 已有记忆增强系统;(ii) 不同分块大小(chunk size)与 k 值的检索增强生成(RAG);(iii) 处理全部对话历史的全上下文(full-context)方法;(iv) 开源记忆方案;(v) 专有模型系统;(vi) 专业记忆管理平台。实验结果表明,所提方法在单跳(single-hop)、时序(temporal)、多跳(multi-hop)与开放域(open-domain)四类问题上全面超越现有记忆系统。值得注意的是,Mem0 在 LLM-as-a-Judge 指标上相对 OpenAI 取得 26% 的相对提升,而图记忆版 Mem0g 的总分比基础版高约 2%。除准确率收益外,Mem0 还显著降低了计算开销:相比全上下文方法,p95 延迟降低 91%,token 成本节省超过 90%,在高级推理能力与实际部署约束之间取得了引人注目的平衡。
1 引言(Introduction)
人类记忆是智能的基石,塑造身份、指导决策,也是沟通的基础:我们回忆过去的交互、推断偏好、对交流对象构建不断演化的心智模型。AI Agent 虽能生成流畅回复,却受限于固定上下文窗口:一旦信息滑出窗口,LLM 就会"重置"——忘记用户偏好、重复提问、与既定事实自相矛盾。论文用一个例子说明:用户在早期会话提到自己吃素且不吃乳制品,若无持久记忆,系统在后续会话中可能推荐鸡肉,彻底违背已确立的饮食偏好。
作者进一步论证,即便 GPT-4(128K token)、o1(200K)、Claude 3.7 Sonnet(200K)、Gemini(至少 10M)等模型不断推长上下文,也只是推迟而非解决根本限制,原因有二:其一,持续数周到数月的有意义人机关系,其对话历史必然超出任何上下文上限;其二,真实对话很少保持主题连续性——用户可能提到饮食偏好后聊几小时编程再回到晚餐话题,全上下文方法必须从海量无关信息中推理,关键偏好被淹没在数千 token 的编码讨论中;且注意力机制对远距离 token 会退化,更长的上下文并不保证有效利用。
因此,健壮的 AI 记忆应当:有选择地存储重要信息、整合相关概念、按需检索相关细节——镜像人类认知过程。本文的核心贡献正是这样一套记忆架构,把 AI 从"健忘的临时应答者"转变为"可靠的长期协作者"。
2 方法(Proposed Methods)
2.1 Mem0:两阶段流水线
Mem0 采用增量式(incremental)处理范式,可在进行中的对话内无缝运行。完整流水线分为抽取阶段(extraction phase)与更新阶段(update phase):
抽取阶段在新消息对 (mₜ₋₁, mₜ) 到达时启动(通常是用户消息 + 助手回复构成的完整交互单元)。系统用两个互补的上下文来源建立抽取语境:(1) 从数据库取回的对话摘要 S,概括整个对话历史的语义内容;(2) 最近的 m 条消息序列 {mₜ₋ₘ, ..., mₜ₋₂},提供细粒度的时序上下文。其中摘要由一个异步摘要生成模块周期性刷新,独立于主流水线运行,保证抽取始终受益于最新语境且不引入处理延迟。这些信息与新消息对拼成完整提示 P = (S, {mₜ₋ₘ, ..., mₜ₋₂}, mₜ₋₁, mₜ),交给由 LLM 实现的抽取函数 φ,得到一组显著记忆 Ω = {ω₁, ..., ωₙ},作为候选事实。
更新阶段对每条候选事实 ωᵢ 评估其与既有记忆的关系以维护一致性、避免冗余:先用向量嵌入从数据库检索语义最相似的 top-s 条记忆,再把"候选事实 + 相似记忆"通过函数调用接口(即"工具调用 tool call")交给 LLM,由 LLM 自身基于语义关系在四种操作中决策:
- ADD:不存在语义等价记忆时创建新记忆;
- UPDATE:用互补信息增强既有记忆;
- DELETE:删除被新信息矛盾的记忆;
- NOOP:候选事实无需改动知识库。
作者特意不使用单独的分类器,而是利用 LLM 的推理能力直接选择操作。实验配置:m = 10 条历史消息、s = 10 条相似记忆;所有 LLM 操作用 GPT-4o-mini;向量数据库用稠密嵌入支持相似度搜索。
2.2 Mem0g:基于图的记忆
Mem0g 把记忆表示为有向标签图 G = (V, E, L):节点 V 是实体(如 Alice、San_Francisco),边 E 是实体间关系(如 lives_in),标签 L 为节点赋予语义类型(如 Alice–Person、San_Francisco–City)。每个实体节点包含:(1) 实体类型分类(Person、Location、Event 等);(2) 捕捉语义的嵌入向量;(3) 含创建时间戳的元数据。关系表示为三元组 (vₛ, r, v_d)。
抽取采用两阶段 LLM 流水线:先由实体抽取器(entity extractor)从文本识别实体及其类型——凡在对话中具有语义重要性、唯一性与持久性的信息单元(人、地点、物品、概念、事件、属性)都值得入图;再由关系生成器(relationship generator)为实体对判定是否存在有意义关系并分类打标(lives_in、prefers、owns、happened_on 等),其提示工程引导 LLM 同时利用对话中的显式陈述与隐式信息。
新信息整合时,Mem0g 为新三元组的源/目标实体计算嵌入,检索相似度超过阈值 t 的既有节点,据此决定新建节点还是复用既有节点;并实现冲突检测机制识别可能与新信息冲突的既有关系,由基于 LLM 的更新解析器(update resolver)判定某些关系是否过时——注意过时关系被标记为无效而非物理删除,以支持时序推理(temporal reasoning)。
检索采用双路策略:(1) 实体中心方法——先从查询识别关键实体,经语义相似度定位图中锚节点,再系统探索其入边与出边,构建覆盖相关上下文的子图;(2) 语义三元组方法——把整个查询编码为稠密向量,与图中所有关系三元组的文本编码计算细粒度相似度,返回超过相关性阈值的结果并按相似度降序排列。实现上以 Neo4j 为图数据库,抽取与更新模块用 GPT-4o-mini 的函数调用能力。
3 实验设置
数据集:LOCOMO——为评估对话系统长期记忆而设计,包含 10 段扩展对话,每段平均约 600 轮对话、26,000 token,分布在多个会话中;每段对话配有平均约 200 道带标准答案的提问,分为单跳、多跳、时序、开放域四类。数据集原有的"对抗(adversarial)"类问题(测试系统识别不可回答问题的能力)因缺乏标准答案而被排除在评估之外。
评估指标分两组:
(1) 性能指标:以往研究多用 F1 与 BLEU-1 等词法指标,但它们难以刻画事实准确性——若标准答案是"Alice 生于三月"而系统答"Alice 生于七月",因大量词元重叠仍会得到高分。因此作者引入 LLM-as-a-Judge(J):由更强的独立 LLM 从事实准确性、相关性、完整性、语境恰当性等维度评估回答。考虑到 J 的随机性,每种方法在全数据集上独立运行 10 次并报告均值 ± 1 标准差。
(2) 部署指标:用 tiktoken 的 cl100k_base 编码统计 Token 消耗(检索出的记忆 token 数,对 RAG 则是检索文本块的 token 数);以及延迟——检索延迟(搜索记忆/文本块的时间)与总延迟(检索 + LLM 生成回答的时间)。
六类基线:(i) LOCOMO 已有基准方法(LoCoMo、ReadAgent、MemoryBank、MemGPT、A-Mem);(ii) 开源记忆方案 LangMem(Hot Path,gpt-4o-mini + text-embedding-small-3);(iii) 标准 RAG——把整段对话历史当作文档集,分块(128–8192 token 七档,8192 为嵌入模型上限)、嵌入、按相似度取 top-k(k∈{1,2},避免 k>2 使平均 26,000 token 的对话被全覆盖而失去选择性检索意义);(iv) 全上下文——直接把全部历史塞进模型;(v) 专有模型——OpenAI ChatGPT 的记忆功能(gpt-4o-mini,把整段对话摄入单一会话并提示其带时间戳生成记忆,再把这些记忆整体作为答题上下文);(vi) 记忆管理平台 Zep(保留时间戳以维持时序保真度)。除特别说明外温度设为 0。
4 评估结果与分析
4.1 各记忆系统的性能比较(表 1)
单跳问题(定位单轮对话中的一个事实片段):Mem0 取得最强结果 F1=38.72、B1=27.13、J=67.13;Mem0g(38.09/26.03/65.71)略低于基础版,说明当检索目标只占单轮时,关系结构的收益有限。基线中全上下文的 OpenAI 取得次优 J 分,LangMem 与 Zep 的 J 分约比所提方法相对低 8%;旧的 LOCOMO 基准如 A-Mem 在 J 上落后超过 25 分。
多跳问题(综合分散在多个会话中的信息):Mem0 以 F1=28.64、J=51.15 明显领先;令人意外的是 Mem0g(47.19)并未带来提升,作者推测在多步推理中导航更复杂的图结构可能引入开销或冗余。
开放域问题:基线 Zep 拿到最高 F1(49.56)与 J(76.60),以 0.89 分的微弱优势险胜 Mem0g(75.71),并领先 Mem0(72.93)3.67 分——Zep 在整合对话记忆与外部知识方面保持小幅但一致的优势。
时序推理(对对话历史中事件次序、相对顺序与时长的准确建模):Mem0g 以最高 F1(51.55)与 J(58.13)胜出,验证了结构化关系表示对时序判断的显著帮助;基础版 Mem0 也有不错的 J=55.51。OpenAI 在此类别明显失准(分数低于 15%),主因是尽管明确提示,其生成的记忆大多缺少时间戳。
4.2 跨类别分析与总表(表 2)
综合全数据集的总 J 分:全上下文(摄入约 26,031 token)最高,达 72.90;Mem0g 68.44、Mem0 66.88、Zep 65.99、LangMem 58.10、OpenAI 52.90、A-Mem 48.38。所有 RAG 配置(最佳为 k=2、256 分块时的 60.97)都被 Mem0/Mem0g 超越:最强 RAG 约 61%,Mem0 达 67%(约 10% 相对提升),Mem0g 超 68%(约 12% 相对增益)。这说明把对话历史转化为简洁结构化表示、只保留最显著事实,比检索大段原文更能给 LLM 提供精确线索。
但全上下文的代价极高:总 p95 延迟约 17.117 秒(每次查询都要读完整段对话),而 Mem0 仅 1.440 秒(降低 92%)、Mem0g 为 2.590 秒(降低 85%)。记忆系统在质量接近的同时只付出零头的 token 与延迟成本;且随着对话变长,全上下文的开销会恶化,记忆方案的性能则保持稳定。
4.3 延迟分析
Mem0 实现了所有方法中最低的检索延迟(p50 0.148s / p95 0.200s)与最低的总延迟中位数(0.708s,p95 1.440s),非常适合延迟敏感的交互式 Agent。对比之下:A-Mem 检索 p50 0.668s、总计 1.410s;LangMem 检索 p50 高达 17.99s(p95 59.82s),对交互应用而言不切实际;Zep 总 p50 1.292s;OpenAI 响应生成虽快(p50 0.466s),但其指标未计入需要预先抽取记忆的成本。Mem0g 以适中的延迟代价(检索 0.476s,总 p50 1.091s / p95 2.590s)换取了除全上下文外所有方法中最高的 J 分 68.44%。
4.4 记忆系统开销:Token 分析与构建时间
以物化长期记忆库所需的平均 token 预算衡量:Mem0 以自然语言表示完整对话轮,平均每段对话仅约 7k token;Mem0g 因引入图节点与关系,约翻倍至 14k;Zep 的记忆图消耗超过 600k token——因为其在每个节点都缓存完整的抽象摘要、同时在边上存事实,造成大范围冗余(作为参照,直接喂原始对话也只需约 26k token,比 Zep 的图少 20 倍)。
作者还发现 Zep 存在运营瓶颈:添加记忆后立即检索常无法正确命中查询,数小时后重跑相同搜索却好得多——表明其图构建涉及多次异步 LLM 调用与大量后台处理,不适合实时应用。相比之下 Mem0 的图构建即使在最坏情况下也能在一分钟内完成,用户可立即用新记忆获得问答服务。
5 结论与未来工作
Mem0 与 Mem0g 是两个互补的记忆架构:通过动态抽取、整合与检索紧凑记忆表示,Mem0 在单跳与多跳推理上取得当时最佳表现,Mem0g 的图扩展则在时序与开放域任务上解锁显著收益。在 LOCOMO 上,两方法在单跳、时序、多跳三类问题上相对各自最佳对手分别取得 5%、11%、7% 的相对提升,并将 p95 延迟相对全上下文基线降低逾 91%。总结而言:Mem0 的稠密自然语言记忆管道擅长快速检索简单查询、最小化 token 与计算开销;Mem0g 的结构化图表示以关系清晰度支持复杂事件排序与丰富上下文整合。未来方向包括优化图操作以降低 Mem0g 延迟、探索兼顾效率与关系表示的分层记忆架构、发展更接近人类认知的记忆巩固机制,以及把记忆框架扩展到程序性推理与多模态交互等对话之外的领域。
要点速览
- Mem0 把记忆管理建模为两阶段流水线:抽取阶段结合异步刷新的对话摘要 + 最近 m=10 条消息抽取显著事实;更新阶段检索 top-10 相似记忆后由 LLM 工具调用决策 ADD/UPDATE/DELETE/NOOP。
- Mem0g 将记忆表示为有向标签图 G=(V,E,L):实体为节点、关系为三元组,配备实体抽取器与关系生成器两阶段 LLM 抽取;过时关系被标记失效而非删除,以支持时序推理。
- 检索双路设计:实体中心(定位锚节点后探索出入边构建子图)+ 语义三元组(查询向量与全部三元组的相似度匹配),兼顾实体聚焦型与概念型查询。
- LOCOMO 基准:10 段长对话、平均每段约 600 轮 / 26,000 token / 200 道题,分单跳、多跳、时序、开放域四类;词法指标(F1/BLEU-1)会掩盖事实错误,故以 LLM-as-a-Judge 为主指标(10 次运行取均值±标准差)。
- 主要战绩:Mem0 单跳 J=67.13、多跳 J=51.15 均为最佳;Mem0g 时序 J=58.13 最佳;开放域由 Zep(76.60)以 0.89 分微弱领先 Mem0g(75.71)。
- 总分排序:全上下文 72.90 > Mem0g 68.44 > Mem0 66.88 > Zep 65.99 > 最佳 RAG ≈61 > OpenAI 52.90;相对 OpenAI 记忆功能,Mem0 的 J 有 26% 相对提升。
- 效率是核心卖点:相比全上下文(p95 总延迟 17.117s、约 26k token),Mem0 p95 仅 1.440s(降 91%+)、检索延迟全常最低(p50 0.148s);LangMem 检索 p50 高达 17.99s 基本不可交互。
- 记忆库开销:Mem0 平均约 7k token/对话、Mem0g 约 14k,而 Zep 的记忆图超过 600k token(每个节点缓存完整摘要导致 20 倍于原文的冗余)。
- 图记忆不是万能药:Mem0g 在单跳、多跳上不升反降,仅在时序与开放域等需要关系推理的场景体现优势——记忆结构应与推理需求匹配。
- 工程启示:好的 Agent 记忆 = 有选择地存(抽取)+ 及时地合(更新/冲突消解)+ 快速地取(稠密检索),并把部署指标(token、p50/p95 延迟)与准确率同列为一级指标。