给智能体装了记忆,它就会自我进化了吗?这篇论文说:差远了

arXiv: 2606.17628 · OPD-Evolver: Cultivating Holistic Agent Evolver via On-Policy Distillation

先说个我自己踩过的坑。

去年做一个长程任务的 agent,思路特别朴素:把每次跑过的轨迹、反思、踩过的雷全存进一个 memory pool,下次遇到相似任务就检索回来塞进 prompt。当时觉得这套逻辑无懈可击——人不就是这么进步的吗,记住经验、复用经验。

结果呢?跑着跑着记忆库越来越大,检索回来的东西越来越杂,模型反而被一堆似是而非的"历史经验"带偏了。有些记忆明明是失败轨迹里的错误操作,照样被当成正面经验塞进去。我那会儿的第一反应是:是不是检索做得不够好?后来才慢慢意识到,问题压根不在检索。

存下经验,和学会怎么靠经验进化,是两码事。

这篇 OPD-Evolver 的开场白几乎一字不差地戳中了我当时的困惑。它的核心判断很尖锐:现在满大街的"自进化 agent",大多只是把记忆当成了一块存储介质,能存、能取、能往 prompt 里塞——但这离"真正会进化的 agent"差得很远。


🎯 核心摘要

这篇论文想解决一个被普遍忽视的问题:记忆 ≠ 进化能力。现有的记忆 agent 能存轨迹、能检索反思、能攒技能,但很少有哪个能同时把"选经验、用经验、写经验、管经验"这四件事都做好——而这四件事是耦合的,缺一个就会崩。

作者提出 OPD-Evolver,一个快慢双循环的协同进化框架。快循环让 agent 在线和环境、和四级记忆层次交互,做测试时进化;慢循环则通过结果校准的记忆归因 + 特权后见之明 + 同策略自蒸馏,把这四种能力真正内化进模型参数里。

效果上:在多域 benchmark 上,比 ReasoningBank 这类记忆系统最多高 11.5 个点,比 Skill0 这类训练型方法高约 5.8 个点。更狠的是,蒸馏后的 OPD-Evolver-9B 居然能在多个子任务上掰手腕 Qwen3.5-397B-A17B 这种巨无霸——一个 9B 的小模型,靠"会进化"这件事追平了几十倍参数的对手。

一句话评价:这不是又一个"加记忆模块"的工程整合,它把"自进化"这个一直含糊其辞的概念,拆成了四个可训练、可衡量的能力,并给出了一套把它们联合训进同一个策略的方法。值得细读。


📌 论文信息

  • 标题:OPD-Evolver: Cultivating Holistic Agent Evolver via On-Policy Distillation
  • 作者:Guibin Zhang, Xun Xu, Yanwei Yue, Zikun Su, Wangchunshu Zhou, Xiaobin Hu, Shuicheng Yan
  • 机构:LV-NUS Lab(新加坡国立大学)、复旦大学、北京大学、字节跳动
  • 提交时间:2026 年 6 月 16 日
  • arXiv:2606.17628 [cs.CL]

🧠 先问一个问题:到底什么样的 agent 才算"会进化"?

这是全文我最喜欢的部分——它没有上来就甩方法,而是先认真定义了一个被大家用烂了却从没说清的词:agent evolver(会进化的智能体)

论文给的定义很干脆:一个能系统性地把交互历史和反馈,转化成未来行为的持续改进的 agent,才配叫 evolver。注意"持续改进"这四个字——很多 agent 能把经验存下来、能在 prompt 里展示出来,但能真正把它转化成行为提升的,少得可怜。

然后作者把这个能力拆成了四个互相咬合的环节:

能力 干什么 做不好会怎样
① 经验选择 从又大又脏的记忆库里挑出真正有用的 选择弱 → 把检索噪声放大,越选越乱
② 经验落地执行 把选出的经验变成有效的多轮动作 执行弱 → 永远依赖 prompt 里的提示,自己学不会
③ 经验写入 从新轨迹和反馈里提炼可复用的知识 写入弱 → 往记忆库里灌垃圾,污染未来
④ 经验管理 给记忆打分、合并、更新、淘汰 管理弱 → 记忆库长期退化,越用越差

