Agent 记忆:你的 Agent 不是忘了,是没想起来

先做个实验。你有一个接了长期记忆的 AI 助手,你告诉它你对坚果过敏,它记下了。过几分钟你问它马卡龙怎么做,它热情地给你一份配方,主料是杏仁粉。
再问一次"我对什么过敏",它答得干脆:坚果。
这段对话不是假想,它被逐字记录在中科大与 Metastone 团队 7 月 27 日上线的论文《Keep It InMind》(arXiv:2607.24368)附录里,出自一个真实的记忆系统。它没有忘记任何东西——几秒钟前还能准确复述那条过敏记录。失败的是另一件事:在唯一需要用到这条记忆的时刻,它没有被想起来。
而 2026 年的 agent 记忆已经是论文最密集的赛道之一。一次语义检索就能捞出三十多个新系统,几乎一篇一个新缩写——MAGE、MemWeaver、FluxMem、HORMA、CraniMem、AriadneMem、MemAct、Memex、MAGMA、AgeMem、EverMemOS、BMAM、CoMem、MemFlow、AtomMem、GAAMA、RaMem、MemoBrain,这还只是一部分;配套评测也在同步膨胀,MemoryArena、AMA-Bench、MemTrace、MINTEval、MemConflict、RECON、MEME、LMEB、MEMPROBE、RealMem,二十多个。连这个方向的综述《Memory in the Age of AI Agents》(arXiv:2512.13564)都在开头承认,领域正变得越来越碎片化,松散定义的术语泛滥,已经把概念清晰度搞模糊,传统的"长期/短期记忆"二分法根本不够用。
热闹之下,几个独立团队从不同方向做了同一件事:给这批系统做一次集体体检。结果比命名通胀更值得看。
体检报告:最好的那个,是一个 markdown 文件
先看 KAIST 与图宾根大学合作的 MEME(Multi-entity & Evolving Memory Evaluation,arXiv:2605.12477)。它的设计意图很明确:以前的基准只测单实体的静态记忆,而真实场景里信息是多实体的、且会随时间变化。所以它按"实体范围(单个 / 多个)× 时间动态(静态 / 演化)"划出四个象限,配六类任务,其中三类是此前任何基准都没打过分的——级联(从依赖规则推断没被明说的变化)、失效识别(意识到一个曾经正确的答案已经不可信)、删除(确认一个被删掉的事实不再被报告)。
任务从一个带显式条件规则的 DAG 知识图谱生成,覆盖个人生活与软件项目两个领域,标准答案由结构保证可验证;他们还把标准事实直接喂给回答模型做了次在场验证,确认这些题原则上做得出来。共 100 个受控 episode,每个约 35000 token。参评系统六个,覆盖三种范式:原始检索(BM25、向量检索)、模型加工型记忆(Mem0,以及 Zep 底层的时序知识图谱引擎 Graphiti)、文件式 agent(Karpathy Wiki 把每次会话抽成带日期的日志再定期编纂成概念文章,MD-flat 则只用读、写、追加三个工具维护一个 markdown 文件)。所有系统统一用 gpt-4.1-mini 同时承担内部加工与最终回答,把差异隔离在记忆架构上。
结果是这样的:
| 系统 | 范式 | 总体准确率 | 级联 | 失效识别 |
|---|---|---|---|---|
| MD-flat(单个 markdown 文件) | 文件式 | 0.42 | 0.06 | 0.05 |
| 直接塞进上下文(不用记忆) | 对照基线 | 0.36 | 0.03 | 0.04 |
| 向量检索 | 原始检索 | 0.33 | 0.04 | 0.00 |
| Mem0 | LLM 加工 | 0.28 | 0.03 | 0.00 |
| BM25 | 原始检索 | 0.25 | 0.02 | 0.00 |
| Karpathy Wiki | 文件式 | 0.10 | 0.01 | 0.02 |
| Graphiti(时序知识图谱) | LLM 加工 | 0.03 | 0.02 | 0.01 |
两个数字需要单独拎出来。
第一,依赖推理是全线崩溃,不是某个系统的短板。 六个系统的级联平均 3%、失效识别平均 1%,而它们在静态任务上并不差,精确召回的平均值是 0.62。也就是说,"存下来并能查到"基本做到了,"这条事实变了、依赖它的结论也该跟着变"基本没做到。作者试过提示优化、加深检索、换更强的回答模型、减少填充噪声,差距都关不上。
第二,六个记忆系统里有五个不如"什么都不做"。 注意上表七行中只有六行是参评的记忆系统,"直接塞进上下文"是不带任何记忆层的对照基线:它拿到 0.36,在六个系统里只输给 MD-flat——而 MD-flat 是这批系统里最朴素的那个,一个 markdown 文件,读、写、追加。精心设计的时序知识图谱只有 0.03,摄入成本却是每 episode 0.55 美元,是 MD-flat 的十几倍。
说句公道话:记忆系统的价值本不在准确率这一栏。上下文方案每次查询要 0.16 美元,而向量检索、Mem0、MD-flat 都在 0.00–0.04 美元区间,查询量一大,成本差距会反过来压倒准确率差距,这也是记忆层存在的原始理由。但反过来说同样成立:如果你上记忆系统的动机是"让 agent 更准",目前这批实现给不了这个承诺。
病灶不在存储,在检索的排序
MEME 最有价值的部分不是打分,是它把失效位置定位到了具体环节。
作者追踪了一个典型的级联案例。Graphiti 把条件规则、变更前的值、变更事件三样都编码成了图里的边——信息完整地存下来了,但查询时图搜索只召回了规则和旧值,"变更事件"那条边掉在 top-k 之外,回答模型于是拿着旧值作答。Karpathy Wiki 是另一种走法:变更事件躺在当天的日志里,但查询 agent 只导航到规则和变更前的来源,从没打开那份日志。向量检索器的问题更微妙——旧值在语义上和查询更像,把新事件压在了下面。
三条路径不同,病灶一致:信息在库里,是检索没把它排上来。
这个诊断让整件事从"存储结构之争"变成了另一个问题。开头那篇 InMind 把它推到了最干净的形式:所有基于检索的记忆系统底下都压着一个从没被明说、也从没被直接检验的前提,作者称之为检索假设:
如果一段记忆是回答某个查询所必需的,那么这段记忆可以通过仅由该查询算出的相关性分数被召回。
这个假设对"直接提问"是成立的——"我对什么过敏"本身就是那条记忆的检索线索。它在另一类情况下必然失败:当相关性是由两段文本里都没有的世界知识建立起来的时候。开头那段对话就是例子,过敏记录和马卡龙请求不共享任何词、话题或向量邻域,连接二者的"法式甜点用杏仁粉"在两轮对话里都没出现。养猫的人问百合花做餐桌摆花好不好是同一个结构:查询里没有动物、没有宠物、没有毒性,桥梁是"许多百合对猫有毒"这条兽医知识。这类结构在现实里到处都是——药物与食物的相互作用、交叉过敏、宗教饮食规则与药用胶囊的明胶来源。
InMind 把这个失效模式叫做隐式关联盲区,做了 125 个任务,其中 113 个的知识桥梁有可引用的公共来源,覆盖十个生活领域,全部经专家验证。它的关键设计是配了对照组,把三种此前被混在一起的解释分开:事实从没被存下来、模型缺少桥接知识、事实存下来了但从没被浮现。这三种病要用完全不同的药,而以前的基准分不开它们。
判决非常干净。把决定性的那条记忆直接放进上下文,骨干模型答对 84.0% 的间接查询,说明桥接知识它是有的;同样的记忆改成需要被检索,六个覆盖向量、图、智能体式检索三类设计的系统最高只有 14.4%,任何查询期配置都没超过 16.0%。而这些系统被直接问到同样的事实时,召回率高达 100%。换成维度大八倍的嵌入模型,召回指标每个系统都涨,那个差距基本没动。
失效因此被锁定在检索这个接口本身,而不是表示能力或存储结构。原因是一个顺序问题:检索必须在模型被咨询之前就先承诺什么算相关,而模型是整个系统里唯一持有世界知识、唯一有能力认出那条桥梁的组件。 无论你把记忆组织成图里的知识边、检索器规划出的子查询还是多级存储,通往决定性记忆的每条路都要先过一道相似度关卡,而这道关卡的分数是用"记忆还没进入视野"时的表示算出来的。
InMind 最后做了一个刻意最简的对照:一个"始终在状态里"的探针,不做检索,只在查询到来之前就让记忆保持可见——本质上就是一份被勤勉维护的档案。它把差距恢复了大部分,拿到 68.8%。
两个结论就这样对上了:MEME 里赢的是一个 markdown 文件,InMind 里赢的是一份常驻可见的档案,它们是同一件事。

