Memory-R1: Enhancing Large Language Model Agents to Manage and Utilize Memories via Reinforcement Learning
Paper: arXiv:2508.19828
1. Motivation(研究动机)
现有 LLM agent 的 memory 管线大多仍是静态启发式:写入、更新、删除、检索往往靠规则或固定 prompt,缺少“学会何时存、存什么、删什么、答题时该看哪些记忆”的机制。这样一来,面对跨 session 的长时序对话,memory 很容易冗余、冲突或噪声过大,最后把正确答案淹没。更麻烦的是,很多系统把记忆累积当成正收益,导致 bank 只会越来越大,却不会自动变干净。这个问题的本质不是信息存储,而是长期状态维护。当前记忆系统通常只优化局部相似度或静态规则,例如“命中就放进来”“重复就覆盖”“冲突就删除”,但这些规则并不能保证后续回答一定更好。实际上,同样一条新信息,放进 memory bank 可能有帮助,也可能只是增加噪声;
同样一条旧信息,保留下来可能有价值,也可能只是占上下文。论文要解决的是这种局部规则和全局效用之间的错位。这篇论文要解决的不是“再加一个 memory bank”,而是让模型自己学会管理外部记忆,并把记忆质量和回答质量通过 RL 绑在一起。只要这件事成立,agent 就能在多 session dialogue 里更稳定地做 long-horizon reasoning,也能把 memory 从“存档”升级成“可优化的决策模块”。从系统角度看,这意味着 memory 不再只是被动缓存,而是一个会随着任务反馈持续更新的 state。这个方向值得研究,因为一旦 memory 管理真的能被优化,收益会同时落在准确率、上下文长度和推理成本上。
对长时序对话、个人助理、跨会话问答来说,这不是微调一个 prompt 的小改进,而是决定 agent 能否“越用越聪明”的基础能力。
论文把这种痛点说得更具体:当 agent 面对的是多轮、多天、跨主题的真实对话时,用户事实并不是一次性写完的,而是会被补充、修正、推翻、细化。静态 memory pipeline 通常只能把每次出现的表述都当成新片段收进去,于是同一事实的不同版本会并存,甚至互相冲突。对于最终回答器来说,这类“半对半错的旧事实”往往比完全缺失信息更危险,因为模型会从多个近似候选里随机挑一个最顺手的版本。作者关注的因此不是传统 long-context QA 里“上下文不够长”的问题,而是“即便给了外部 memory,也未必形成可用状态”的问题。换句话说,Memory-R1 的前提并不是模型没有检索能力,而是检索出来的候选集合本身质量不稳定。
只要 memory bank 内部缺乏演化机制,随着 session 数增加,系统就会从“记得更多”滑向“记得更乱”。这也是为什么论文没有把重点放在更强 embedding、更复杂 reranker 或更长 prompt 上。那些方法主要改善的是读取阶段,但 Memory-R1 认为真正的瓶颈早在写入阶段就已经埋下了。若写入时没有学会区分 stable preference、短期上下文、过时事实和冲突表述,下游任何检索增强都只能在噪声池里挑“相对没那么差”的片段。从长期交互系统的角度看,这个问题还有一个被低估的难点:memory error 会跨回合积累并放大。一次错误 UPDATE 可能污染后续多个问题;一次错误 DELETE 可能让系统永久丢失关键信息;
一次错误 ADD 则可能在未来不断被检索到,形成系统性偏差。因此 memory 管理不是普通的信息抽取,而更像是带长期后果的 sequential decision making。
作者实际上是在把“能否维持一个干净、紧凑、可检索、可回答的 memory state”定义成 agent 的核心能力。这个定义比“把历史都存下来”严格得多,因为它要求系统对记忆内容的生命周期负责。什么该保留到未来、什么只在当前 turn 有效、什么已经过时、什么需要和旧条目融合,这些都不再是 prompt engineering 的细节,而是模型能力边界的一部分。如果这个方向走通,直接受益的不只是 QA benchmark。对 personal assistant 来说,它意味着用户 profile 不再靠硬编码 schema 维护;对 autonomous agent 来说,它意味着任务日志和环境状态可以被策略性压缩;
对多轮决策系统来说,它意味着“长期状态”第一次真正进入 RL 优化目标。论文的动机因此并不是做一个更好的 memory demo,而是把 agent memory 从启发式子系统提升为可学习的核心模块。还可以从 benchmark 设计反推这篇论文的动机。LoCoMo、MSC、LongMemEval 这类任务并不是简单问一句就能从单条证据里抽答案,而是经常要求系统跨多个 turn 汇总人物关系、时间顺序、偏好变化和事件细节。也就是说,memory 系统失败时,错误往往不是“没检索到某个句子”,而是“系统过去没有把多次出现的零散线索整合成稳定记忆”。这正是静态检索管线最难补救的地方。
论文因此把问题重心放在 state quality,而不是 retrieval recall 的单点指标上。一个看似 recall 很高的系统,仍可能因为 memory bank 过于臃肿而在真实回答时频繁混淆;反过来,一个更小但更干净的 bank,反而更适合长期 agent 使用。作者想证明的是,memory 系统的优劣不能只看“存了多少”,而要看“这些状态在未来是否持续可用”。
2. Idea(核心思想)
核心 insight 是把 memory 系统拆成两个可学习 agent:Memory Manager 负责对记忆做结构化操作,Answer Agent 负责从检索到的记忆里做选择与回答。两者都不再依赖固定启发式,而是用 outcome-driven RL 直接对最终答案质量优化。这里真正新的是,作者不把 memory 看成静态知识库,而是看成会被 policy 持续塑形的 state。和 Mem0 / MemoryOS 这类主要仍靠手工策略或系统设计的 memory pipeline 不同,Memory-R1 学的是“操作策略”本身:先决定 memory state 怎么变,再决定回答时看哪些 memory。
这样做的差别不只是精度,更是把 memory 从工程规则转成了可训练 policy。传统方法通常假设检索器和回答器各自尽责就够了,但这篇论文认为问题恰恰出在“上游写坏了、下游还在用”。它的核心创新不是多一个模块,而是把写记忆和用记忆这两个动作都纳入统一奖励。这样一来,ADD、UPDATE、DELETE、NOOP 不再是预设的流程分支,而是与最终问答结果绑定的选择。对比只做检索增强的系统,Memory-R1 更像是在学习怎样维护一个长期可用的外部状态机。从方法定位看,这种设计更接近“记忆策略学习”而不是“记忆检索增强”。它回答的不是“有哪些相关片段”,而是“哪些片段应该被保留、修正、丢弃,以及最后该如何被消费”。这也是它和纯 RAG 最大的分野。
更细一点说,论文的核心 insight 是把 memory 看成一个会被策略持续编辑的外部状态,而不是一个一旦写入就近似只读的缓存。传统系统默认“检索质量决定回答质量”,Memory-R1 则把因果链前移了一步:真正决定回答上限的是 memory state 在多个回合后的形态,而这个形态取决于系统过去做过的编辑决策。于是作者不再问“如何从现有 memory 中找答案”,而是先问“如何把 memory 维护成未来还找得到对答案的样子”。这使得 Memory Manager 和 Answer Agent 的分工非常清晰。前者负责 state evolution,目标是让 memory bank 长期保持低冲突、低冗余、可继续增长;
后者负责 state consumption,目标是在有限 prompt budget 里只消费对当前问题真正有用的那部分状态。两者看似分离,实际上共享同一个最终目标:提高 downstream answer correctness。论文的新意就在于,作者没有用一个统一大模型硬吃全部决策,而是把“写状态”和“读状态”拆成两个更容易分配 credit 的 policy 面。与 Mem0、MemoryOS 这类系统相比,Memory-R1 的根本差异并不是模块命名或 pipeline 排布,而是 supervision 来源发生了变化。前者通常依赖预定义操作规则、显式阈值或人工设计的存储逻辑;后者则允许模型通过回答成败来反向修正自己的记忆编辑习惯。
也就是说,Memory-R1 学到的不是“什么文本像记忆”,而是“什么 memory 操作会让未来问题更容易答对”。
这个区别决定了它和纯 SFT memory 方法也不同。SFT 可以教模型模仿某种理想编辑格式,却很难覆盖长期 credit assignment,因为一次 memory 编辑的好坏往往要到若干 turns 之后才显现。RL 在这里的价值不是抽象意义上的“更强训练”,而是提供了一个把 delayed utility 接回上游编辑动作的机制。因此,论文的 1 到 3 句式总结可以写成:第一,memory 不是静态知识库,而是需要长期维护的外部状态;第二,维护这个状态的动作空间应该显式建模为 ADD / UPDATE / DELETE / NOOP;第三,这些动作以及后续 memory consumption 都应该直接为最终 answer quality 负责。
相对于现有方法,Memory-R1 的 fundamentally new point 正是把 memory correctness 的定义从“局部格式正确/局部相似度高”改成了“能否改善未来回答结果”。这一想法还有一个很强的反直觉点:Memory-R1 并不追求“让模型记住更多”,而是追求“让模型学会不记、少记、改写后再记”。很多 memory 工作默认更大的 bank 更安全,因为信息丢了就找不回来;而这篇论文则认为,长期 agent 的核心不在保守存储,而在主动整理。只有承认“忘掉一部分”和“覆盖旧版本”本身也是能力,memory system 才可能真正从日志仓库演化成 reasoning substrate。
所以从 conceptual contribution 上看,Memory-R1 提出的不是新的 memory 数据结构,而是新的优化视角:memory 是可被策略塑形的中间状态,质量标准由 downstream task success 定义。这一视角把 RL 的作用从“训练更会说话的回答器”扩展到“训练更会维护长期状态的 agent”,这是它相对现有 agent memory 文献最本质的区别。
3. Method(方法)
整体上,Memory-R1 由两层 policy 组成:上层是 Memory Manager,负责把新抽取的信息写入、更新或删除;下层是 Answer Agent,负责从 memory bank 检索并蒸馏出回答所需的最小上下文。训练时两者分阶段进行,先固定 Answer Agent 学 Memory Manager,再固定 Memory Manager 学 Answer Agent,这样可以避免 reward attribution 混在一起。如果从系统设计角度重述一遍,Memory-R1 实际上是在回答三个连续问题。第一,给定一个新对话 turn,哪些内容值得进入长期 memory;
第二,若值得进入,它应该作为新条目加入,还是应该合并进已有条目,抑或应该触发删除旧事实;第三,当用户真正发问时,当前 memory bank 中哪一小部分证据值得被送入最终回答 prompt。论文的方法部分基本都围绕这三个问题展开。作者之所以坚持两层 policy,而不是把“抽取-写入-检索-回答”揉成一个端到端模型,有两个明显原因。其一,memory editing 和 answer generation 的 action granularity 不同,前者是离散结构化操作,后者是条件生成;其二,两个阶段面对的 credit assignment 长度不同,若直接联合训练,很难区分错误答案到底是写坏了 memory,还是读 memory 时没选对证据。
分阶段训练虽然牺牲了一部分端到端最优性,但换来了更清晰的学习信号。这种设计还隐含一个工程判断:长期 memory 系统最怕的不是偶尔答错一题,而是错误 state 被稳定写入后持续复用。因此论文优先把上游 state maintenance 学稳,再去优化下游 consumption。也正因为这个优先级,Method 里很多细节都能看作“如何减少错误记忆被长期保存”的保护机制,而不只是单纯追求一次回答的局部最优。
3.0 Problem Formulation
论文可被看作一个带外部状态的 POMDP。环境在每个 turn 提供新的观测,即当前对话和用户问题;agent 除了输出答案,还要维护一个随时间演化的 memory bank。这个 bank 不是被动日志,而是 policy 可控的 latent state approximation,用来跨 session 携带用户事实、偏好和历史事件。如果记 为第 个交互时刻的隐含真实用户状态, 为 agent 持有的显式 memory bank,则系统在每一步都要做两类决策:先根据新观测把 更新成 ,再基于 回答当前问题。
Memory-R1 的关键在于,它不直接监督 是否“像人工整理的记忆”,而是通过回答奖励间接要求 成为对 future QA 有用的状态摘要。这一定义很重要,因为它解释了为什么论文不用传统 memory benchmark 常见的 pairwise matching 或 slot filling 作为主目标。那些目标最多约束某条记忆在局部是否正确,却无法约束整个 bank 是否可维护、是否紧凑、是否存在隐藏冲突。Memory-R1 选择的学习目标更接近“bank-level utility”。
从这一 formulation 出发,整篇方法的逻辑就很顺:Memory Manager 负责状态转移 ,Answer Agent 负责从 中取出与当前问题相关且足够精炼的证据,最终 reward 再同时塑造这两个策略。这样,memory 写入、记忆演化、证据消费第一次被放到同一条优化链路里。
这个表述还有助于理解为什么论文坚持把 memory system 建模成“显式状态 + 显式操作”,而不是让一个大模型在隐式上下文里自己消化历史。显式状态的好处是可编辑、可删除、可检索、可复用;显式操作的好处是可以把策略错误定位到具体动作类型。对于长期交互任务,这种可解释的状态演化路径比单纯堆更长 context 更容易扩展,也更容易分析失败来源。
3.1 Overall Framework