我盯着这张表看了好一会儿,因为它精准复现了我开头说的那个坑——我当时只顾着优化①检索(其实连选择都算不上),完全没管③写入的质量,结果失败轨迹里的错误操作被原样写进库,再被检索回来,恶性循环。

论文有句话我特别认同:这四个能力不能安全地拆开单独优化。这正是它跟现有工作的根本分歧——大部分方法只优化了生命周期里的一两个片段,比如只做检索、只做 prompt 注入、只做参数蒸馏,但没人把四个一起训。

还有一个更要命的难点:任务奖励能比较直接地监督"执行"(做对了就给分),但它没法直接告诉你该选哪条记忆、该写什么、该怎么长期管理。这就是为什么"自进化"一直停留在口号——监督信号根本不到位。


🏗️ 方法核心:快慢双循环

OPD-Evolver 的整体设计就是一句话——快循环负责用,慢循环负责学会怎么用

图1:OPD-Evolver 整体框架。上半部分是快循环,agent 在线和环境、四级记忆交互完成选择/执行/更新/管理;下半部分是慢循环,把结果校准的后见之明转化成同策略自蒸馏信号

图1:框架总览。上方快循环串起了 Selection(选择)→ Execution(执行)→ Update(更新)→ Manage(管理)四个环节;下方慢循环里,特权教师拿着每条记忆的价值 V(m)、高质量记忆、未来效用等"作弊视角"信息,蒸馏出学生策略的四种能力——选择内化、经验内化、经验更新、经验整合。

快循环:四级记忆 + 在线进化

快循环对每个任务在线运行,不改模型参数,纯靠测试时进化。它的活儿就两件:执行前把庞大记忆库压缩成一小段可用的上下文,执行后把新轨迹再变回可复用的经验。

这里有个挺关键的设计——四级记忆层次。作者没有把记忆当成一锅粥,而是分成四层:

  • 轨迹(trajectory):完整的 episode 证据,忠实但啰嗦
  • 提示(tip):局部的告警或启发式经验
  • 技能(skill):抽象出来的可复用流程
  • 工具(tool):可执行的命令或代码模板

为什么要分层?作者的解释很实在:经验的复用粒度天生不一样。完整轨迹信息全但冗长,技能和工具紧凑好用但必须从足够多的证据里提炼出来。一刀切地存,要么太散要么太糙。

检索这块作者故意做成高召回的——先用 embedding 相似度从每一层捞 top-K(实际配置里检索 50 个候选),宁可多捞也不漏。但高召回必然带进来一堆陈旧、冗余、跑题的东西,所以紧接着要靠选择器把这堆候选压缩成真正给 agent 看的精简上下文。

执行完之后,同一个 agent 自己决定:哪几层记忆该更新、每层写几条。注意这个"自己决定"——写入不是固定模板,agent 可以只往某几层写,数量也自定。

还有个细节我觉得很聪明:周期性维护。每隔 Q 个任务(论文里 Q=30),agent 会进入一轮多回合的"记忆库整理",用 lookup、merge(合并两条记忆)、delete(删除)这几个工具调用来收拾记忆库。这就对应了前面说的第④个能力——经验管理。大部分记忆系统压根没有这一步,记忆库只增不减,最后变成垃圾场。

慢循环:把"用得好不好"变成监督信号

快循环让 agent 攒下了经验,但攒下不等于用得好。一个随便拉来的 agent,它根本不知道哪条记忆有用、怎么基于记忆执行、什么值得写成记忆、什么时候更新记忆库才对未来有帮助。

慢循环要解决的就是这个。它的起点是一个很无奈的现实:每个任务结束后,唯一可信的外部信号只有环境反馈 \(R_t\)(成功/失败的标量)。核心难题是:怎么把这一个标量,反向传播回选择、执行、写入、维护这四个决策上?

第一步:结果校准的记忆归因

作者的做法叫 outcome-calibrated attribution(结果校准归因)。对每条记忆 \(m\),只在它实际被检索到的那些任务上估计它的价值——这样比较才是"候选可控"的,不会被一堆跟它无关的任务干扰。

直觉上很好理解:想知道某条记忆有没有用,就比一比"它被选中时"的平均回报,和"它被检索到却没被选中时"的平均回报,差值就是它的贡献:

\[\widehat{A}(m)=\sum_{g}\rho_g(m)\left(\mathbb{E}_{t\in\Omega_g^+(m)}[R_t]-\mathbb{E}_{t\in\Omega_g(m)}[R_t]\right)\]

其中 \(\Omega_g^+(m)\)\(m\) 被选中的任务集合,\(\Omega_g(m)\) 是被检索到却没选中的集合,\(\rho_g(m)\) 是个权重,给那些"选中样本太少、不可靠"的情况降权。

然后再转成一个记忆分数 \(V(m)\),乘上层级先验 \(\alpha\) 和一个置信因子 \(\gamma(m)\)——被正向选中的次数越多,置信度越高。

这一步的意义在哪?它把延迟的、稀疏的环境反馈,变成了稠密的后见之明标签。高 \(V(m)\) 的记忆,就是"本来应该被选中、被用、被保留"的正面证据;低分的记忆,就是 evolver 应该学会忽略的噪声。我开头那个坑——失败轨迹里的错误操作被当正面经验——在这套归因下就能被自动识别出来并降权。

第二步:特权后见之明 + 同策略自蒸馏

这是全文最精妙的一招。

先解释下 on-policy distillation(同策略蒸馏,OPD):传统蒸馏是学生学一个固定教师的输出,但学生训练时见到的状态分布和教师不一样,存在 train-inference mismatch。OPD 的做法是——让学生在自己访问到的状态上采样,再让教师在这些状态上给出稠密监督,从而消除分布错配。这几年 OPD 在数学推理、知识问答、工具调用上都被验证过有效。

OPD-Evolver 的创新在于:它不是只用 OPD 强化执行,而是用同一套原理同时训练四种能力

关键设计叫特权教师(privileged teacher)——教师和学生其实是同一个模型,区别在于教师能看到部署时看不到的"作弊视角"信息:

  • 选择决策:教师能看到每条候选记忆的价值 \(V(m)\)
  • 执行决策:教师能看到有价值的已选记忆 \(\mathcal{S}_t^+\) 和同任务组的成功轨迹 \(\tau_t^+\)
  • 写入决策:教师能看到哪些写出来的记忆后来真的变得有价值
  • 维护决策:教师能看到记忆库级别的诊断信息(价值、置信、使用统计、冗余度)

训练时,学生先在部署条件下(看不到这些特权信息)采样出自己的输出,教师则在学生生成的前缀上评估,两者算 token 级的 KL 散度,学生去对齐教师:

\[\mathcal{L}_{\mathrm{slow}}(\theta)=\sum_{k\in\mathcal{K}}\mathbb{E}\left[\frac{1}{L_k}\sum_{n=1}^{L_k}\delta_{k,n}\right]\]

这里 \(\mathcal{K}=\{\text{选择, 执行, 写入, 维护}\}\) 四个生命周期决策,\(\delta_{k,n}\) 是 token 级散度,教师那边用 stop-gradient 阻断梯度。

我觉得这个设计最漂亮的地方在于:教师不是一个外部的大模型,而是同一个 agent 开了上帝视角的自己。它告诉学生"如果你当初能看到这条记忆的真实价值,你本该这么选;如果你能看到未来,你本该写这条而不是那条"。蒸馏完之后,只有学生那套(不依赖特权信息)被部署回快循环——所以测试时 agent 不需要任何特权反馈,就能展现这些进化能力。

执行那一支还有个有意思的细节:教师给的是"有价值的已选记忆 + 成功轨迹",但训练学生时是让学生在没有记忆的情况下解题。这等于逼着学生把经验真正"内化"进参数,而不是永远依赖外部检索。


🧪 实验:小模型怎么掰手腕巨无霸

训练数据来自三个跟评测完全不重叠的来源:Agent World Model(3000 条)、nvidia/Nemotron-Terminal-Corpus(2000 条)、EnvScaler(2000 条),一共 7000 个交互任务。backbone 用 Qwen3-4B-Instruct-2507 和 Qwen3.5-9B,检索用 Qwen3-Embedding-0.6B。主实验在 8 张 A800(80G)上跑。

