Wink Pings

30款AI记忆产品,知识更新题最好成绩44.4%

30款产品走完同一组三次对话,存了什么、塞回什么、账单多少。真正的分水岭不是recall,是新事实能不能顶掉旧事实。独立测试台上,这个数字不到一半。

大模型没有记忆。

每次请求都是空白prompt。模型能“记住”什么,取决于有人往里面塞了什么文本。记忆产品做的全部事情,就是决定塞哪些。

Sergii Makarevych最近评测了30款AI agent记忆产品,从Mem0、Zep到AWS AgentCore、Google Memory Bank,再到Claude Code、Cursor这类内置记忆。方法很朴素:用一个客服助手Dana跑三次对话,看每个产品存了什么、下一轮注入了什么、最后花多少钱。

结论不复杂。所有产品都在做五件事:捕获、判断、存储、查找、注入。但真正区分它们的是两个选择,存什么,怎么读回来。其余功能列表都是这两个选择的延伸。

Dana的三次对话

第一天,客户说自己在Team plan,跑Postgres 14,喜欢短回答。

第九天,客户说迁到了Postgres 16。

第十四天,客户问,导出功能在我的数据库版本上能用吗?

正确答案要同时满足三件事:知道客户现在跑16、知道Team plan包含导出、回答够短。所以测试实际在问:两周前的plan和偏好还在不在?“Postgres 16”有没有顶掉“Postgres 14”?第十四天的prompt里只放了必要事实,还是把半个月的对话全灌了进去?

两个陷阱从这里长出来。

第一个是supersede trap,新旧事实都留着,第十四天两个版本一起返回,答案取决于模型信哪个。recall基准测不出来,因为那些题大多只问一次就陈述过的事实。

第二个是over-injection trap,每条消息都返回最相似的二十条事实,导出问题、迁移故事、plan细节全塞进一个只需要一行答案的请求。回答可能对,账单不对。

Makarevych的提醒很直接:分开记忆产品的测试很简单,新事实有没有替代旧事实,prompt有没有只收到仍然为真的那条。评论区里Sami Daar说得更短,“事实变了怎么办,是大多数记忆工具跳过的部分。”Euan Cox补了一句,“recall是买家问的,实际让agent失去信任的是它自信地引用上一季度的答案。”

那项独立测试的数字不好看。十二个记忆系统的统一测试台上,知识更新类问题的最高exact-match分数是44.4%。不到一半。而各家厂商首页上写的recall分数在九十几。

六种存法,六种改口方式

存法有六种。

短事实,模型从对话里抽出来,一次一条。图谱,人、产品、日期和它们之间的关系,读的时候沿链接走。一页笔记,几百字,整页塞进每次prompt,模型原地重写。文件夹里的纯文本,模型自己用工具打开和写入。带版本的链接笔记,每次修改保留旧版。近期清单加长期清单,新事实先进近期,反复出现的才升到长期。

事实变化时,六种写行为分得更清楚。

只追加。Mem0当前的算法、A-MEM、HippoRAG 2都属于这一类,新旧事实并存,让读模型自己判断。Mem0自己BEAM结果表里的矛盾测试,是所有结果里最弱的一行。

模型对账。LangMem、Google Memory Bank、Microsoft Foundry、CrewAI、AWS AgentCore都这么干。新事实来了,模型读旧事实,输出create、update或delete。CrewAI源码里的去重阈值是0.98,查找阈值是0.85,两个数挨得近,意味着“Postgres 14”和“Postgres 16”算相似但不算重复,这正是你要的行为。

时间图谱。Graphiti给每条事实加valid-from和valid-to。新事实来了,旧边关闭,不删除。第十四天查当前版本只返回开放边,历史还在,审计能用。Cognee有双时态事实,但只在企业版。

重写块。Letta的memory block、Mastra的working memory、Anthropic API的memory tool、Claude Code的auto memory、ChatGPT的profile,都是模型原地改一段固定大小的文本。替换是字符串替换,效果等于模型那一轮的判断力。

版本链。Elastic的参考设计叫“supersede, not delete”,新事实替代旧事实,旧的隐藏但保留。agentmemory的README写了矛盾检测和版本链。Hindsight把事实合并成带历史和证据计数的观察。这个形状最接近Dana需要的:一个当前答案,一条可查的痕迹。

按热度或阶段提升。MemoryOS用访问频率算热度,跨过阈值就从短期队列升到长期画像。EverOS和MemOS跑分阶段流水线,抽取、去噪、合并、演化,保留历史。哪个版本进画像取决于被碰过多少次,不好预测,更难向客户解释。

按规则让旧事实退役的,只有时间图谱和版本链两种。模型对账和重写块依赖模型当轮的判断。只追加的商店两家都留着。

没人印在价格页上的账单

每次抽取都是一次模型调用。独立研究里,中等模型gpt-4o-mini的格式错误率约18%,30亿参数的Qwen约30%。大约五次抽取有一次静默失败,产品重试、丢掉事实或者存了垃圾。

建A-MEM的索引跑一个基准要15小时,某个研究系统在同一个任务上花了超过700万token。Benchmark幻灯片不印这个。

AWS把这件事的价格写得最明白。它自己的抽取收每千条长期记录每月0.75美元,你自带抽取收0.25美元。三倍差价,就是抽取这一步值多少钱。

Redis的研究设置在LongMemEval上测出每session约7美分。一天一千个session,一个月2100美元,还没算一次读取。这笔钱付给你的模型提供商,不是记忆厂商。

Mem0的论文报告了91%的延迟下降和每query的token数,没报摄取对话的成本。能让你比较记忆产品和全量重发成本的那个数字,恰好缺席。

基准测试的水分

LoCoMo的一段对话约2万token,LongMemEval短版约10.3万token,只有中版超过100万才超出当前模型的单次读取能力。一个记忆产品在模型能整段读入的任务上拿高分,证明它没把recall搞坏。记忆帮没帮忙,另说。

Mem0自己的论文里,全量context在它的评审模型下得72.90,Mem0得66.88。整段重发赢了产品6分。产品赢在延迟和token。准确率上它是输的。

Mastra在LongMemEval上报告94.87,同一轮全量context是60.20。这是反向结果,但原因是Mastra的全量context那组用了一个读10万token很差的模型,地板不是天花板。

再看裁判。同一批答案换一个评审模型,分数从55.8跳到81.4,26分。一个竞品的benchmark仓库把这种效应估在15到25分。厂商之间的分数差距,比裁判之间的差距还小。

Zep重跑Mem0报告里的Zep分数,拿到75.14,Mem0原报65.99,第三方Omi的仓库跑出58.4。同一个产品同一个基准,三个公开跑分跨17分。

LoCoMo没有知识更新题,Zep自己都这么说。Dana的Postgres 14变成16,那个基准不测。

控制和安全的硬账

一个记忆store,是客户的话在对话结束后仍然存在的唯一地方。九项控制,从写入门禁、溯源到主体隔离、回滚、删除语义,安全综述查了六种常见架构,没有一种全覆盖。

删掉ChatGPT的一条对话,不会删掉从它生成的记忆,Claude.ai也一样。两个产品都有单独的记忆管理页,隐私政策得描述两种删除。

Copilot的事实28天不用就过期。AWS的原始事件按配置3到365天过期。Memory Bank的修订默认365天。过期是多数产品实际实现的删除。“忘掉这条”作为即时动词,只在Microsoft和Elastic的设计里出现,别处很少。

验证遗忘没有实例。安全综述里没找到一个端到端跑通的部署架构。你可以删掉那行记录,没人能证明事实已经从每一层派生摘要里消失。

投毒更麻烦。持久化的记忆注入比一次性prompt注入危害大,因为之后的每个session都会重新注入它。Google自己的Memory Bank文档都把投毒列为风险。

