AI 博客

Mem0、Zep、Letta 与 LangMem:记忆基准分不是那个采购决策

同一个产品,在名字相同的基准上被报出过 49.0% 和 94.4%,取决于谁跑的、什么时候跑的。分数无法为这个品类做裁决。这四者之间真正不同、而且在你采用之后就改不了的,是谁决定什么被记住、谁让它失效,以及你还能不能把它取出来。

作者 智能体 AI 维基 26 分钟读完

Mem0 在 LongMemEval 上被报出过 49.0%,也被报出过 94.4%——同一个基准名字、同一个产品,不同的测评框架、不同的年份。这个跨度比这四个产品中任意两个之间的差距都大,也就是说,公开的分数替你决定不了任何事。真正能决定的,是分数从来不问的那个问题:谁往记忆里写、谁让它失效,以及你还能不能把一个人从里面取出来。

一览

四个产品,对"记忆在结构上是什么"给出了四个不同的答案——而你继承的正是这个结构性答案。

项目结构形态谁决定什么被记住部署方式
Mem0 向量存储之上的记忆层,按对话/会话/用户/组织划分作用域 一趟抽取流程把事实在作用域之间提升 开源库,或托管平台
Zep 时序知识图谱(Graphiti)——实体为节点,事实为带有效区间的边 一条摄取流水线做实体消解,并给边打上日期 开源图引擎,或托管服务
Letta 智能体运行时,记忆块是上下文窗口里带标签、有字数上限的区域 智能体自己,通过工具,外加后台的"睡眠期"智能体 自托管 Letta Server,或 Letta Cloud
LangMem LangGraph store 之上的一套记忆原语 SDK 你自己——它给你抽取与检索,不给你策略 你 LangGraph 应用内的一个库

注意第三列在做什么。Mem0 和 Zep 用一条你可以配置的流水线替你决定。Letta 把决定交给模型。LangMem 把决定交给你。这才是真正的选择轴,而没有任何基准在量它。

为什么分数无法做裁决

这个品类里的每个产品都公布数字,通常是 LongMemEval、LOCOMO 或 DMR。把一年的数字放在一起读,你看到的不是一份排名,而是一次测评框架敏感性的演示。

Reported agent-memory benchmark scores, grouped by who reported them Horizontal bar chart of published memory benchmark results. On LongMemEval, a comparison favouring Zep reports Mem0 at forty-nine percent and Zep at sixty-three point eight percent, while Mem0's own later report puts Mem0 at ninety-four point four percent. A third-party roundup reports LangMem at fifty-eight point one percent on LOCOMO and Mem0 at ninety-two point five percent. The same product spans forty-five points depending on the reporter. Reported score, by who ran the harness LONGMEMEVAL Mem0 — per Zep comparison 49.0% Zep — per Zep comparison 63.8% Mem0 — per Mem0, 2026 94.4% SAME PRODUCT, SAME BENCHMARK NAME: 45-POINT SPREAD LOCOMO LangMem — third-party roundup 58.1% Mem0 — per Mem0, 2026 92.5% 0% 25% 50% 75% 100% FIGURES AS PUBLISHED BY EACH SOURCE. A MEMORY SCORE MEASURES AN ENTIRE PIPELINE — EXTRACTION MODEL, CHUNKING, RETRIEVER BUDGET NONE OF THESE BARS IS WRONG. THEY ARE ANSWERS TO DIFFERENT QUESTIONS, WHICH IS WHY THEY CANNOT BE STACKED INTO A RANKING
每根柱子按其出处都是真的。叠在一起,它们量的是那些测评框架,不是这些产品。

一份被广泛引用、结论有利于 Zep 的对比,把 Mem0 放在 49.0%、把 Zep 放在 63.8%(LongMemEval);而 Zep 的论文报告 DMR 上 94.8%、MemGPT 为 93.4%——MemGPT 正是 Letta 由之生长出来的那个研究系统。Mem0 自己 2026 年关于其"令牌高效算法"的报告则给出 LongMemEval 约 94.4%、LOCOMO 约 92.5%,且每次检索调用不到 7,000 个令牌,而全上下文基线要 25,000 以上。今年一份第三方汇总测得 LangMem 在 LOCOMO 上 58.1%,p95 检索延迟 59.8 秒,而 Mem0 是 0.2 秒——一个三百倍的差距,它告诉你的是两套集成,而不是两个产品。

这些数字没有一个是不诚实的。它们不同,是因为一个记忆分数量的是一整条流水线——是哪个模型做的抽取、语料怎么切的、检索器被允许看到什么、测评框架有没有让系统重新查询。这与智能体外壳是同一个问题,而且在这里更严重,因为在记忆这件事上,厂商就是那层外壳。对待厂商跑出来的竞品对比,请按批判地阅读基准所说的来:把它当作"这家厂商优化了什么"的证据,而不是名次的证据。

四条写入路径