评测覆盖五个 benchmark:LifelongAgentBench(DB/OS)、MemoryArena(数学/物理)、AMA-Bench(因果推理/状态更新/状态抽象)、InterCode(Bash/CTF/SQL)、以及具身环境 MiniHack。

有个公平性设定要划重点:所有基于记忆的方法,包括 OPD-Evolver,都从空记忆库开始评测,只能从评测流里现攒记忆。这就排除了"提前喂好记忆"的作弊空间。

主表:对比七大记忆系统

LLM 方法 DB OS Math Physics AMA-CI AMA-SU AMA-SA Bash CTF SQL
Qwen3.5-397B-A17B 86.00 63.00 3.98 4.65 57.21 58.73 51.41 51.34 56.00 62.74
Step-3.5-Flash (196B) 81.00 58.00 1.98 2.33 49.50 46.99 48.88 44.20 48.00 59.87
Qwen3-4B No Memory 65.00 36.50 2.40 2.33 24.83 27.67 29.73 30.36 26.00 38.85
ReasoningBank 70.00 38.00 3.81 1.16 27.35 29.68 30.97 31.25 25.00 43.95
MemEvolve 72.00 44.00 1.84 2.33 29.53 31.53 32.73 33.93 29.00 44.59
OPD-Evolver-4B 74.00 49.50 5.51 4.07 32.89 34.93 34.90 36.16 34.00 45.86
Qwen3.5-9B No Memory 75.50 52.50 5.51 5.23 40.10 47.14 45.63 41.52 44.00 55.73
ReasoningBank 80.50 55.00 4.94 6.98 42.28 48.38 47.04 43.75 45.00 57.96
MemEvolve 81.00 61.00 4.24 9.88 44.30 49.77 47.20 45.98 53.00 61.15
OPD-Evolver-9B 84.50 65.00 10.88 11.63 47.32 53.94 52.92 49.55 57.00 64.01

(加粗为同 backbone 组内最优;表中只摘录了部分基线,完整还包括 ExpeL、AWM、Cheatsheet、MemP、EvolveR)

几个数字值得说道说道:

OPD-Evolver 在 4B 和 9B 两档上,对同 backbone 的记忆基线,10 个子任务全部拿下最优。9B 上对最强记忆基线的提升很扎实:OS 从 61.00 涨到 65.00,AMA-SA 从 48.00 涨到 52.92,InterCode-CTF 从 53.00 涨到 57.00。

但真正让我愣了一下的是跨量级对比。OPD-Evolver-9B 在 9/10 个子任务上超过了 196B 的 Step-3.5-Flash,在 6/10 个子任务上超过了 397B-A17B 的 Qwen3.5——包括 AMA-SA(52.92 对 51.41)、CTF(57.00 对 56.00)、SQL(64.01 对 62.74)。

一个 9B 模型,在好几个任务上压过几十倍参数的对手。这说明什么?生命周期级别的进化能力,能让一个紧凑模型在特定任务上追平甚至反超巨无霸。 当然我得泼盆冷水:数学和物理这两栏所有模型分数都低得可怜(OPD-9B 也才 10.88 和 11.63),说明这类纯推理任务上记忆机制能帮的有限,别被"反超 397B"的标题冲昏头——它反超的是那些记忆机制确实能发力的执行类任务。

对比训练型方法

方法 MiniHack-Room Maze KeyRoom InterCode-Bash CTF SQL
Vanilla 80.39 19.61 0.00 55.73 44.00 41.25
SFT 82.35 17.65 0.00 59.87 49.00 44.64
GRPO 100.00 23.53 3.92 63.69 58.00 47.77
Skill0 94.12 25.49 3.92 62.10 54.00 47.32
MemRL 96.08 19.61 1.96 61.15 50.00 44.20
Complementary RL 96.88 20.85 5.16 63.20 55.00 48.10
OPD-Evolver 98.04 27.45 9.80 64.01 59.00 49.55

OPD-Evolver 在 6 个子任务里赢了 5 个。最值得看的是最难的 MiniHack 子任务:KeyRoom(要找钥匙、开锁、再到达目标)上从 GRPO 的 3.92 直接拉到 9.80,翻了一倍多;Maze 从 23.53 涨到 27.45。对 MemRL 在 SQL 上有 5.35 个点的优势。