三十多个名字在争的,其实是四件事
把那三十多个系统摊开、剥掉命名,真正的分歧只有四条,看清它们比记住谁叫什么有用得多。
第一条:按什么组织记忆。 主流答案是语义相似度,上面两个基准打的就是它。第一个像样的替代方案来自微软与中科大等机构的 MAGE(arXiv:2606.06090):现有系统不管数据结构是平坦向量库、实体关系图还是分层架构,都按内容与当前查询的相关度浮现条目,而不是按它在执行轨迹里扮演的角色。对步骤互相依赖的长程任务,后果有两个——决策轨迹被切碎,执行状态无法完整重建;不同探索尝试的条目混在同一相关性空间里,有效轨迹和错误轨迹一起被召回,污染后续推理。它的替代方案是一棵两层执行状态树:底层记录每个动作-观察对,从根到当前节点的路径就是完整轨迹;顶层在子目标边界把连续片段压成摘要,摘要要先过校验才成为可信记忆,发现错误就回退到边界、作为新分支继续。在 MemoryArena 上,平均任务成功率比基线高 7.8 到 20.4 个百分点,token 消耗降低 55.1%。
第二条和第三条:谁来决定何时压缩,以及压缩是否有损。 这两个维度出自同一篇论文,CMU 与 Meta 的 ACM(arXiv:2607.23809)。通行做法是外部阈值触发,上下文用到某个百分比就强制压缩,Claude Code 的自动压实即属此类;ACM 认为这个时机与 agent 演进中的推理焦点错位,因为规则手工设计、运行在决策过程之外,并不知道它此刻正往哪个方向想。另一半问题是摘要方案通常把原始消息直接丢掉,ACM 则在压缩后把原文卸载到外部文件,给每份摘要分配一个标识符映射回去,只加两个工具:一个压缩并卸载,一个按标识符精确回查。压缩于是变成无损的。效果上,Qwen3.5-9B 在 BrowseComp-Plus 上比 ReAct 基线提升 27%、DeepSearchQA 16%、SWE-Bench Verified 8%,峰值 token 降约 20%,多次独立试验之间的解答一致性也提高了。
第四条:这层东西放在哪。 这是被讨论得最少、但对落地最要紧的一条,代表性答案是 Oracle 7 月 14 日那份技术报告(arXiv:2607.13157)。它的出发点不是算法而是工程现实:记忆的需求和数据库高度重合,都要持久化、要索引、要带作用域的检索、要能和企业里结构化与半结构化的数据放在一起;而现在的实现散落在虚拟上下文管理器、反思缓冲、记忆专用服务、向量库和框架抽象里,这种碎片化让治理、安全、数据本地性以及与应用逻辑的集成全部变复杂。所以它把数据库当作记忆层的基座而非嵌入向量的外部下水道,并把用户、agent、会话三个标识符做成一等的检索维度,每个维度带一个精确匹配开关,让调用方可预测地在精度与召回之间取舍。报告给的数字是 LongMemEval 上 93.8% 准确率,比平铺全部历史少用约 10.7 倍 token。

