CoEvolve: Training LLM Agents via Agent-Data Mutual Evolution

AMAP, Alibaba Group · Shidong Yang, Ziyu Ma, Tongwen Huang et al. · 2026-04-17 · arXiv:2604.15840
关键词: LLM agent · GRPO · 数据进化 · forgetting signal · curriculum · self-play · AppWorld · BFCL

速读卡片 (TL;DR)

一句话:标准 GRPO 在固定数据分布上训练 agent 早晚撞墙;CoEvolve 让数据分布跟着 agent 一起演化——从训练 rollout 中抽取 forgetting / boundary / rare 三类信号,用 LLM 在真实环境中针对弱点重采,蒸馏成新任务、跑通环境验证、并入训练集,形成agent ↔ data 的闭环。

+19.4 / +15.6 / +18.1
Qwen2.5-7B / Qwen3-4B / 30B-A3B 平均提分
~10%
相对 GRPO 的额外训练开销
269 → 204
训练中 weakness signal 数量自然下降

立场:这不是又一个 "synthetic data" 论文,而是把 data distribution 本身当作可优化变量,与 policy 同时 minimize 一个隐式联合目标。结构上是 AlphaZero self-play 的"环境/数据"侧泛化版,工程上落在 GRPO 之上做一层正交叠加。


1. 动机:为什么固定数据分布的 RL 注定撞墙

1.1 历史脉络:从模仿专家到 RL,但数据始终是个静态快照

训练 LLM agent 走过三个范式。第一代是 expert-supervised:让人类专家在真实环境里(网页、操作系统、应用 API)亲手交互,记录成 trajectory,然后做 SFT。代表如 WebGPT、Voyager 的早期变体、AppWorld 自带的人写训练集。问题清晰:一条轨迹动辄几分钟人力,长尾根本铺不满,agent 一旦碰到按钮文字从 "Book Now" 改成 "Reserve Now" 就懵了。

第二代是 LLM-synthesized:既然人类太贵,就让 GPT-4 / Claude 类大模型扮演专家自己跟环境玩,生成合成轨迹。AgentTrek、AgentBank、Explorer、LAM Simulator 都是这条路。便宜了,但探索是 open-loop 的——LLM 凭世界知识 random 地走,跟"agent 实际上哪里弱"无关。

第三代是 RL: DeepSeek-R1 把 GRPO 推上王座之后,大家把 GRPO 套到 agent 上(Agent-RL Scaling Law、DeepAgent 等)。policy 在变,但数据集 D 是冻结的——每个 epoch 反复采样同一批 prompts/tasks,只是 reward 信号驱动 policy 更新。这就是论文要打的靶:policy 演化、data 不动 → 训到一定步数,signal 信噪比塌方,GRPO 平台期到来。Fig 3(a) 显示 baseline 在 ~step 60 处先升到 0.29 后回落到 0.23,典型的"会的越练越熟、不会的永远碰不到"症状。

1.2 别的方案为什么不够

方案数据来源是否 closed-loop缺陷
SFT on expert traces人写贵、覆盖窄、generalization 差
静态 synthetic (AgentTrek 等)LLM open-loop 生成探索浅,与 agent 弱点解耦
Reflexion / 自反思当前 trajectory停留在 inference-time,不修改训练分布
ReST (self-training)policy 自采只在已有 prompt上反复采样,没新任务
Curriculum Learning(手工)人定难度递增课程是先验设的,不响应 agent 实际表现
普通 GRPO固定 Ddata distribution 与 policy 的 mismatch 越来越大
CoEvolveLLM × env × feedback—— 本文要论证的方案 ——

关键 distinction:Reflexion 和 ReST 也"用了反馈",但它们要么停在 inference 不影响训练,要么只在固定 query 池上 resampling。CoEvolve 是把 agent 推回环境去发现新的 executable query——data evolution 不止是改写或筛选,而是开拓

1.3 为什么这事不平凡(joint optimization 的稳定性问题)

"让数据跟着 agent 演化"听起来是显而易见的好主意,但工程上有三个坑:

  1. 双向反馈循环可能崩塌。agent 弱点 → 生成更多类似数据 → agent 在该区域过拟合 → 别的能力退化 → 反馈信号噪声化 → 进一步歪曲数据。这是 self-play 体系经典的 mode collapse / runaway dynamics 风险。
  2. 反馈信号是从当前 policy 派生的,policy 早期能力差时,signal 本身就 noisy(论文 Limitations 自己承认)。一开始就让 noisy signal 主导数据生成会放大错误。
  3. 合成任务可能不可执行。LLM "幻想"一个 task,但环境里压根没那个 API、那个文件、那个状态——这种垃圾任务掺进训练集,GRPO 的 advantage 估计就废了。