唯一输的是 Room——GRPO 拿了满分 100,OPD 是 98.04。但 Room 是最简单的开放小房间,本来就接近天花板,这个差距没意义。真正分胜负的是 Maze 和 KeyRoom 这种需要系统探索的硬任务,OPD 全赢。作者的解读我认同:OPD-Evolver 学到的不只是任务级的奖励拟合,而是一套更可迁移的"选择-内化-复用"经验的机制。

消融:四个能力真的缺一不可吗

这是我最看重的实验,因为它直接验证了开头那个"四个能力不能拆开"的核心主张。在 InterCode(OPD-Evolver-4B)上挨个砍:

变体 Bash CTF SQL
OPD-Evolver-4B 36.16 34.00 45.86
w/o 慢循环 32.14 28.00 39.17
w/o 记忆归因 31.20 26.69 38.50
w/o 选择 35.27 32.00 42.04
w/o 写入蒸馏 34.38 29.00 41.08
w/o 维护 35.30 30.10 43.51

掉得最狠的是去掉记忆归因——平均从 38.67 掉到 32.13,Bash/CTF/SQL 分别降 4.96、7.31、7.36 个点。这印证了那个"结果校准归因"才是整套方法的地基:没有它,后面所有蒸馏都没有可靠的监督标签。

去掉慢循环也几乎一样惨(平均 33.10),说明特权后见之明必须真正蒸馏进可部署策略,光在快循环里"用"是不够的。

选择、写入、维护也都各有掉分:只用相似度选择(w/o 选择)让 SQL 从 45.86 掉到 42.04;去掉写入蒸馏让 CTF 从 34.00 掉到 29.00。每一块拆掉都掉分,这就是"四个能力耦合、必须联合训练"最直接的证据。

三个分析实验:进化到底进化了什么

光看任务分数还不够,作者做了三个分析实验去拆解"进化"具体发生在哪。

图2:选择蒸馏的效果。对比原始 Qwen3.5-9B 和蒸馏后 OPD-Evolver-9B 选出记忆的校准分数分布

图2:选择蒸馏前后,被选中记忆的校准分数分布对比。蒸馏后中位数从 0.66/0.69/0.66 提升到 0.79/0.76/0.76(SQL/CTF/Bash),下四分位也从 0.50 抬到 0.62 以上——说明它是整体降低了低质量检索噪声,而不是只靠几个高分离群点撑场面。

选择蒸馏:训练后的选择器,选出的记忆质量整体上移。这正好对应我开头那个坑的解法——它不是检索得更多,而是更会"挑"。

图3:写入蒸馏的效果。对比 vanilla 和 OPD-Evolver-9B 写出记忆的校准分数分布

图3:写入蒸馏前后,写出记忆的校准分数分布。中位数从 0.80/0.82/0.82 提升到 0.91/0.90/0.89(SQL/CTF/Bash),下四分位抬到 0.83 以上。分布更紧更高,说明写出的记忆不只是格式更好看,而是对下游任务更可靠地有用。

写入蒸馏:训练后写出来的记忆,未来效用更高、分布更集中。这一条直击我之前"往库里灌垃圾"的问题——写得好,下游才不会被污染。

图4:经验内化效果。每个箭头从 vanilla backbone 出发,指向对应的 OPD-Evolver 策略

图4:经验内化效果。横轴是任务成功率(越右越好),纵轴是执行步数的反向轴(越上步数越少)。每个箭头都朝着"更高成功率 + 更少步数"移动。

经验内化:这个实验最有说服力。作者把训练后的 OPD-Evolver 去掉外部记忆库,纯靠模型自己执行任务,对比 vanilla backbone。结果每个箭头都朝右上方走——成功率涨了(4B 涨 3-4 个点,9B 涨 3-7 个点),步数还少了(最多减 2.5 步)。

这说明 OPD-Evolver 真的把高价值经验内化进了参数,变成了更直接高效的行为,而不只是在推理时检索到了更好的上下文。换句话说,就算把外挂记忆拔掉,它也比原来的模型更强了。这才是"进化"该有的样子。

案例:它到底学会了什么

图5:选择与写入的案例研究。上:LifelongAgentBench-OS 上的选择;下:MiniHack-Room 上的写入

图5:两个真实案例。上半部分是 OS 任务的记忆选择——vanilla 模型把目录配置、备份日志等一大堆宽泛记忆都选进来,而 OPD-Evolver 只留下直接相关的"修改日志技能"和"权限提示"。下半部分是 MiniHack 失败任务的记忆写入——vanilla 写的是"验证目标、加动作校验器"这种空泛建议,而 OPD-Evolver 写的是一条精准的因果提示:"只探索相邻格子是不够的"。

这个案例特别能说明问题。同样面对一次 MiniHack 失败(agent 只在局部往东南探索就停了,没充分展开楼梯周围的相邻状态),vanilla 模型写出来的是放之四海而皆准的废话;OPD-Evolver 写的是一条直指失败根因、面向未来可复用的因果记忆。

会进化的 agent,不只是会检索相关经验,更会把失败转化成紧凑的、面向未来的记忆。 这句话我觉得是全文的题眼。


🤔 我的判断

先说亮点。

这篇论文最值钱的地方,不在某个具体技术(结果校准归因、特权自蒸馏单拎出来都不算首创),而在它把"自进化"这个被用烂的词,第一次拆成了四个可训练、可衡量、且被实验证明耦合的能力,并给出了一套用同策略蒸馏把它们联合训进同一策略的完整方案。这种"把模糊概念做实"的工作,比单纯刷点的论文有价值得多。

"特权教师就是开了上帝视角的自己"这个设计也很优雅——不需要外部大模型当教师,自己蒸馏自己,工程上干净。经验内化实验(拔掉记忆库还更强)是我认为最硬的证据,它证明了这套方法真的改变了模型本身,而不是堆了个更聪明的外挂检索。

再说我的几点保留。

第一,计算成本。慢循环要为四种决策分别构造特权视角、跑同策略采样、算 token 级 KL,再加上快循环里周期性的记忆维护——这套流程不便宜。论文用了 8 张 A800,但没看到和基线在训练成本上的对齐讨论,"赢了 GRPO"的前提是不是花了更多算力,这点我存疑。

第二,数学/物理任务的尴尬。前面提过,这两栏所有方法分数都贴地板,OPD-9B 也才 10 分出头。这说明记忆机制对纯推理类任务的帮助相当有限,论文标题里"挑战 397B"的叙事,主要成立在执行类、长程交互类任务上。读的时候要分清楚。

第三,归因信号的可靠性依赖足够的重复。结果校准归因要在"同一条记忆被多次检索"的前提下才稳,对于长尾、只出现过一两次的记忆,那个置信因子 \(\gamma(m)\) 会把它压得很低——这些稀有但可能很关键的经验,会不会被系统性地低估?论文没展开,我觉得是个值得追的口子。

工程启发:如果你也在做带记忆的 agent,这篇最直接的可借鉴点有两个。一是别再把记忆当成只增不减的存储,一定要有打分、合并、淘汰的管理机制,否则记忆库迟早变垃圾场。二是写入质量比检索数量重要得多——与其优化怎么检索更多,不如先想清楚怎么让 agent 写出精准的、因果性的记忆。我那个老项目要是早看到这篇,至少能少走半年弯路。

放在同期工作里看,OPD-Evolver 和 Skill0、SkillRL、Skill-SD 这一批"技能内化"工作是同一波浪潮,区别在于别人大多只聚焦生命周期的某一段(多数在做经验写入/技能生成),而它试图做一个统一的、覆盖选择-执行-写入-管理全流程的 evolver 策略。这个"全流程"的野心,是它跟同期工作最大的差异点,也是它最容易被质疑"是不是每一块都没做到极致"的地方。但至少从消融来看,联合训练确实比单点优化更靠谱。

总的来说,这是一篇定义清晰、方法自洽、实验扎实的好工作。它把 agent 记忆研究从"我们又加了个更好的记忆模块",往"我们在培养一个能持续把经验转化成自身进化能力的 agent"推了一大步。这个方向上的转变,可能比具体数字更重要。


觉得有启发的话,欢迎点赞、在看、转发。跟进最新 AI 前沿,关注我