还有一层:记忆是写进去就生效的信念
上面四条都是关于"准不准、省不省"。还有一层风险最容易被跳过:记忆一旦写进去,就会被当成前提使用。
这不是推演。攻击者无需改写记忆库,只通过正常的查询与观察输出交互就能把恶意记录种进去(MINJA,arXiv:2503.03704);不可信的外部内容在良性会话里被存成记忆,之后作为指令重新进入系统,形成跨会话的持久控制(Zombie Agents,arXiv:2602.15654);投毒目标也不必是事实,伪造一段推理轨迹同样有效,且能用规避性措辞绕过关键词防御(FARMA,arXiv:2607.05029);被污染的长期记忆还能悄悄扭转工具选择策略(MemMorph,arXiv:2605.26154)。记忆投毒已经进了 OWASP 的智能体安全风险清单。
两个设计提法因此值得记住。一个是 MemTX(arXiv:2607.23929)那句判断——一次记忆写入不等于一次信念提交。现在的系统把每次被接受的写入都当成立刻可用的真相,于是一个被污染的工具结果、一次过期的更新、队友一条没写完的笔记,都可能驱动一个不可逆的动作;它的做法是让每条记录带上证据、权限、来源和有效期,写入先在快照隔离里预演。另一个是 MemLineage(arXiv:2605.14421),把这当成保管链问题而不是过滤问题——给每条记忆附上密码学溯源和派生血缘,"这条记忆能不能支撑一个敏感动作"于是变成可判定的,而不是靠检测器猜。