固定数据 RL vs CoEvolve (a) 标准 GRPO Static Dataset D Policy π_θ sample grad → 数据不响应 policy,平台期 (b) CoEvolve Evolving Data D_t Policy π_θ + signals sample grad signal → data 跟着 policy 弱点演化
图 1. 左:标准 GRPO 单向反馈,数据是冷冻的;右:CoEvolve 在 D 与 π 之间建第二条反馈链,data 也成为可塑变量。

论文给出三剂稳定性药方:(1) signal 是低门槛、易解释的统计量(forgetting / boundary / rare),不是某个学到的 critic,避免"以噪治噪";(2) environment validation 强制每个合成任务跑通真实环境才能入库,过滤幻觉;(3) 数据分布是追加的而非替换(D_t = D_0 ∪ 历次合成),保留旧任务防灾难性遗忘。下文按这条主线展开。

2. 背景速查

术语含义 / 与本文关系
GRPOGroup Relative Policy Optimization。每个 prompt 采 K 条 trajectory,advantage 用组内 reward z-score。CoEvolve 直接用 GRPO 作底层 RL,不改它。
forgetting signalToneva 2018 的概念:某样本曾经预测对、现在预测错。CoEvolve 把它从 supervised 推到 RL trajectory 级别。
boundary signal同任务的 K 条 rollout 既有成功又有失败 → policy 处于决策边界。等价于 high-variance reward 任务。
rare signalaction pattern 出现频率 < θ% 但 > 0 → 系统性 underexplored。
self-playAlphaZero 风格:opponent 跟自己一起强。CoEvolve 把"opponent"换成"data",但闭环结构同源。
POET (Wang et al. 2019)Open-ended evolution:同时演化 agent 与 environment。CoEvolve 是其精神 LLM 版。
AppWorld模拟应用生态(日历、邮件、Spotify 等),agent 通过 Python API 调用完成任务,30 步上限。
BFCL-V3 Multi-TurnBerkeley Function Calling Leaderboard:多轮 tool-use,任一中间步出错即整条失败,长程 strict metric。
TGC / SGCAppWorld 指标:Task / Scenario Goal Completion。SGC 要求 scenario 内所有子任务都成功,更难。

GRPO 一句话回顾

J(θ) = (1/Σ|τ_k|) Σ_k Σ_t CLIP(r_{k,t}(θ), Â_k, ε) − β·KL(π_θ ‖ π_ref)

其中 r_{k,t} = π_θ(a^k_t|s^k_t) / π_{θ_old}(a^k_t|s^k_t),Â_k 是 group-relative advantage(组内 z-score),CLIP 同 PPO。CoEvolve 在哪里采 prompt 这一步把 D 换成 D_t,其余完全不动。

3. 框架总览:三阶段闭环

CoEvolve 三阶段闭环 Stage 1 GRPO 训练 + signal extraction forgetting boundary rare → signal-annotated Stage 2 signal-guided re-exploration LLM reads context multi-round × multi-step 真实 env 中跑 → (a_t, o_t, id) triplets Stage 3 abstraction + env validation triplets → task spec execute in real env 通过 → 入库 → D_{t+1} = D_t ∪ new D_{t+1} 喂回 GRPO 下一轮
图 2. 闭环三阶段。每 F=10 个 GRPO step 触发一次 Stage 2/3,生成的新任务并入 D。Initial D_0 由 LLM unguided 探索得到(N=100)。

这套结构与 AlphaZero 的 self-play 同构:policy ↔ opponent 改成 policy ↔ data distribution。所不同的是 AlphaZero 的 opponent 总是当前 policy 自己,而 CoEvolve 的 data 是由外部 LLM(论文用 Qwen3-Max)在 weakness 信号驱动下生成的——所以严格说更像 POET 的"LLM-as-environment-generator"变体。

4. Stage 1: GRPO 训练 + 三类 weakness signal

4.1 三个信号的精确定义

训练循环里每个 task x ∈ D_t 都跑 K=8 条 trajectory。在更新 policy 的同时,对每条 trajectory 记三种标签:

信号触发条件语义
forgetting近 W 步窗口内存在 s_i ≥ 0.5,但 s_now < 0.5policy 退化:之前会做的现在又不会了
boundary同 task 的 K 条 rollout 中既有 R̃ > 0.5 又有 R̃ < 0.5policy 在决策边界震荡
rareaction pattern p 的 c_p / N < θ/100,θ=5,且 c_p > 0系统性 underexplored 模式