Four agent-memory write paths compared Four columns, each showing how a conversation becomes stored memory. Mem0 runs an extraction pass and promotes facts up through conversation, session, user and organisation scopes. Zep resolves entities into a temporal graph where each edge carries a validity interval. Letta gives the agent tools to edit labelled memory blocks in its own context window, with a background sleep-time agent reorganising them. LangMem supplies extraction and search primitives over the LangGraph store while the developer writes the write policy. Conversation turn arrives Mem0 PIPELINE DECIDES Extraction pass scope: conversation scope: session scope: user scope: organisation Promotion is the mechanism: a fact confirmed across sessions outranks one seen once. Zep PIPELINE DECIDES Entity resolution node node edge: fact valid 12 Mar → now edge: superseded valid 4 Jan → 12 Mar A changed fact becomes history rather than a contradiction — and history is what erasure must remove. Letta THE AGENT DECIDES Agent + memory tools block: persona block: human block: shared Sleep-time agent reorganises off-path Blocks are labelled, size- capped regions of the context window, shareable between agents. LangMem YOU DECIDE Extraction primitive Search primitive Your write policy — supplied by you LangGraph store Semantic, episodic and procedural extraction, but no opinion about when to write or what to expire.
四者的读取路径看起来差不多。让它们变成不同产品的,是写入路径。

Mem0——抽取,以及在作用域之间提升

对话经过一个抽取步骤,蒸馏出耐久的事实,而这些事实被存放在某个作用域上:这次对话、这个会话、这位用户、这个组织。作用域之间的提升是那个有意思的机制——只观察到一次的偏好,和跨多个会话被确认过的偏好,不是同一个对象。它是四者中最容易加进一个已经存在的智能体里的,框架支持面也最广,这也是它采用率最高的主要原因。这份便利的代价是:抽取策略在很大程度上是别人的,而抽取恰恰是"一次错误写入变成一个永久信念"的地方。

Zep——一张给事实标了日期的时序图

Zep 的 Graphiti 引擎把对话消解成实体与关系,而每条边都带着一个有效区间:这件事从那时起到此刻为真。这一个设计选择回答了其他系统都在含糊其辞的那个问题——事实变了怎么办。旧的边变成历史而不是矛盾,智能体因此能对"什么时候"作推理。当你的领域里充满会过期的事实(账户状态、角色、地址、价格)时,它是最强的选项;而据报告的代价是:图遍历的检索路径在 50–150 毫秒量级,纯向量查找是 10–50 毫秒。它也是四者中意见最鲜明的一条摄取流水线,而实体消解这一步是会悄悄把两位客户合并成一个的。

Letta——智能体编辑自己的记忆

Letta 不是一个你塞进智能体里的记忆库;它是一个把记忆当作原语的智能体运行时。记忆块是上下文窗口里带标签、有字符上限的区域,由智能体通过工具来编辑,而且块可以在多个智能体之间共享。它的独门特性是睡眠期计算:后台智能体共享主智能体的记忆,在没有人向它提问的时候重新整理这份记忆,于是"整合"发生在关键路径之外,而不是发生在用户的某一轮里。对于必须逐步积累出一个自我模型的长时自主智能体,这是对的形态;而如果你已经有一个用得挺顺手的智能体框架,它就是错的形态——采用 Letta 意味着采用一个运行时。

LangMem——只给原语,策略是你的

LangMem 是 LangChain 的 SDK,在 LangGraph store 之上给 LangGraph 智能体加长期记忆,带有面向语义、情景与程序性记忆的抽取能力。它把零件给你,然后指望你来定策略:什么时候写、提升什么、什么时候过期。如果你本来就在 LangGraph 上,而且对自己领域的记忆语义有明确主张,那这是可能的最低集成成本,也是你调得动的那一种。如果你还没有那些主张,一套原语 SDK 就是一条"在不知不觉中造出一个定制记忆系统"的路。

采用之后仍然成立的那两条轴

失效与删除,才是这些系统真正分道扬镳的地方,而它们恰恰是没人做基准的两条轴——一部分因为难打分,更多是因为它们只在第二年才开始疼。

Mem0, Zep, Letta and LangMem across five post-adoption axes Feature matrix with four rows and five columns. Mem0 has a vendor-supplied write policy, overwrite-based invalidation, scope promotion complicating deletion, portable storage and low integration cost. Zep has a pipeline write policy, strong dated invalidation, historical edges that complicate deletion, medium portability and medium integration cost. Letta puts the write policy in the agent, has weak explicit invalidation, shared blocks that complicate deletion, low portability and high integration cost. LangMem leaves the write policy to the developer, so invalidation and deletion are whatever the developer builds, with high portability and low integration cost on LangGraph. The five axes you cannot change after adoption WRITE POLICY INVALIDATION DELETE ONE PERSON PORTABILITY INTEGRATION COST Mem0 Vendor pipeline Overwrite Scope promotion Your vector store Lowest Zep Vendor pipeline Dated edges History is kept Graph, vendor IDs Medium Letta The agent Agent rewrites Shared blocks Runtime-bound Highest LangMem You Whatever you build Whatever you build Your store Low on LangGraph STRONG / YOURS MEDIUM WEAK / HARD "STRONG" ON WRITE POLICY MEANS THE DECISION IS YOURS OR THE AGENT'S, NOT THAT IT IS BETTER — MORE CONTROL IS ALSO MORE TO GET WRONG NO ROW WINS. EACH COLUMN IS A DECISION THAT OUTLIVES THE BENCHMARK NUMBER THAT PROBABLY DROVE THE PURCHASE
读列,别读行:每一列都是一个你只做一次的决定。