对国内落地场景,这一层比准确率更早成为硬约束。记忆里天然沉积着对话原文、推断出的用户偏好和检索来的业务事实,一旦放在应用侧的独立服务里,你就得在主数据平台之外再复制一套身份、角色和策略上下文——这正是 Oracle 那份报告点出的问题:记忆放在哪里,决定了安全策略的执行点在哪里。 数据不出域、可审计、可删除这三条要求落到记忆层,就是作用域、血缘和留存策略,而不是"我们也上了个向量库"。
工程上今天该怎么做
如果你正在给 agent 加记忆,我的建议是按下面的顺序做判断,而不是先去挑框架。
先确认你要的是省钱还是变准。 这两件事目前不在同一条路线上。要省钱、要跨会话不重复问用户,记忆层是对的,成本能降一到两个数量级;要让长程任务更准,先老实测一遍"把历史直接塞进上下文"的基线——MEME 里六个记忆系统有五个不如这条基线,而绝大多数团队从没测过它。
把决策关键的事实做成常驻可见,而不是等着被检索。 这是两个基准共同指向的结论:InMind 那个恢复到 68.8% 的探针本质就是一份维护良好的档案,MEME 里赢的也是单文件 markdown,而 Anthropic 上下文工程实践里的"结构化笔记"是同一思路。至于哪些事实值得占用常驻位置,这正是 InMind 点名的 routing 问题,需要显式设计。
压缩要看清是有损还是无损,以及谁在触发。 单纯的阈值压实并不总是净收益,有基准显示某些设置下它反而拉低表现,挂上可回查的记忆工具才带来提升,条件允许就优先选"压缩后原文可精确回查"的形态。Anthropic 那套里最轻的一档是工具结果清理,只清掉过期的工具输出、不动推理链,通常是性价比最高的第一步。
别急着上知识图谱。 MEME 里时序知识图谱总体 0.03,摄入成本却是最高的一档。图结构在多跳关系推理场景仍有价值,但它不是"更高级的记忆",只是把相似度关卡换了个位置——InMind 说得更直接:图检索只在桥梁已经在图里、并且查询能激活它的时候才管用。
结论
- 真问题被定位了:不是怎么存,是什么时候让它可见。 两个独立基准指向同一处——信息大多已经存进库里,失败发生在检索这个动作本身,因为它要求一个不懂世界知识的组件在模型看到记忆之前就判断相关性。InMind 把"哪些事实必须保持可见"命名为 routing,这才是接下来值得投入的方向。
- 先测那条没人测的基线。 把历史直接塞进上下文,在 MEME 上拿到 0.36,六个参评记忆系统里有五个不如它;表现最好的是一个单文件 markdown(0.42),时序知识图谱只有 0.03。记忆层今天成立的理由是成本(每查询 0.16 美元对 0.00–0.04 美元),不是准确率,选型时把这两个目标分开谈。
- 依赖推理是共同盲区,短期内没有便宜解法。 级联 3%、失效识别 1%,提示优化、加深检索、换更强的模型都关不上;唯一部分闭合差距的配置是让内部模型在写入时就把推理结果传播进库,代价约为基线的 70 倍。如果"一个事实变了、依赖它的结论也必须跟着变"在你的业务里是刚需,那就得当成专门模块来设计。
- 记忆放在哪,决定了安全策略的执行点在哪。 记忆一旦被写入就会被当作前提使用,而投毒只需要正常交互即可完成。把它当成需要作用域、来源、有效期和血缘的数据资产来管,比当成一个更聪明的向量库更接近工程现实——这也是"数据库内还是数据库上"这个老问题在记忆层的重演。