三种是 OR 的:同一 trajectory 可同时被多个信号标注,全部保留。Fig 4 显示 boundary 占比最高(AppWorld 51.4%、BFCL 45.5%),forgetting 次之、rare 最少。

三类 signal 的判定示意 forgetting 0.5 高 → 低 boundary 0.5 同 task 内分裂 rare A B C D* E D 频率 < 5% 三者正交,常常叠加;forgetting 抓 regression,boundary 抓不稳定,rare 抓覆盖盲区
图 3. 三类信号的几何直觉。注意:这是无监督 heuristics,不需要额外训练 critic / classifier。

4.2 worked example

设 task = "把 Spotify 上 Like 数最高的歌的歌名改成大写发到我的 Twitter"。在 step 60 训练步,K=8 条 rollout 的 reward 是:{1, 1, 1, 0, 1, 0, 0, 1}(5 succ / 3 fail) → boundary 触发。窗口 W=10 内,这个 task 的 score history = [0.6, 0.7, 0.8, 0.9, 0.7, 0.5, 0.3, 0.4, 0.5, 0.625](s_now=0.625 ≥ 0.5,所以 forgetting 不触发,但若 s_now=0.4 则触发)。同时这条 trajectory 用了 spotify.search_by_likes(),在全局 50000 次 action 中只出现 200 次(0.4% < 5%) → rare 触发。该 trajectory 被打上 {boundary, rare} 双标签,送进 Stage 2。

反向论证:如果只用 boundary 一种信号会怎样?Table 5 给的实验答案:去掉 forgetting 掉 4 分(49.36 → 45.18),去掉 boundary 掉 2.2,去掉 rare 掉 2.2。forgetting 杀伤最大,因为它专门抓 regression ——RL 训练里"会的忘了"是最隐蔽也最致命的 bug。

5. Stage 2: signal-guided 环境再探索

5.1 把"为什么失败"翻译成"去哪里探索"

对每条 signal-annotated trajectory,系统把整段交互历史(task 描述、agent 动作序列、env 反馈)喂给一个外部强 LLM(Qwen3-Max),prompt 它做两件事:

  1. Reflection:诊断失败原因或不稳定来源。例如:"agent 反复调用 spotify.search() 但忽略了 limit 参数,导致返回截断"。
  2. 构造 exploration context:把诊断结构化成"在哪里怎样探索"的指令。

然后用这个 context 去驱动同一个 LLM 在真实环境中再跑——两个正交维度的探索:

每步记 (a_t, o_t, id) 三元组,id 标记属于哪次 rollout。最终 Stage 2 输出一堆 step-level triplets,按 task context 分组送 Stage 3。

Signal → Context → Re-exploration signal-annotated trajectory τ LLM reflection: "在 X 处用 Y 方式失败" structured context (where + how to explore) Real Environment multi-round × multi-step → (a_t, o_t, id) guide a₁ a₂ a₃ o₁ o₂ o₃ round id=k
图 4. Signal → reflection → context → re-exploration 流程。注意 re-exploration 是真去环境跑,不是 LLM 闭着眼瞎想——这是与一般 synthetic data 的本质区别。

6. Stage 3: task abstraction & environment validation

6.1 从动作流到任务规格

Stage 2 的 triplets 是 低层动作记录,直接拿来训 GRPO 不行——GRPO 需要的是 (task query, executable solution) 对。Stage 3 做两件事:

  1. Triplet aggregation + LLM abstraction:把同 context 下多次 rollout 的 triplets 聚成一组,prompt LLM 反向推断"这组动作是为了完成什么任务",生成 (task query, solution sequence) pair。例如把 5 次涉及 cp / cat / echo 的探索抽象成 "Create a non-empty test file, copy it, verify content identical"。
  2. Environment validation:把生成的 (query, solution) 重新提交给一个 LLM agent 在真实 env 里执行。三种结局:
    • 执行成功 → accept
    • 执行失败但 env 给了 positive reward → retain(部分正确也算)
    • 执行失败且 reward = 0 → discard

幸存者并入 D_{t+1}。整个 pipeline 一次循环大约消耗 9.7%–12.8% 的相对训练时间(Table 7)。

为什么 validation 不可省:Table 11 显示去掉 validation 后,AppWorld 从 35.71 跌到 27.38(-8 pts),BFCL 从 63.00 跌到 58.50(-4.5 pts)。原因:abstraction 步 LLM 容易"美化"动作序列、写出一个看似合理但环境里其实不存在的 API 或前置状态——这种任务进训练集会让 advantage 全为 0(永远失败)或全为 1(永远成功),GRPO 的 group-relative 信号失效。