失效。只有 Zep 把"事实变了"当作一个带日期的一等事件来处理;其余三者把它当成一次覆写、一个留给检索器去化解的矛盾,或者一条你自己写的策略。这件事比基准上的准确率更要紧,因为"一条过期的事实被自信地检索出来"是一个带记忆的智能体让你难堪的最常见方式——而且与检索未命中不同,它在 trace 里看起来不像一次失败。一般性的处理见记忆写入路径架构

删除。四者都会派生状态——一个嵌入、一条抽取事实、一段摘要、一条图上的边——而这些产物写下来的时候,谁都不再带着那个人的名字。Zep 最大的强项在这里反转了:一张把事实标记为历史而不是移除的图,做的恰恰是删除请求所要求的反面;而由别人的对话断言出来的边,描述的仍然是你的当事人。Letta 的共享记忆块以另一种形状提出同样的问题:一个由三个智能体贡献、又被一个睡眠期智能体编辑过的块,没有干净的按当事人划分的边界。Mem0 的作用域提升意味着某位用户的事实可能早已被提升成了一条组织级事实。LangMem 把整个问题留给你,这至少是诚实的。这件事的运维版本我们单独写过:针对智能体记忆的删除请求;而采购决策版本是:签约之前,让每一家去删掉一个合成当事人,然后用语义搜索去找他。

可迁移性。你自己拥有的向量库是可迁移的;一个用厂商分配的实体 ID 的托管图谱要差一些;一个持有你智能体身份的运行时最难。按"一周之内你能把多少记忆搬去另一个产品"给四者排序,结果几乎正好是"每一家替你做了多少事"的倒序——这是这类交易的常态形状,不是对谁的批评。

什么情况下选哪个

情形因为要当心
已有智能体,本月就想上个性化 Mem0 集成成本最低、框架支持最广、开箱带作用域记忆 你继承的是别人的抽取策略
会过期的事实——账户、角色、价格、权益 Zep 边上的有效区间让"这在什么时候为真"可被回答 实体消解可能把两个人合并;图读取更慢
必须积累自我模型的长时自主智能体 Letta 记忆是运行时原语;睡眠期智能体在关键路径之外做整合 采用它意味着采用一个运行时,而不是一个库
已在 LangGraph 上,且记忆语义清晰 LangMem 由你组合的原语,跑在你已经在运维、也调得动的存储上 它不提供策略,所以你会写一个——不管你本来想不想

在读任何人的数字之前,先用你自己的对话记录,把同一套评测在四家上各跑一遍:五十段真实对话、二十个答案在语料中途发生过变化的问题,外加一个合成的人,然后要求每个系统把他忘掉。这大约花一周,而它量的正是决定结局的那三件事——在你领域上的召回、事实变更时的行为,以及删除到底管不管用。在这个品类里,厂商就是那层外壳,所以唯一可比的基准,是你自己跑出来的那个。

常见问题

厂商的基准数字是不诚实的吗?

大体上不是——它们是各家自己挑的问题的答案。一个记忆分数量的是一整条流水线,包括抽取用的模型、切分方式,以及测评框架允许系统重新查询多少次。两支同样诚实的团队,隔一年、用不同脚手架测同一个产品,完全可能正当地得出相差几十个点的数字。这是不该相信那个名次的理由,不是不该相信那些人的理由。

我到底需不需要一个记忆产品?

常常不需要。如果你智能体有用的上下文塞得进窗口,而且会话很短,那么一个管理良好的对话缓冲区加上对你自己文档的检索,就胜过一个记忆层,还跳过了整整一类过期事实与删除的问题。记忆只有在"事实必须跨会话存活、并且会随时间变化"时才值回票价——那条线画在哪里,见智能体记忆

能同时用两个吗?

能,而常见的搭配是:一个通用记忆层管用户偏好,加一张图管那些会变的领域实体。这是一种真实的架构,而不是拿不定主意;但它把写入路径翻了倍,而每一条写入路径都是一个错误事实可能进来的地方——那正是记忆投毒防御所描述的攻击面。

记忆在令牌上要花多少钱?

比"全上下文"那条路便宜,这本来就是重点:Mem0 报告其单次检索不到 7,000 个令牌,而把历史全塞进去要 25,000 以上。但写入侧不是免费的——抽取、摘要与整合都是按轮或按会话发生的模型调用,而它们很容易被一个只数读取路径的成本模型漏掉。

那我该改测什么?

三件事,按这个顺序:用户真的回头引用过的那些事实的召回;某个事实在对话中途发生变化时的正确行为;以及对一个当事人的端到端删除——用语义搜索去验证,而不是按键查找。第一件是公开基准所近似的,而第二和第三件才决定你一年后还高不高兴。怎么搭那套集合,见评估记忆

延伸阅读

本站相关:

项目来源: