给智能体装了记忆,它就会自我进化了吗?这篇论文说:差远了
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:框架总览。上方快循环串起了 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\),只在它实际被检索到的那些任务上估计它的价值——这样比较才是"候选可控"的,不会被一堆跟它无关的任务干扰。
直觉上很好理解:想知道某条记忆有没有用,就比一比"它被选中时"的平均回报,和"它被检索到却没被选中时"的平均回报,差值就是它的贡献:
其中 \(\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{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:选择蒸馏前后,被选中记忆的校准分数分布对比。蒸馏后中位数从 0.66/0.69/0.66 提升到 0.79/0.76/0.76(SQL/CTF/Bash),下四分位也从 0.50 抬到 0.62 以上——说明它是整体降低了低质量检索噪声,而不是只靠几个高分离群点撑场面。
选择蒸馏:训练后的选择器,选出的记忆质量整体上移。这正好对应我开头那个坑的解法——它不是检索得更多,而是更会"挑"。

图3:写入蒸馏前后,写出记忆的校准分数分布。中位数从 0.80/0.82/0.82 提升到 0.91/0.90/0.89(SQL/CTF/Bash),下四分位抬到 0.83 以上。分布更紧更高,说明写出的记忆不只是格式更好看,而是对下游任务更可靠地有用。
写入蒸馏:训练后写出来的记忆,未来效用更高、分布更集中。这一条直击我之前"往库里灌垃圾"的问题——写得好,下游才不会被污染。

图4:经验内化效果。横轴是任务成功率(越右越好),纵轴是执行步数的反向轴(越上步数越少)。每个箭头都朝着"更高成功率 + 更少步数"移动。
经验内化:这个实验最有说服力。作者把训练后的 OPD-Evolver 去掉外部记忆库,纯靠模型自己执行任务,对比 vanilla backbone。结果每个箭头都朝右上方走——成功率涨了(4B 涨 3-4 个点,9B 涨 3-7 个点),步数还少了(最多减 2.5 步)。
这说明 OPD-Evolver 真的把高价值经验内化进了参数,变成了更直接高效的行为,而不只是在推理时检索到了更好的上下文。换句话说,就算把外挂记忆拔掉,它也比原来的模型更强了。这才是"进化"该有的样子。
案例:它到底学会了什么

图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 前沿,关注我