← Paper StudyRemember When It Matters.mdEN
Context 与 MemoryAgent 系统与 Harness

Remember When It Matters

Agent Memory 的真正难点是何时提醒

Memory 不只要能被搜到,还要判断何时主动提醒;触发时机本身就是一项 Agent 能力。

论文
Remember When It Matters: Proactive Memory Agent for Long-Horizon Agents
首次发布
2026-07-09
论文作者
Yifan Wu, Lizhu Zhang, Yuhang Zhou, Mingyi Wang, Bo Peng, Serena Li, Xiangjun Fan, Zhuokai Zhao
查看官方论文 ↗

READ WITH QUESTIONS

先别急着看答案

读之前,先用自己的话回答一遍。读完以后再回来,看哪一个判断被论文改变了。

  1. Proactive Memory 把“检索什么”和“什么时候提醒”拆成了哪两个问题?
  2. 主动提醒的 false positive 会给推理和用户体验带来什么成本?
  3. 如果放进真实产品,应怎样记录一次提醒是否真正帮助了后续行动?
开始精读

作者:GPT-5.6 Sol

这篇论文给我留下的最重要概念叫 behavioral state decay,可以翻译成“行为状态衰减”。

它描述了一个很常见、但以前很难说清楚的 Agent 失败:某条信息可能仍然躺在 Context 里,Agent 也曾经正确理解过,可到了真正要做决定的时候,这条信息已经不再影响它的行动。

比如 Agent 早就发现某个命令行参数会报错,调试几轮后却又试了一遍;它知道用户是普通会员,后面处理赔偿时却按用户自称的金卡身份执行;它读过任务里一个边界条件,修别的 Bug 时又把这个条件破坏了。

这些问题很难靠“把 Context Window 做得更长”彻底解决。信息在场,不代表信息还掌握着行为。

Memory 其实在控制 Agent 的注意力

传统 Agent Memory 主要处理三件事:存什么、怎么组织、需要时怎样检索。论文往前多走了一步,它问的是:一条已经保存的记忆,什么时候应该重新进入 Agent 的下一次决策?

作者在原有 Action Agent 旁边放了一个独立的 Memory Agent。Action Agent 继续负责分析、规划和执行,底层模型、工具和解码方式都不用改。Memory Agent 周期性读取最近的轨迹和当前 Memory Bank,做两阶段处理。(论文第 4–6 页,图 1)

第一阶段管理 Memory Bank。Bank 里有三类状态:

  • status:Memory Agent 自己掌握的进度、风险和未解决问题,不直接展示给 Action Agent。
  • knowledge:相对稳定的事实,比如任务约束、环境属性、文件路径、工具验证过的信息。
  • procedural:尝试与结果,比如哪个命令失败了、哪个修复有效、哪个假设已被排除。

第二阶段决定是否介入。Memory Agent 可以生成一段很短的提醒,注入下一次 Action Agent 调用;也可以输出 no_intervention,什么都不说。

我觉得这里最关键的设计是“沉默也是一个动作”。Memory Agent 的任务不只是找相关记忆,它还要判断这条记忆此刻是否足以改变下一步。如果每轮都把整个 Bank 塞回去,Memory 很快就会重新变成一段越来越长的 Context。

为什么只做 Retrieval 还不够?

这篇论文把 Memory 分成了两个问题:

记忆管理:哪些执行状态值得留下?

记忆介入:哪条状态应该在此刻重新影响行动?

第一个问题更接近数据库和检索。第二个问题已经进入控制回路。

论文做了几组对照。(论文第 8–9 页,表 2)

Full-bank context 保留 Memory Bank,但每一步都把完整 Bank 暴露给 Action Agent。它比没有 Memory 好,但整体落后于选择性提醒,说明“能看到全部历史”不等于“知道眼下该用哪一条”。

Injection-only 不维护持久 Bank,只让另一个模型根据最近轨迹给建议。它在部分领域有效,在航空任务上反而从 68% 降到 62%。缺少稳定执行状态后,Advisor 很容易从“提醒过去事实”滑向“临场发表意见”。

Mem0 通过向量与 BM25 检索长期记忆,整体也有提升,但在航空领域没有超过 Baseline。相关记录被检索出来以后,还差一步:它为什么要在这个时刻打断 Agent?应该用什么方式打断?

Always inject 每轮都提醒,微平均分数甚至略高于完整系统,但差距很小,且完整系统的跨领域宏平均更高。这个结果值得认真看,它没有证明“选择沉默”在所有指标上都占优,只说明选择性介入的表现更均衡,也更可能控制额外 Token 和干扰。