7. Worked Example: 文件操作任务的三轮演化

用论文 Fig 6 的 BFCL 文件操作家族为例,模拟三轮 CoEvolve 演化:

Round 0 (D_0,初始 unguided 合成,N=100)

Task: "Transfer a duplicate of 'test_document.txt' over to the
       archives folder and rename it 'final_document.txt'"
Solution:
  cp(source='test_document.txt', destination='archives')
  cd(folder='archives')
  mv(source='test_document.txt', destination='final_document.txt')

Agent 在 step 0–60 的 GRPO 训练中,这种"线性 3 步"任务全部学会,reward → 1.0。但它从没学过验证拷贝结果

Round 1 (step 60 触发 stage 2/3)

boundary signal 触发:某些 file 类任务的 K=8 中混了成功和失败,失败的都涉及"目标文件已存在"。LLM reflection: "agent 没有处理 destination 已存在的情况"。Re-exploration 在环境里跑出涉及 touch / echo / cat / cp 的多种序列。Abstraction 给出:

Task: "Create a non-empty test file 'test.txt', copy it to
       'test_copy.txt', and verify both files have identical content"
Solution:
  touch(file_name='test.txt')
  echo(content='This is test content...', file_name='test.txt')
  cp(source='test.txt', destination='test_copy.txt')
  cat(file_name='test.txt')
  cat(file_name='test_copy.txt')

Validation pass → 入 D_61。注意这是结构上更长(5 步)、语义上引入 "verification" 概念的全新任务,与 D_0 中的任何任务都不近邻(论文 Fig 5 显示大部分合成任务的 max cosine 落在 0.4–0.7)。

Round 2 (step 120,训练结束前最后一次)

forgetting signal 触发:部分 round-1 加入的 verification 类任务,在 step 100 之后开始 score 退化(window 内有 0.7,现在 0.3)。Reflection:"agent 在长 task 末尾误用 cat 的输出格式"。Re-exploration 加入 diff / wc / md5sum 等罕见 action(rare signal 协同触发)。新任务:

Task: "Create file A with 100 random bytes, copy to B, then
       confirm via byte-count that A and B match"
Solution: ... (含 wc -c 比较步骤)

这条 rare-action 任务再次扩大覆盖。整个轨迹:D_0 → D_61 → D_121,任务结构从 3 步 → 5 步 → 7+ 步,与 Fig 7 观察到的"synthesized 比 original 更长尾、步数更多"完全吻合。

8. 稳定性:为什么联合优化没有崩

这是这篇论文最值得 RL 工程师细看的地方。Joint optimization 听起来美,实际有 4 个隐式机制在防 collapse:

  1. D_t 是单调追加,不替换。D_t = D_0 ∪ ⋃_{i<t} new_i。即便后期生成偏离了,D_0 的 100 个种子任务一直在,policy 不会失去原始锚点。
  2. signal 都是低阶统计,不是 learned predictor。forgetting 用滑窗 score、boundary 看 reward 方差、rare 看频率——三者噪声有界、可解释、不会随 policy 演化飘移。对比那些用学到的 reward model 来选 hard examples 的工作,这套设计稳得多。
  3. environment validation 是硬过滤。合成任务必须真在环境里跑通才进库,LLM 幻觉无法污染 D_t。
  4. signal-driven pass rate 自然趋稳。论文 Fig 3(d) 显示 0.71 → 0.85 → 0.80 ——agent 越练越能解决 signal 区域,新合成任务的难度就自适应地保持在边缘可学习区(GRPO 的 advantage 才有信号)。这是个隐式 curriculum 自调节:不是手工设的难度递增,而是难度始终贴着能力边界
Joint convergence trajectory(论文 Fig 3 重绘) value training step 0.9 0.5 120 CoEvolve perf baseline (退化) #signals: 269→204 pass rate: .71→.85→.80
图 5. 三条曲线齐头并进:perf 上升 + signal 下降 + pass rate 稳定 = 良性闭环。baseline 在 step 60 后 perf 回落是经典的 GRPO over-fit 现象,CoEvolve 不出现。

9. 实验关键结果与 ablation

9.1 主表数字(Table 1 摘要)

BackboneAppWorld TestN TGCBFCL Multi-turn5-bench Avg.
Qwen2.5-7B-Inst1.19 → 27.9813.5 → 61.53.08 → 22.51 (+19.4)
Qwen3-4B-Inst16.67 → 35.7126.5 → 63.011.72 → 27.30 (+15.6)
Qwen3-30B-A3B31.55 → 54.7643.5 → 67.022.64 → 40.78 (+18.1)
对比 Claude-Sonnet-4.573.8169.056.08
对比 GPT-430.4054.025.94

