返回 FEED
AGENT2026-06-15

递归Agent优化:用RL训练Agent自我分解任务

这篇论文介绍 Recursive Agent Optimization(RAO),用强化学习训练 LLM Agent 自主分解大型任务,生成递归子 Agent 并协调它们并行工作。可以把它理解为「递归语言模型 + 强化学习」的结合体。

实验环境

作者刻意选择了两个非常小的本地模型:dense LM Qwen3-4B 和 MoE Qwen3-VL-30B。任务都是长程/长上下文的,需要仔细规划和分而治之:

  1. TextCraft-Synth:Minecraft 风格的制作游戏,Agent 需要收集材料并制作物品(比如 gather wood → craft planks → craft sticks)
  2. Oolong-Real:长程 D&D 对话转录本的困难问答,文档长达10-12页
  3. DeepDive:需要多跳迭代网络搜索和综合分散信息才能回答的 QA 对

每个环境都有一个递归 Agent 系统 prompt,核心工具是 launch_subagent——让 Agent 可以派生子 Agent。对照实验是单 Agent 策略,其他设置完全相同,只是移除了 launch_subagent

执行树与生成动作

Agent 基于 Python REPL 接口构建,递归实现为一个异步函数:

result = await async_launch_subagent(
    goal="find all papers about X", ...
)

策略本身决定:

  1. 是否委托(调用 launch_subagent)
  2. 子任务描述是什么
  3. 请求什么输出格式
  4. 是否并行化子任务(用 await asyncio.gather
  5. 如何聚合结果

使用 REPL 的强大之处:

  • 返回类型不受限制——子 Agent 可以返回字符串、字典、结构化对象
  • 父 Agent 可以用普通 Python 链式、组合或转换子输出
  • 子 Agent 可以串行(有依赖)或并发(独立)运行
  • 最关键:子 Agent 返回的输出不会直接加载到父 Agent 上下文,而是保存在 Python 变量中,父 Agent 可以操控这些变量(打印切片、长度、验证键)后再加载到上下文

局部节点奖励(信用分配)

标准 RLVR 只有根节点在任务完成时获得奖励。但在递归设置中,这会导致信用分配崩溃——叶子 Agent 在数百个 token 之外,根本收不到信号。

RAO 的解决方案是局部成功信号:用 LLM judge(gpt-5-mini)评估子任务输出并生成奖励。 judge 基于两个维度评分:

  • Term 1:这个节点是否解决了分配的任务?(直接成功信号)
  • Term 2:这个节点的子节点(如果有)是否成功完成了委托给它们的子任务?(委托奖励信号)

对于 Term 2,作者用子节点的成功率平均值而非求和或计数。这防止了退化策略——Agent 不能通过生成100个琐碎子任务来收集奖励。它只获得委托质量的信用,而非数量。

策略优化的三个技巧

1. 多任务目标

递归 Agent 的每次 rollout 自动生成多深度的任务。比如根任务是"研究 AI 历史并写报告",根 Agent 可能 spawn:

  • 子任务1(深度1):"找1950s-1980s的论文"
  • 子任务2(深度1):"找1990s-2010s的论文"

子任务1再 spawn:

  • 子任务1.1(深度2):"搜索 Turing 的工作"
  • 子任务1.2(深度2):"搜索早期神经网络论文"

RAO 同时训练每个深度的任务。同一策略被优化为深度0(根规划器)、深度1(中层委托者)和深度2+(叶子执行者)的好 Agent。这也是一种课程学习——子任务几乎总是比根任务简单,模型早期可以从容易的子任务获得奖励,随着训练进展自然生成更复杂的子任务。

2. Leave-One-Out 基线

对每个根任务采样 G 个独立的 rollout 树。rollout g 的优势是:

A(g) = rollout g 的奖励 - 排除 g 的所有其他 rollout 的平均奖励

每个子 Agent 节点的优势单独计算:

优势 = 局部奖励 - 基线

所有子 Agent 使用相同的 LOO 基线!基线不是相对于同一 rollout 中的兄弟/父/子节点计算的,而是来自同一任务的所有其他独立 rollout。

3. 深度级逆频率加权

如果 Agent spawn 4 个子节点,每个再 spawn 4 个,总共有 1+4+16=21 个轨迹节点,但只有1个根。如果简单平均梯度,叶子节点以16:1的比例主导更新,导致模型过度优化叶子执行者而欠优化根规划者。

修复方案:按深度逆频率加权。深度 d 的权重:

w = α / |B_d|

其中 α 是归一化常数,|B_d| 是该深度在 batch 中的轨迹数。这减少了频繁出现的深度主导学习的倾向,同时保持整体更新幅度大致不变。

惊艳的结果

1. 上下文管理技能在训练后期自发演化

Oolong-Real 训练中,递归 Agent 被限制在32K上下文窗口,但需要处理55K+ token 的文档。它先尝试把整个输入文档打印到根上下文,立即填满并崩溃。然后完全自主地放弃了这个策略,学会了正确的做法:分块输入并委托每个块给子 Agent。

2. 即使不需要递归,递归也有帮助

即使在完整的40K上下文窗口(足够不用递归解决任务)下,递归 Agent 仍然比单 Agent 基线训练得更快、表现更好。为什么?因为子 Agent 奖励充当了密集的过程奖励——每个子任务完成都给训练信号,而非只在最后给一次。分而治之仍然 unbeaten。

3. 分而治之是可迁移的

模型只在中等难度的 TextCraft 任务上训练,从未见过困难任务。但在评估时,它泛化到了更困难的任务。论文假设这是因为分而治之是一种可迁移的策略——如果你学会了很好地分解中等问题,可以递归地应用同样的分解模式来解决更困难的问题。

4. 30B 模型接近 Claude、o3 和 GPT-5-mini

在 Oolong-Real 上,训练的递归 Agent 平均奖励达到0.320。一个30B的开源模型,仅通过针对该特定任务的 RL 训练,就接近万亿参数的前沿模型!

5. 串行任务更慢但更聪明

在 DeepDive 上,递归 Agent 比单 Agent 慢18倍。单 Agent 快是因为它早早放弃并走捷径。递归 Agent 在困难任务上使用深度4+,精确地在需要的地方分配更多计算。两者都能解决的任务平均深度约2.9,但只有递归 Agent 能解决的任务平均深度约4。

6. 简单任务上递归帮助有限

在 ART-E(简单邮件搜索基准)上,RAO 在早期训练阶段仍然帮助模型学得更快,但最终性能趋同——单 Agent 追上了递归 Agent。这符合直觉:如果任务短、能装在一个上下文窗口里、不需要分解,递归增加开销而没有有意义的收益。


作者:AVB (@neural_avb),论文地址:http://arxiv.org/abs/2605.06639