Figure 2 解读:整体流程分两段。上半段是 memory construction,LLM 先从对话 turn 中抽取可记忆信息,再检索当前 memory bank,交给 Memory Manager 决定 ADD / UPDATE / DELETE / NOOP;下半段是 answer generation,问题先检索 top-k memory,再经过 Answer Agent 的 memory distillation 过滤噪声,最后生成答案。这个设计的关键不是“多一个模块”,而是把写记忆和用记忆拆成两个可独立学习的决策面。
更重要的是,图中这两段不是串联的工程流水线,而是两个不同的优化对象。memory construction 关注 bank 的长期可维护性,answer generation 关注当前问题的有效上下文。前者决定系统未来还能不能继续可靠工作,后者决定当前答案能不能答对。
如果只保留检索而没有 manager,memory bank 会不断积累冲突;如果只有 manager 而没有 answer distillation,检索出来的噪声仍然会污染回答。论文把这两个风险拆开处理,实际上是在同时优化“存储质量”和“使用质量”。

Figure 1 解读:示例说明了为什么需要 RL。纯规则 memory manager 很容易把“信息表面变化”误判成冲突,导致不必要的 DELETE+ADD,最后把同一事实切碎。RL 后的 manager 更倾向于保留语义一致但表述更完整的记忆,减少碎片化。
这张图背后的关键不是“规则不够聪明”,而是规则没有任务反馈。一个 memory action 只有在后续问答里才知道它是好还是坏,所以作者才把监督信号放到最终答案上,而不是放在局部编辑相似度上。换句话说,它是在用 downstream utility 定义 memory correctness。
3.2 Memory Manager:学习写入、更新、删除
Manager policy 形式
Memory Manager 的输入是新抽取的信息 和当前 memory bank ,输出是操作 和新内容 :
四类动作的语义边界
这个策略的核心不是“生成一段更像记忆的话”,而是选择一个离散动作来改变 memory 的状态。ADD 负责把新事实写进 bank;UPDATE 负责在保留旧 id 的前提下吸收新信息;DELETE 负责移除明显冲突或过时条目;NOOP 则允许模型在信息不足或无需变更时保持当前状态。四类动作共同组成一个受约束的结构化 action space。
Prompt schema 与动作格式
Figure 9 和 Figure 10 实际上把这个 action space 变成了可执行 prompt:它们明确规定了每个动作的输出格式、字段要求和边界条件。比如 ADD 要生成新 id,UPDATE 要保留 old_memory,DELETE 不能再生成新内容,NOOP 则应当输出空变更或保持原样。这种约束很关键,因为它让 policy 学习不再依赖自由文本生成的偶然性。
Outcome-driven reward
从建模角度看,Memory Manager 的 reward 不来自单步编辑是否“看起来正确”,而来自后续答案是否真的更好。换句话说,一条记忆要不要被加入,判断标准不是它和当前 turn 的字符串相似度,而是它会不会帮助 future question answering。这个定义把 memory management 从局部启发式任务提升成了长期信用分配问题。作者在这里等于拒绝了两种常见 shortcut。第一种是把 memory update 做成信息抽取附带动作,默认抽取出来的都该保存;第二种是用启发式冲突检测去触发更新删除。Memory-R1 认为这两者都缺少“面向未来问题的效用判断”。一条内容即便抽取得很准,也可能只对当前 turn 有短期价值;
UPDATE:补充与冲突的折中
一条内容即便和旧记忆不完全一致,也可能只是补充而不是冲突。只有 downstream reward 能把这些情况区分开。因此 UPDATE 在论文里尤为关键。它不是简单地覆写旧内容,而是让模型学会在“保留旧事实核心”和“吸收新证据细节”之间折中。对于用户偏好、身份信息、计划变更这类随时间细化的记忆,若没有 UPDATE,系统只能靠 ADD 堆积多个近似版本;而一旦多个版本同时被检索,回答器就必须自己解决冲突,难度和噪声都会急剧上升。DELETE 的意义也不仅是节省空间。论文的设定里,错误或过时记忆会持续污染未来 top-k 检索结果,因此删除是一种主动去偏操作。
DELETE:控制 memory bank 膨胀
相比之下,许多 memory 系统宁可不删也怕误删,但这会让 bank 单调膨胀,最终把“检索到相关记忆”变成“检索到一堆看起来都差不多相关的片段”。Memory-R1 把删除显式纳入 action space,实际上是在承认 memory cleanliness 本身就是需要学习的目标。
NOOP:长期记忆的稀疏性
NOOP 则承担了另一个经常被忽略的能力边界:不是每个新观测都值得写入长期记忆。聊天中的礼貌语、一次性上下文、模糊猜测、已经被完整记录过的重复事实,都应该被过滤掉。让模型有合法的“不操作”出口,可以显著减少过拟合式记忆增长,也更符合长期 memory 的稀疏性需求。从 failure mode 角度看,四类动作其实各自对应一种典型系统错误。缺少 ADD 时,系统会忘掉真正新的稳定事实;缺少 UPDATE 时,系统会把事实修订错误地表现成重复片段;缺少 DELETE 时,系统会把过时或错误内容永久保留下来;缺少 NOOP 时,系统则会把所有短期噪声都误写进长期 memory。
为什么更像 database administrator
Memory-R1 的 action design 之所以合理,正因为它恰好覆盖了长期 memory 最常见的四种演化需求。这也让 Memory Manager 更像 database administrator 而不是普通 summarizer。它不是把当前 turn 改写成一段摘要就结束,而是要判断这段信息会如何改变整个 memory state 的未来检索分布。作者通过 RL 训练的,本质上是这种“面向未来检索后果”的编辑意识。如果没有 NOOP,模型会被迫对每个输入都做编辑,结果往往是过度修改;如果没有 DELETE,memory bank 会持续膨胀;如果没有 UPDATE,重复事实只能靠追加而无法合并。
四个动作缺一不可,少任意一个都会把长期状态维护变成单向累积,最终影响检索和回答。

