arXiv preprint 2025.10 cs.CL · cs.AI · cs.LG

SUPO:用端到端摘要突破多轮 RL 的上下文瓶颈

Miao Lu, Weiwei Sun, Weihua Du 等 · ByteDance Seed · Stanford · CMU

阅读原文 ↗ · arXiv:2510.06727
30 秒读懂

多轮工具调用 Agent 的 RL 训练有个硬瓶颈:上下文会无限增长,但模型窗口是固定的。几十轮搜索/函数调用后,要么撑爆窗口,要么推理质量崩塌。

这篇论文的核心思想是:把摘要写进 MDP,端到端用 RL 同时学「怎么用工具」和「怎么压缩历史」。当上下文超过阈值 L 时,Agent 自己生成任务相关摘要,把 working context 重置为「初始 prompt + 摘要」,从而用短窗口覆盖长 horizon。

算法实例 SUPO(Summarization augmented Policy Optimization)在 GRPO 基础上,把一次 rollout 拆成多条子轨迹分别算梯度,并共享 rollout 级 advantage。实验显示:同样有效上下文长度下,成功率显著高于 vanilla GRPO;测试时还能把摘要轮数扩到训练时以上,进一步提分。

+14%
BrowseComp-Plus
相对 GRPO 绝对提升
+3.2%
CodeGym
同等有效上下文下提升
4K→32K
CodeGym 工作窗口 4K
有效 horizon 扩到 32K
60%
测试时扩摘要轮数
(训练 S=2,测试 S=23)

这篇论文要解决什么问题?

把 LLM 多轮工具调用建模成 MDP 后做 RL 微调,已经在数学推理、代码、深度搜索等场景取得进展。但长 horizon 任务(几十到上百轮工具调用才出最终答案)面临三重困境:

现有 RL 管线(GRPO、PPO 等)大多在固定上下文窗口内做 rollout,没有显式的上下文管理机制。论文的切入点:把LLM 生成的摘要作为决策过程的一部分,用 RL 端到端优化摘要策略,而非依赖手工规则或离线启发式压缩。

Vanilla 多轮工具调用
  • 上下文不断累积:prompt + 思考 + 工具输出 + …
  • 单条轨迹,长度无界增长
  • 超出窗口即截断或失败
  • RL 只能优化工具调用,不管历史压缩
摘要增强 MDP(本文)
  • 超阈值 L 时触发 LLM 摘要
  • 重置为「初始 prompt + 摘要」
  • 一条 rollout 拆成 I+1 条子轨迹
  • RL 同时学工具策略和摘要策略

核心方法:摘要增强 MDP

论文把标准多轮工具调用 MDP 记为 MV(基于 ReAct),状态是迄今所有 token 的拼接。在此基础上引入摘要阈值 L最大摘要轮数 S,得到 MsumV

图 1:Vanilla rollout(上)vs 摘要增强 rollout(下) Vanilla M_V Prompt Tool Tool 持续增长 → 单条轨迹 → Final M_V^sum(本文) Prompt Tool ≥L 触发 Summary₁ 轨迹 1 Prompt Sum₁ Tool Summary₂ 轨迹 2 Prompt Sum_I Tool Final Answer 轨迹 I+1 可验证 Reward RLVR:答案对错 0/1 状态转移规则(公式 1) |context| < L → 继续累积 (s_t, a_t, o_t) |context| ≥ L → 附加摘要指令 v_sum,下一步生成摘要 检测到 v_sum 已在 context → 重置为 (s_1, summary) working context 上界 ≈ L + 2L_A + L_O + |v_sum|

上图对比 vanilla 单轨迹线性增长 vs 摘要增强的多轨迹分段 rollout。每次超阈值后上下文被压缩重置,但整条 rollout 仍共享同一个最终 reward。

展开说明 ▸
  • Vanilla 上半部分:prompt、LLM 输出、工具 observation 不断拼接,形成单条越来越长的轨迹,直到 final response 或步数上限 H。
  • 摘要增强下半部分:当 |context| ≥ L 时,附加摘要指令 v_sum,LLM 生成摘要后把状态重置为 (初始 prompt, 摘要),开启新子轨迹。
  • 轨迹 1:从 prompt 开始,若干轮 tool calling,以第一次 Summary 结束。
  • 轨迹 2…I:每条以「prompt + 上一轮摘要」开头,继续 tool calling,再以新 Summary 结束。
  • 轨迹 I+1:最后一段不再触发摘要,直接输出 final answer;整条 rollout 的 reward 由最终答案决定。
  • 一句话总结:用物理重置代替无限拼接,把一条长 rollout 拆成多条可独立送入 RL 基础设施的短轨迹。

策略梯度分解(Theorem 3.2)

这是本文的理论核心:一条长 rollout 的 policy gradient 可以分解为 I+1 条子轨迹梯度之和,每条子轨迹都能用现有 GRPO/PPO 基础设施计算。