读这表的关键不是绝对数(Claude 还是赢),而是纯 GRPO 的提升上限被打破:Table 2 显示在 GRPO 已经收敛之上 CoEvolve 还能再加 +6 (4B AppWorld) / +5 (4B BFCL) / +6 (30B AppWorld)。

9.2 关键 ablation

10. 与同类工作对比

方法数据演化?反馈来源新任务来源与 CoEvolve 关键差异
AgentWorld (env 演化)RL reward动态生成 env 配置演化的是环境不是任务集;CoEvolve env 固定,任务集滚动
POET (2019)共演化变异 envCoEvolve 是 LLM-agent 时代的精神继承,但用 LLM 替代 EA 算子
AlphaZero self-play对手 = 自己新对局自然生成结构同源,但 CoEvolve 不是 zero-sum;data 不是 opponent
SEC / SELAUR / Self-Evolving World Knowledgeself-judge改写已有数据停在改写层,不真去环境探索新 executable query
PRIME / Process Rewardprocess critic正交工作:PRIME 改 reward,CoEvolve 改 prompt 分布
Reflexionverbal reflection同 task 重试inference-time 自我修复,不进训练
ReST (Gulcehre 2023)policy 自采固定 prompt 池不会发现新 query
Curriculum Learning(手工)人定难度课程是 prior;CoEvolve 是 emergent curriculum
Co-evolving Coder & Unit Tester (Wang 2025c)coder vs tester测试用例对偶任务专用;CoEvolve 是单 agent 通用框架

CoEvolve 相对 AgentWorld(同期工作)最 sharpest 的差异:AgentWorld 演化环境本身(生成新场景、新 entity),CoEvolve 在固定环境(AppWorld、BFCL)里演化任务分布。两者其实可叠加——理论上一个能同时演化 env 又演化 task 的系统是更彻底的 POET 复刻。

11. 局限 / 个人 take / 待验证问题

个人 take:这是一篇结构清晰、工程可复现的论文,不靠新 RL 算法,只靠"把数据当变量"这一招。它的真正价值不是 +18 分,而是给社区提供了一个可叠加的第二条优化轴:大家以前 90% 的精力在改 J(θ) 这个目标函数,本文论证了改 D_t 同样有杠杆。再过一年,我估计 GRPO + data evolution 会变成 agent RL 的默认 recipe,就像 PPO + KL penalty 当年那样。

待验证问题(顺序排列)

  1. 把 D_t 上限去掉(无限增长)会怎样?会 OOD 还是会更好?
  2. signal 三选一时,只留 forgetting 是不是已经能恢复 95% 性能?
  3. 用 GRPO 之外的 RL(GSPO、StepGPO)做底层,evolution 的增益还在吗?
  4. 把 explorer 也换成被训练的 policy(纯 self-play),不依赖 Qwen-Max,会崩还是稳?
  5. Cross-domain transfer 不对称(AppWorld→BFCL +18.5,反向 +2.4),为什么?是 task 复杂度不对称还是 signal 类型分布不同?
  6. 把 AgentWorld 的 env 演化与 CoEvolve 的 task 演化叠加,POET-完整版,能否再上一个台阶?

12. Memory points(冷回忆用)

立场data 是变量。GRPO 改 J(θ),CoEvolve 改 D_t,二者正交且可叠加。
三信号forgetting / boundary / rare。低阶统计、无监督、互补。forgetting 杀伤最大。
三阶段① GRPO + signal ② signal-guided real-env re-exploration ③ abstraction + env validation。
闭环防崩D_t 单调追加 + signal 是 heuristic + env validation 硬过滤 + pass rate 自适应。
关键超参N=100 init tasks,F=10 GRPO step 一次 evolution,K=8 group size,W=10 forgetting window,θ=5% rare 阈值。
成本~10% 额外训练时间,换 +6 ~ +20 绝对分。
类比AlphaZero (policy ↔ opponent) → CoEvolve (policy ↔ data)。POET 的 LLM 时代版本。
区别 AgentWorldAgentWorld 演化 env,CoEvolve 演化 task 分布,可叠加。
关键 ablation去 validation -8 / 去 forgetting -4 / 去 boundary -2 / 去 rare -2。

CoEvolve 精读 · 2026-05 · arxiv:2604.15840 · 与 03 AgentWorld 互参