Figure 9 解读
prompt 明确告诉模型四类操作的语义和格式,尤其强调 ADD 需要新 id、UPDATE 要保留 old_memory、DELETE 不生成新 id、NOOP 表示不变。这个 prompt 本质上把 RL policy 的 action space 约束成结构化输出,减少了纯自然语言生成带来的不稳定。
这一步很像把“自然语言编辑”改造成“受约束策略输出”。约束越明确,模型越不容易把同一条事实反复改写成不同版本,也越不容易在遇到模糊输入时胡乱删除。对于长时序 memory 来说,格式约束其实就是行为边界。
Figure 10 解读
删除与无操作的判定规则补足了前半部分,避免模型把“同义改写”误删,也避免把已存在事实反复重写。对于 memory 系统来说,这一步很关键,因为错误的删改比不改更容易伤害长时序一致性。
如果把 Memory Manager 看成一个状态机,ADD 是扩张状态空间,UPDATE 是状态替换,DELETE 是状态压缩,NOOP 是保守退出。四类动作共同决定 memory bank 的生命周期管理,所以作者必须让模型学会区分“信息新增”“信息修正”“信息过期”和“无需动作”。
3.3 Answer Agent:检索后再蒸馏
Answer Agent 的流程是先对问题做检索: 然后在 memory distillation policy 下筛掉无关条目,再生成答案。论文的直觉是:多 session memory 往往“相关但不等于有用”,直接把 top-k 全塞给 LLM 会引入噪声;蒸馏层相当于在回答前做一次可学习的过滤器。这里的关键不是 rerank,而是压缩。rerank 只是重排候选,蒸馏则是在有限上下文预算内挑出真正会影响答案的 evidence。对长对话来说,很多候选记忆都“看起来有关”,但真正需要进入 prompt 的只有极少数;Answer Agent 就是在学这个选择边界。
论文把这一层称为 memory distillation,其实是在回答另一个现实问题:即便上游 bank 已经更干净,top-k 检索出来的内容仍可能太多、太碎、太像。尤其在用户 profile 场景里,多个记忆条目可能分别包含地点、时间、偏好、历史事件等局部线索,如果把它们不加选择地拼进 prompt,模型会被冗余上下文拖慢,甚至被弱相关信息带偏。distillation policy 的任务,就是把“相关”进一步压缩成“当前回答真正必要”。这和标准 retrieval-augmented generation 有本质区别。RAG 默认检索器排序足够好,生成模型会自己忽略噪声;Memory-R1 不做这个乐观假设,而是显式训练一个会筛选 memory 的回答策略。
也就是说,系统并不把“忽略噪声”留给最终 decoder 的隐式能力,而是把它前置成可优化的 decision step。从 credit assignment 角度看,Answer Agent 还起到把 reward 对齐到“哪些 memory 应该进入最终上下文”的作用。若没有这层策略,reward 只能粗粒度地落到整个 retrieval set;有了 distillation,模型可以逐步学会哪些证据模式会稳定支持正确答案,哪些只是表面相关却会稀释注意力。对于长时序 memory 来说,这相当于把“读什么”也纳入了 policy learning。
另一层可以补充的理解是,distillation 不只是压缩 token 数,更是在做 evidence abstraction。某些问题需要的是单条精准事实,某些问题需要的是多个回合里逐步形成的偏好轨迹。若 Answer Agent 只会截取字符串最相似的 top-k,它很容易遗漏这些跨条目组合关系;而一旦把“哪些记忆值得被联合消费”也纳入学习,回答器就有机会从多个局部记忆里拼出更稳定的 reasoning basis。