每条子轨迹 i 的结构: [prompt s₁] + [上一轮摘要 a_{t_{i-1}}] + [本轮 tool calls] + [摘要指令 v_sum] + [本轮摘要 a_{t_i}] 梯度 = R(s_T, a_T) × Σ_{i=1}^{I+1} [ Σ_{t} ∂log π(a_t | 上下文) ← 优化工具调用 + ∂log π(a_{t_i} | 上下文, v_sum) ← 优化摘要生成 ]

关键含义:工具策略和摘要策略在同一个 RL 目标下联合优化,不需要单独的摘要 loss。每条子轨迹的「新 prompt」= 初始任务 prompt + 上一轮摘要,可直接接入 VeRL 等现有 RL 框架。

理想策略应学会:哪些信息该保留、如何抽象、哪些细节可以丢弃——全部由任务 reward 驱动,而非人工规则。

SUPO 算法:把理论落地到 GRPO

SUPO(Summarization augmented Policy Optimization)是 Theorem 3.2 的算法实例,基于 GRPO 风格 policy gradient,加了三个工程关键设计。

Rollout 流程步进演示

下面用 Algorithm 2 走一遍:Agent 在 CodeGym 风格任务中多轮调用函数,上下文超限时触发摘要并重置。

SUPO Rollout(阈值 L,最大摘要轮数 S)
① 初始 Prompt
② LLM 行动
③ 工具返回
④ 检查长度
⑤ 触发摘要
⑥ 重置上下文
⑦ 继续 / 结束
点击「下一步」观察上下文如何随 rollout 变化
演示一条包含摘要重置的 rollout
查看 SUPO 目标函数(公式 2)—— GRPO clip + overlong mask 的组合
J_SUPO(θ) = E[ (1/Σ|a|) Σ_j Σ_i Σ_t Σ_ℓ min(ρ_{t,ℓ}^j · Â^j, Clip(ρ_{t,ℓ}^j, 1-ε_low, 1+ε_high) · Â^j) · 1{T^j ≤ H, I^j ≤ S} ] 其中 ρ 是 token-level importance ratio,Â^j 是 rollout group 内的 group-relative advantage: Â^j = (R^j - mean({R^{j'}})) / std({R^{j'}})

上下文长度精细控制

实现上有一个与理论建模的细微差异:检测到超阈值后,丢弃最后一轮 action-observation 对再进入摘要。这样可避免 tool observation 过长导致摘要本身被截断,使实际 RL 训练窗口 LRL ≈ 阈值 L。

实验结论

两个 benchmark:CodeGym(合成多轮函数调用,12800 训练 / 128 评测)和 BrowseComp-Plus(搜索任务,730 训练 / 100 评测)。奖励均为 RLVR 式可验证 0/1。

任务 / 算法 工作窗口 有效长度 训练后准确率 vs GRPO
CodeGym · GRPO 32K 32K 44.5%
CodeGym · SUPO 4K 32K (4K×8) 47.7% +3.2%
BrowseComp · GRPO 64K 64K 39.0%
BrowseComp · SUPO 64K 192K (64K×3) 53.0% +14.0%

关键发现:

54.7
CodeGym 平均
工具调用次数
19.2
BrowseComp SUPO
平均工具调用
BrowseComp 训练期
SUPO vs GRPO 调用量

有意思的细节

摘要质量真的在变好

训练前后对比同一任务的摘要输出,Agent 学会了保留任务关键状态而非泛泛计数:

CodeGym 摘要对比示例——训练后学会记录精确比较进度 (5,7)
【训练前】 <summary>…已比较的学生对计数增至 28。需要继续比较剩余学生对…</summary> 【训练后】 <summary>…compareHeights 调用已迭代到 (4,6),当前 pair count = 41。 下一步从 (5,7) 继续比较至 (11,12),完成后调用 done() 提交总数。</summary>

测试时可扩摘要轮数

训练时 BrowseComp-Plus 设 S=2(最多 3 条轨迹),测试时把 S 扩到 23,准确率从 53% 升到 60%。说明学到的摘要策略具有泛化性——不必在训练时就覆盖最大 horizon。

测试时摘要轮数扩展(BrowseComp-Plus, 64K 工作窗口) 60% 39% S=1 S=2(训练) S=5 S=23 → 60% S=11

Overlong mask 为什么不可或缺

去掉 overlong mask 后,训练动态出现摘要模式崩塌:越来越多 rollout 在单条轨迹内就结束(不触发摘要),条件成功率也降到 0。原因是没答完的 rollout 如果仍贡献梯度,会惩罚「摘要做得好但稍慢」的策略,迫使模型走捷径。

论文把这套框架定位为更一般 agentic workflow 的特例——未来可扩展到多 Agent、更复杂的 context management 和 test-time scaling pipeline。