AVB 用 Claude-Sonnet-4.6 拆解了一篇关于 Recursive Agent Optimization(RAO)的论文。核心思想:用强化学习训练 LLM Agent 学会自我分解任务——把大任务切片,委派给子 Agent,子 Agent 再进一步委派,形成递归执行树。
实验设置
作者刻意选择了两个非常小的本地模型:
- Dense LM: Qwen3-4B-Instruct
- MoE: Qwen3-VL-30B-A3B-Instruct
任务都是长程/长上下文的:
- TextCraft-Synth:Minecraft 风格的文本 crafting 游戏,Agent 需要收集材料、制作物品
- Oolong-Real:超长 D&D 对话转录本(10-12 页)的困难问答
- DeepDive:需要多跳迭代网络搜索和综合的复杂 QA
每个环境都有递归 Agent 系统提示,核心工具是 launch_subagent——Agent 可以委派子任务。
执行树与生成动作
Agent 基于 Python REPL 接口,递归实现为一个异步函数:
result = await async_launch_subagent(
goal="find all papers about X", ...
)
策略本身决定:
- 是否委派
- 子任务描述是什么
- 请求什么输出格式
- 是否并行化子任务(
await asyncio.gather) - 如何聚合结果
REPL 选择的强大之处:
- 返回类型不受限——子 Agent 可以返回字符串、字典、结构化对象
- 父 Agent 可以用普通 Python 链式、组合、转换子输出
- 子 Agent 可以串行(有依赖)或并发(独立)运行
- 最关键:子 Agent 返回的输出不会直接加载到父 Agent 上下文,而是保存在 Python 变量中,父 Agent 可以操作这些变量(打印切片、验证键等)后再加载到上下文
本地节点奖励:信用分配问题
标准 RL 只有根节点获得奖励。但在递归设置中,深度 3 的叶子 Agent 在奖励传播回来时已经相隔数百个 token,信用分配基本失效。
RAO 的解决方案:本地成功信号。用 LLM judge(GPT-5-mini)评估子任务输出并生成奖励:
- 项 1:该节点是否解决了分配的任务?(直接成功信号)
- 项 2:该节点的子节点(如果存在)是否在子任务上成功?(委派奖励信号)
委派奖励取子节点成功率的平均值而非总和——防止退化策略:Agent 生成 100 个琐碎子任务来收集奖励。
三个训练技巧
1. 多任务目标
每次 rollout 自动生成多深度的任务。从单个根任务自然产生深度 1 和深度 2 的额外任务。同一策略同时优化为:
- 深度 0 的好规划者
- 深度 1 的好委派者
- 深度 2+ 的好执行者
这也是课程学习:子任务几乎总是比根任务简单。早期训练模型在根任务上失败,但可以从较容易的子任务获得奖励。随着训练推进,模型自然生成更难更复杂的子任务——无需人工课程设计。
2. Leave-One-Out 基线
对每个根任务采样 G 个独立的 rollout 树。rollout g 的优势:
A(g) = rollout g 的奖励 - 排除 g 后所有其他 rollout 的平均奖励
每个子 Agent 节点的优势单独计算:本地奖励 - 同一基线。所有子 Agent 使用相同的 LOO 基线。
3. 深度级逆频率加权
如果 Agent 生成 4 个子节点,每个再生成 4 个,就有 1+4+16=21 个轨迹节点,但只有 1 个根。如果简单平均梯度,叶子节点以 16:1 主导更新。
解决方案:按深度逆频率加权。深度 d 的权重:
w = α / |B_d|
其中 |B_d| 是该深度的轨迹数。直觉:出现更频繁的深度获得更小权重,防止树中人口稠密的层级主导学习。
六个关键发现
1. 上下文管理技能在训练后期自发涌现
Oolong-Real 训练中,递归 Agent 被限制在 32K 上下文窗口,但需要处理 55K+ token 的文档。它最初尝试把整个输入文档打印到根上下文,立即填满并崩溃。然后完全自主地放弃了这个策略,学会了正确方法:分块输入并委派每个块给子 Agent。
2. 即使不需要递归,递归也有帮助
即使有完整的 40K 上下文窗口(足以无需递归解决任务),递归 Agent 仍然训练更快、表现更好。因为子 Agent 奖励作为密集过程奖励——每个子任务完成都给出训练信号,而非只在最后。分而治之依然 unbeatable。
3. 分而治之是可迁移的
模型只在中等难度的 TextCraft 任务上训练,从未见过困难任务。评估时泛化到更困难的任务。论文假设这是因为分而治之是一种可迁移策略——学会良好分解中等问题,可以递归应用相同模式到更深层解决更难问题。
4. 30B 模型接近 Claude、o3、GPT-5-mini
Oolong-Real 上,训练的递归 Agent 平均奖励 0.320。一个 30B 开源模型,仅用 RL 在此特定任务上训练,几乎匹配万亿参数前沿模型。
5. 串行任务更慢但更聪明
DeepDive 上递归 Agent 比单 Agent 慢 18 倍。单 Agent 快是因为早早放弃走捷径。递归 Agent 在 uniquely 解决的困难任务上使用深度 4+,精确地在需要的地方分配更多计算。两者都能解决的任务平均深度 ~2.9,只有递归 Agent 能解决的平均深度 ~4。
6. 简单任务上递归帮助有限
在简单的 ART-E 邮件搜索基准上,RAO 在早期训练阶段帮助模型更快学习,但最终性能趋于一致——单 Agent 追上了递归 Agent。直觉:如果任务短、适合一个上下文窗口、不受益于分解,递归增加开销而无实质收益。
同样模式出现在 TextCraft 的各难度级别:简单任务上两者收敛到相似成功率,差距在中等和困难难度上才变得显著——正是分而治之和扩展范围重要的地方。
核心启示
RAO 证明了一件事:智能的分解策略可以弥补模型规模的巨大差距。
30B 模型通过学会"如何分解问题",在特定长程任务上逼近万亿参数模型。这不是模型压缩的胜利,是策略可迁移性的胜利——分而治之作为一种元技能,一旦学会,可以递归应用到任意深度。