Figure 6 解读:Answer Agent 的收益会随着 Memory Manager 变强而放大,说明整个系统是“记忆质量 × 读取能力”的乘积,而不是单点模块改进。换句话说,Answer Agent 不是独立增益,它更像是把上游高质量 memory 变成最终答案的放大器。
这也解释了为什么单独堆检索器收益有限:如果上游 memory 本身就脏,后面的过滤器只能做局部修补。只有把 memory bank 先管好,再做回答蒸馏,系统才会在准确率和延迟上同时受益。
3.4 训练目标与两阶段 RL
两阶段 RL:先 Manager 后 Answer Agent
论文把训练拆成两阶段:先训练 Memory Manager,再训练 Answer Agent。Manager 阶段固定 Answer Agent,把 answer correctness 当作 reward;Answer 阶段固定 Manager,避免 reward attribution 混乱。这样做的目的很明确:先让系统学会怎样维护状态,再让系统学会怎样消费状态。 论文未详细给出完整显式 PPO / GRPO loss 展开式,但明确了训练信号:Memory Manager 和 Answer Agent 都是按 downstream answer quality 做 outcome-driven RL。奖励设计上,作者最终采用 EM reward,而不是直接用 LLM-as-a-Judge 作为 reward。这个选择比较保守,但更适合 memory 任务,因为 judge reward 容易把措辞、长度和风格偏好混进来。 从优化视角看,目标可以理解成对整条 memory-action trajectory 做期望回报最大化:
Reward attribution:写记忆与用记忆
这里的轨迹 不只是最终答案,还包括 memory 操作和检索蒸馏过程。因此,reward 实际上是在反向塑造“如何写记忆”和“如何用记忆”两件事。 作者最终偏向 EM reward,而不是直接采用 LLM-as-a-Judge,也能看出这篇论文对训练目标的取舍相当克制。judge reward 往往更平滑,但在 memory 任务里容易奖励语言风格、答案长度或表述完整性,而不是记忆是否真的支持了正确事实。EM 虽然更稀疏,却能把优化重点放在“答没答对”这一最直接目标上,避免策略学成会讨好 judge 的回答器。 两阶段 RL 的另一个好处是把训练难点拆散。第一阶段中,Answer Agent 近似充当稳定的 evaluator,使 Memory Manager 的动作后果可以通过固定回答器显现出来;第二阶段中,已经相对可靠的 memory bank 又为 Answer Agent 提供了更干净的训练环境。这个顺序有点像先把数据库整理好,再训练查询优化器,而不是同时让两边都在漂移。 如果端到端联合优化,两类 policy 会互相补偿错误。例如上游写入很差时,下游可能学会某些偶然的绕过技巧;下游能力变化时,又会反过来改变上游动作的好坏判定。分阶段训练不能完全消除偏差,但至少显著降低了这种 moving target 问题。对论文关注的长期状态维护任务来说,这是比纯粹追求理论最优更务实的选择。
三个 outcome-driven 决策面
从方法完整性看,Memory-R1 的真正贡献不是某个单独公式,而是把 memory 相关的三个核心决策面明确拉出来并都赋予 outcome-driven 学习信号:存不存、怎么存、怎么用。许多已有方法只覆盖其中一个面,例如只做 retrieval augmentation,或者只做 memory schema engineering;Memory-R1 则尝试让整个 closed loop 一起为最终 answer correctness 服务。 如果把整套方法浓缩成一句工程判断,就是:长期 agent memory 的上限,不由“有没有 memory bank”决定,而由“memory bank 是否会被策略性维护和策略性消费”决定。Memory-R1 的方法章节之所以值得展开,正因为它不是简单在现有检索框架外包一层 RL,而是在重写 memory 系统的优化对象本身。