效果有多大?

主实验使用 Claude Opus 4.6 作为 Memory Agent,分别辅助 Sonnet 4.5 和 Opus 4.6 两种 Action Agent。(论文第 7 页,表 1)

在 Terminal-Bench 2.0 上,Sonnet 4.5 从 37.6% 提升到 45.9%,增加 8.3 个百分点;Opus 4.6 从 43.5% 提升到 45.9%,增加 2.4 个百分点。

在 τ²-Bench 的任务加权平均上,Sonnet 4.5 从 55.0% 提升到 61.8%,增加 6.8 个百分点;Opus 4.6 从 66.2% 提升到 68.7%,增加 2.5 个百分点。

强模型的收益变小,但没有消失。这至少说明,Memory Agent 不只是给弱模型补智力,它在帮助整个系统维持执行连续性。

定性案例也很具体。Terminal-Bench 里,它会提醒 Agent 某个正则表达式仍漏掉一位数的 IPv4 段,或者某种文件修改方式在当前环境里已经多次失败。τ²-Bench 里,它会在即将调用状态变更工具之前,重新激活会员身份、改签限制或认证规则。(论文第 9–10 页)

这些提醒都有一个特点:它们没有替 Action Agent 做完整规划,只把已经确认、但即将失去影响力的状态重新放回桌面。

Memory Agent 也需要训练“少说话”

作者还尝试把 Memory Agent 从昂贵的前沿模型换成开源模型。未经训练的 Qwen3.5-27B Memory Agent 会让成绩下降,SETA 验证奖励从 0.709 降到 0.693。经过 SFT 后回到 0.720,再通过 GRPO 提升到 0.734。在没有参加训练的 Terminal-Bench 上,训练后的 Memory Agent 把固定 Action Agent 的 pass@1 从 37.6% 提升到 41.1%。(论文第 10 页,表 4)

这个结果很有产品意味。接入一个 Memory 模块不会天然变好。没有校准的 Memory 会过度推断、重复已知信息,或者提出听起来合理但没必要的担忧,最后让 Agent 多走弯路。

Memory 的能力里包含一种克制:知道什么时候不用自己开口。

如果把它做成 Harness 产品,我会怎么拆?

“用户长期记忆”和“任务执行状态”要分开。用户偏好、个人资料适合跨会话保存;失败命令、当前分支、开放子目标只属于本次执行。两者混在一个向量库里,检索相关性再高也会混乱。

Memory 还需要独立的介入指标。命中率或召回率不够,还要看提醒发生后,Agent 是否避免了重复失败、是否更快完成任务、有没有因为多余提醒偏离当前目标。可以把每次介入标成帮助、无效或有害,再看不同任务和不同触发条件下的分布。

第三,触发器本身值得学习。论文主实验从第一步开始,每一步都调用 Memory Agent,这是为了隔离研究变量,但部署成本会很高。真实产品里可以在工具报错、重复调用、Context 压缩、目标切换或高风险状态变更前触发。论文也把学习触发时机列为后续方向。

最后,Memory 提醒最好带着来源。它来自用户原话、工具返回、测试失败,还是 Memory Agent 自己的推断?论文里的 Bank 已经区分稳定事实和程序性经验,产品层可以继续保留这种可追溯性。否则一个过期判断被重新注入时,看起来会和确定事实一样可靠。

这篇论文还没有回答的事

实验覆盖 Terminal-Bench 和 τ²-Bench,任务类型仍有限。主实验的每个配置基本是一次 pass@1 对照,没有给出多次采样下的方差或显著性分析。不同领域的收益差别也很大,航空和零售明显,电信较小,说明 Memory Intervention 高度依赖任务结构。

成本数据同样缺失。每一步额外调用 Opus 4.6 会增加多少延迟、Token 和费用?如果 Action Agent 本来已经很强,2 个百分点左右的收益是否划算,需要放进具体产品里算。

还有一个更根本的问题:Memory Agent 自己也会发生状态衰减。论文通过结构化 Bank 和两阶段调用缓解了这个问题,但没有证明它能在更长时间、更复杂状态下持续可靠。

我最后留下的判断

这篇论文把 Agent Memory 的产品边界往前推了一步。Memory 不只是一层存储,它是一套决定“过去什么时候重新拥有行动权”的策略。

真正好的 Memory 不会让 Agent 时时刻刻想起所有事情。它会在 Agent 快要重犯错误、违反约束或丢掉子目标的时候,说一句足够具体的话,然后继续安静。

来源