溯源是少数产品能回答“agent为什么信这个”的东西。Copilot给每条事实附代码引用,使用时重新检查。Hindsight给每个观察记证据计数。Memory Bank每次修改留修订。agentmemory保留版本链。四个能回答这个问题的产品,一个是编码工具,一个是图谱层,一个平台,一个单人维护的插件。大型事实store大多答不了。

评论区有人把这点讲得直接。IA_LABS说,如果每条存储事实都能指回它来自的session和消息,错的记忆可以追到源头删掉,而不是用更多prompt指令去对抗。Deep说得更简单,挑那个删错事实容易的。

导出和锁定也真实。Letta的MemFS把记忆存成git跟踪的Markdown,Claude Code和Codex存本地文件,OpenViking导出可编辑Markdown。文件型产品的最大卖点就是能拿走。ChatGPT的记忆没有API,别的应用读不了。世界上用户最多的记忆功能,恰好是你导不出的那个。

一年之内,Zep废弃了社区版,Letta移除了AgentFile导出格式,Cursor在2025年11月到2026年1月之间移除或隐藏了记忆功能,Mem0把OpenMemory文件夹从主分支删了但文档页还挂着,Memobase的云主机打不开。五个产品在你可能集成的那个面上,一年内变了或没了。

评论区补上的细节

Emilio Ranucoli说提取token坑了他:每条写路径都付一次LLM调用做总结,成本随对话长度增长,不随你实际保留的事实数量增长。

Unified Machines提了晚到会议笔记的场景:周二会议的笔记在周五决定之后才导入,agent是把周五当作当前,还是把最新导入当作最新事实?会议时间和摄入时间得分开处理。

Harley Lewis Foote问,用户说“我从没说过那个”时,哪个产品能处理,而不用重训整个embedding空间。原文没给答案。

Randy Northrup给了Claude Code 200行上限的实用做法:索引只放一行指针,细节放在指针指向的文件里,索引保持小,agent只在钩子匹配时打开文件。

Simon Mallas的做法是不重写。更正是一条新消息,指明它替代哪条,“当前是哪个”就成了精确查找,旧版本仍然可读。他做了一个叫Agent Letterbox的东西。条件只有一个,那条链接是作者的声明,没人验证。

Harsh在评论区贴了自己用Rust写的agent harness项目Medha,强调验证优先和溯源,附了GitHub链接。他把supersede测试扩展了一步:网页内容和用户更正矛盾时,谁的claim赢。这需要规则,不只是存储。

0xAIBrain建议把Dana的三次会话做成开源测试夹具:同样的对话、存下的记录、最终注入的prompt、token账单。读者可以拿两个候选产品对比,而不用把一篇文档综述误当成benchmark。

这个建议值得认真对待。原文自己也承认,每个产品都是按2026年10月27日的文档走完三次会话,“告诉你产品设计成做什么,不告诉你某一天它实际做了什么”。后者只能自己跑。

选择顺序

原文的决策指南按场景分。

agent跑在一个云平台上,用户就是平台客户,用平台自带记忆,然后跑三会话测试,看第九天对账步骤写了什么。agent本身是编码助手或跑在里面,用内置记忆加一个规则文件,检查文件上限和区域可用性。框架上构建且每用户事实不到一千条,用框架store。用户积累几千条事实、问题跨很多条,看时间图谱或融合搜索。想看见和编辑agent相信什么,用文件型。需要证明为什么信,用带溯源的产品。需要按请求删除,用支持即时forget和逐项删除的store,然后查派生摘要怎么处理,因为没人验证那个。

如果只是在两个候选产品之间选,用你自己的三会话案例加十个真实用户历史,测四件事:supersede、每轮token、每session抽取token、以及相对同模型全量重发的差值。

最省钱的起点可能反直觉。平台记忆和助手记忆免费,每个独立记忆厂商都是在跟客户已经拥有的东西竞争。先用免费的跑三会话测试,失败了再买。

原文的最后一条takeaway说得克制:独立记忆厂商如果平台记忆足够好就会输掉这个市场,图谱厂商只在问题跨很多事实时才赢。知道自己在哪一边,就知道那些benchmark是写给谁看的。

发布时间: 2026-10-28 15:33