PPO vs GRPO:收敛速度而非上限
Figure 7 解读
PPO 和 GRPO 在 Answer Agent 上都能收敛,GRPO 前期更快。说明 grouped return normalization 能更快给出稳定学习信号,但最终两者都会到相近 reward 水平。
这张图的意义不只是“GRPO 更快”,而是说明在这种离散 memory policy 任务里,优化算法的差异更多体现在收敛速度而不是最终上限。真正拉开上限的,还是 memory manager 和 distillation 的质量。如果把两阶段训练拆开理解,第一阶段解决的是“memory bank 是否值得信任”,第二阶段解决的是“给定一个相对干净的 bank,怎样在有限上下文里答对题”。这也是为什么论文没有尝试一开始就端到端联合训练。从 RL 稳定性角度看,这个结论也很合理。Memory 管理问题的 reward 本来就比普通单轮 instruction tuning 更稀疏,因为一次编辑动作是否有价值,要靠后续问答结果间接体现。
在这种设置下,优化器若能更快把一组 trajectory 的相对好坏归一化,就更容易早期形成可用策略。但论文结果也提醒读者,不应把算法名词本身当成性能来源,真正决定能否赢过 baseline 的仍是 memory formulation 是否正确。另一点值得强调的是,PPO/GRPO 在这里并不是为了学习更花哨的语言风格,而是在学习何时采取结构化 memory action、何时保守退出。也就是说,policy gradient 优化的对象并不是“让回答听起来更像人”,而是“让状态编辑和证据选择更有利于后续正确回答”。这与很多 RLHF 场景的优化目标明显不同。
经验结论:外部可验证 reward + 结构化动作空间
论文的方法部分因此隐含一个经验结论:agent memory 任务的 RL 训练,最好把 reward 绑定到外部可验证结果,并把动作空间约束得足够结构化。否则模型很容易把训练自由度浪费在表面语言变化上,而不是学会真正有长期后果的状态操作。Memory-R1 的 prompt schema、离散动作、两阶段训练,本质上都在为这个目标服务。
3.5 为什么这种方法比“检索增强 + 更强基础模型”更对题
Memory-R1 方法部分最值得注意的一点,是作者没有把性能提升归因于更大的 backbone 或更复杂的 retrieval stack,而是明确把收益来源定位在 memory policy。也就是说,论文的论点不是“给 LLaMA/Qwen 加个 memory 组件就能更强”,而是“只有当 memory 组件本身会学习长期维护策略时,backbone 的问答能力才真正能被释放出来”。这解释了为什么同样的基础模型,在 Base、PPO、GRPO 之间会出现明显差距。若问题主要来自 backbone 推理能力不够,那么上游 memory management 的改造不该带来如此稳定的收益;
而实验恰恰说明,只要 memory bank 更干净、检索后蒸馏更克制,原本已经具备相当指令能力的模型就能把这部分外部状态更有效地转化为正确答案。从方法论上说,Memory-R1 其实反对一种很常见的工程直觉:当 memory 系统效果不佳时,先堆更强 embedding、更多 top-k、更多历史上下文,或换更大的回答模型。论文的回应是,这些补丁都没有直面“状态被如何维护”这个核心问题。一个被错误写入和过度累积污染的 memory bank,不会因为下游模型更大就自然变干净。因此,Memory-R1 可以被看作对 agent architecture 的一次重新分责。检索器负责把候选记忆找出来,但不再被假设为最终裁判;
回答器负责生成最终语言输出,但不再被要求独自吞掉所有噪声;真正负责让系统长期可持续工作的,是显式学习到的 memory policy。这个分责方式让每个模块的优化目标都更清楚,也更贴合长期交互的实际需求。
如果把它和纯 long-context 路线对照,差异就更明显。long-context 方法默认历史都应保留,只要窗口足够大、注意力足够强,模型终会找到答案;Memory-R1 则默认历史应该被主动整理,因为长期交互里最稀缺的资源不是 token 容量本身,而是高质量、低冲突、易消费的状态表示。这个判断构成了论文方法设计的根基。换句话说,作者提出的不是“让模型看见更多”,而是“让模型只留下值得未来再看的东西”。这使得 Memory-R1 的方法天然兼顾了三件纯检索系统难以同时满足的事:长期一致性、上下文紧凑性、以及可随交互持续更新的状态质量。对 agent memory 任务来说,这比单独优化某个子模块更接近问题本身。
最后,方法部分还能提炼出一个更抽象的结论:Memory-R1 不是把 memory 当成回答器的外挂,而是把它提升为 agent policy 的一部分。只要承认 memory state 会决定未来多轮行为质量,那么 state maintenance 就不再是后处理模块,而是主任务本身。这也是为什么论文虽然看上去在做 memory engineering,实质上讨论的是长期决策优化。Memory Manager 学的是状态演化规则,Answer Agent 学的是状态消费规则,而 reward 则提供了跨时间的统一裁判。三者合起来,才构成作者所谓 outcome-driven memory system。
因此,从阅读笔记角度看,Method 的重点不应只落在四类动作名字或 PPO/GRPO 细节上,更应落在作者如何重新定义“什么叫正确的 memory”。在 Memory-R1 里,正确记忆不是格式工整、不是检索相似度高,而是能在未来持续支持正确回答的状态表征。
def train_memory_manager_step(dialog_turn, memory_bank, answer_agent, reward_fn):
facts = llm_extract(dialog_turn)
retrieved = topk_retrieve(facts, memory_bank)
op, new_item = memory_manager_policy(facts, retrieved)
memory_bank = apply_memory_op(memory_bank, op, new_item)
question, gold_answer = dialog_turn.question, dialog_turn.gold_answer
ctx = topk_retrieve(question, memory_bank)
prompt = concat_prompt(question, ctx)
pred_answer = answer_agent(prompt)
reward = reward_fn(pred_answer, gold_answer)
return memory_bank, rewarddef train_answer_agent_step(question, memory_bank, gold_answer, reward_fn):
retrieved = topk_retrieve(question, memory_bank)
prompt = concat_prompt(question, retrieved)
selected_memories, pred_answer = answer_agent_with_distillation(prompt)
reward = reward_fn(pred_answer, gold_answer)
return reward, selected_memoriesdef apply_memory_op(memory_bank, op, new_item):
if op == "ADD":
memory_bank.append(new_item)
elif op == "UPDATE":
memory_bank = merge_memory(memory_bank, new_item)
elif op == "DELETE":
memory_bank = delete_conflicting(memory_bank, new_item)
return memory_bankCode reference:
代码搜索未找到开源实现,以上伪代码根据论文算法与附录 prompt 整理。
| 论文概念 | 论文算法 / 附录位置 | 说明 |
|---|---|---|
| Memory Manager | Method §3.2, Figure 9-10, Algorithm 1 | 结构化 memory 操作策略 |
| Answer Agent | Method §3.3, Algorithm 2 | 检索后蒸馏并生成答案 |
| 两阶段训练 | Appendix D / Algorithm 1-2 | 先 manager 后 answer,彼此固定 |
| Reward 设计 | Table 2 | EM reward 最终优于直接用 judge reward |
4. Experimental Setup(实验设置)
Datasets
- LoCoMo:约 600 turns、26k tokens;训练/验证/测试为 152/81/1307 QA pairs,论文只在 LoCoMo 上训练。它是唯一的训练来源,因此也最能代表作者真正优化的 memory 分布。
- MSC:零样本评测,用来检验方法对另一类多轮记忆问答任务的迁移能力。
- LongMemEval:零样本评测;正文未给出总样本量,但它明显更强调长上下文和跨 session 记忆。
- 从设置上看,训练和测试是分开的,说明论文并不是在同一分布上做过拟合式记忆记忆化,而是尝试验证跨数据集泛化。
Baselines
- LoCoMo / RAG:作为最基础的检索增强路径,代表“只检索不学习 memory policy”的下界。
- A-Mem:偏 agentic memory 管线的代表方法。
- Mem0:偏工程化 memory 组件的代表方法。
- MemoryOS:偏显式 memory operating system 的方案,适合和 learned memory management 对比。
- Memory-SFT:先做 supervised fine-tuning 的强基线,用来区分“有监督适配”和“RL policy learning”的差别。
- Memory-R1-PPO:同一框架下的 PPO 版本。
- Memory-R1-GRPO:同一框架下的 GRPO 版本。
- 这些 baseline 覆盖了检索式、规则式、SFT 式和 RL 式 memory 方案,便于说明增益到底来自“记忆结构”还是“训练方式”。
Metrics
- F1:token-level overlap,衡量答案片段和 gold answer 的重合程度。
- BLEU-1:unigram overlap,主要看模型是否命中了关键实体、属性和短语。
- LLM-as-a-Judge (J):语义正确性、相关性、完整性、上下文适配的综合分数,用于补足纯字符串指标无法表达的语义层面。
- 论文同时强调 EM reward 的训练优势,说明训练目标和评估指标并不完全一致:训练用更稳定的 EM,评估则看更全面的 F1 / BLEU-1 / J。
Training config
- Backbone:LLaMA-3.1-8B-Instruct,Qwen-2.5-3B/7B/14B-Instruct。结果表明方法不是绑定某个特定 backbone,而是可以在不同规模的 instruction model 上工作。
- GPU:4× NVIDIA H100 80GB;Qwen-2.5-14B 使用 8× H100。说明训练开销不低,尤其是双阶段 RL 会放大资源需求。
- Batch:total batch size 128,micro-batch size 2 / GPU。这个配置在 RL 场景里主要是为了稳定梯度和显存占用。
- Length:prompt 4096,response 2048。较长的 prompt 长度符合多轮 memory 场景,也意味着检索和蒸馏的选择压力更大。
- LR:actor
1e-6,critic1e-5。actor 更小是典型的保守策略,避免离散 memory policy 过快漂移。 - Schedule:constant warmup。
- RL:PPO / GRPO,训练框架 VERL。作者在结果里比较了两种 RL 算法,说明训练框架本身是方法的一部分,而不是实现细节。
- 这些配置共同说明:Memory-R1 的训练不是轻量级微调,而是需要较强算力支撑的在线式策略学习。
5. Experimental Results(实验结果)
Main results
LoCoMo overall
| Backbone | Variant | F1 | BLEU-1 | J |
|---|---|---|---|---|
| LLaMA-3.1-8B-Instruct | Base | 26.73 | 20.54 | 47.82 |
| LLaMA-3.1-8B-Instruct | PPO | 41.05 | 32.91 | 57.54 |
| LLaMA-3.1-8B-Instruct | GRPO | 45.02 | 37.51 | 62.74 |
| Qwen-2.5-7B-Instruct | Base | 29.36 | 23.14 | 58.38 |
| Qwen-2.5-7B-Instruct | PPO | 41.72 | 33.70 | 59.53 |
| Qwen-2.5-7B-Instruct | GRPO | 43.14 | 36.44 | 61.51 |
LongMemEval overall
| Backbone | Variant | F1 | BLEU-1 | J |
|---|---|---|---|---|
| LLaMA-3.1-8B-Instruct | Base | 31.29 | 25.03 | 44.20 |
| LLaMA-3.1-8B-Instruct | PPO | 43.57 | 39.53 | 55.20 |
| LLaMA-3.1-8B-Instruct | GRPO | 45.17 | 39.28 | 55.40 |
| Qwen-2.5-7B-Instruct | Base | 35.47 | 28.29 | 53.20 |
| Qwen-2.5-7B-Instruct | PPO | 40.33 | 35.52 | 47.40 |
| Qwen-2.5-7B-Instruct | GRPO | 46.67 | 41.13 | 57.80 |
这些结果说明两个事实:第一,RL 不是只提升 judge 分数,而是能同时提升字符串重合指标和语义判断指标;第二,GRPO 在多数设置下优于 PPO,尤其在 LoCoMo 上的提升更明显,说明 grouped optimization 对 memory 这种离散动作任务更有帮助。
Ablations and findings
- 去掉 RL fine-tuned Memory Manager 后,LLaMA-3.1-8B 上 PPO 从 41.0 / 32.9 / 57.5 掉到 34.5 / 28.1 / 49.0;GRPO 掉到 37.5 / 30.6 / 52.9。
- 去掉 memory distillation 后,PPO 从 41.0 / 32.9 / 57.5 降到 39.3 / 30.9 / 57.4;GRPO 从 45.0 / 37.5 / 62.7 降到 41.0 / 34.4 / 60.1。
- 用 judge reward 训练会把 J 推高到 63.58,但 F1 / BLEU-1 变差;EM reward 更均衡,最终被采用。
- 记忆检索 + reranker 只带来有限收益,但明显增加延迟;Memory-R1 在更高准确率下保持更低 p50/p95 latency。
- 这些消融共同说明:
Memory Manager决定上游 memory state 的纯净度,Answer Agent决定下游上下文压缩效率,EM reward 则避免把模型训练成只会迎合 judge 的回答器。 - 换句话说,性能提升不是来自某个单独技巧,而是来自“写入质量 + 读取质量 + 奖励对齐”三者同时成立。

Figure 5 解读:四个消融都掉分,说明 Memory Manager、Answer Agent、Memory Distillation 都不是可有可无的装饰,而是共同决定最终性能的关键链路。尤其是去掉 memory manager 后的下滑,直接说明上游记忆维护是整条链路的底座。

Figure 8 解读:Memory-R1 在 accuracy-latency 平面上优于 Base 和 Base + Reranker,说明它不是通过“更慢的检索”换来的效果,而是通过更高质量的记忆选择与回答压缩获得收益。这个结果很关键,因为它证明 RL memory management 不只提准,也能减少系统冗余。
Limitations
- 评测主要集中在 dialogue-centric 数据集,说明方法的最强证据仍然来自多轮对话记忆场景,而不是更广义的 agent memory 任务。
- 训练 Memory Manager 和 Answer Agent 仍然是分阶段的,end-to-end multi-agent RL 还没做,因此模块间仍存在一定的训练隔离。
- 作者明确提到扩展到 multimodal data 可能会更难,因为多模态 memory 的写入和语义对齐比纯文本更复杂。
- 论文没有详细展开所有失败案例,因此某些边界场景下 memory 误删和过度合并的风险仍然存在。
Conclusion
Memory-R1 证明了 memory management 本身可以被 RL 学出来,而且这种学习会同时改善 memory 质量、回答质量和推理效率;它不是“再加检索”,而是把外部记忆变成可优化的 agent 行为。它真正传递的信号是:只要 memory bank 的维护策略学对了,后续问答可以在更短上下文里得到更好的答案。
这篇论文的贡献也可以概括成一句话:把“记忆”从被动存储组件变成了可训练的长期状态管理器。对于希望构建长期 agent 的系统来说,这比单纯提高检索分数更接近真正的能力提升。