一句话定位

CompactionRL 把 context compaction 从推理时 heuristic 变成 RL 中可训练的 policy action:当 long-horizon agent 轨迹接近 context limit 时,由同一个模型生成 summary、重建上下文继续执行,并把 execution tokens 与 summary tokens 共同用最终任务 reward 优化。摘要明确称该方法已部署到 open GLM-5.2 (750B-A40B) 的 RL pipeline。

团队归属确认

  • 作者:Yujiang Li、Zhenyu Hou、Yi Jing、Jie Tang、Yuxiao Dong;单位标为 Tsinghua University,脚注说明前三位作者工作发生在 Z.AI internship
  • 与 GLM-5.2 关系:论文摘要写明 CompactionRL “is thus deployed in the RL pipeline for training the open GLM-5.2 model (750B-A40B)”。
  • 因此归档为 GLM-5.2 团队/清华-Z.AI 长程 agent RL 支撑论文,主题是 context compaction 训练,而非 GLM-5.2 主模型卡。

问题设定

long-horizon coding / terminal / web agent 会不断产生 reasoning、tool call、observation、修正计划。完整 history 很快撞上 context limit。只扩大 context 有两个问题:成本高;长上下文不等于有效利用,lost-in-the-middle 和长序列利用率下降仍存在。

推理时常见方案是 context compaction:把旧历史总结成 summary,再用 system + original task + summary + recent k turns 继续执行。但在 RL 里,summary 不是普通缓存;它决定后续所有 action 能看到的信息。因此任务成功同时依赖 execution policy 和 compaction policy。

方法拆解

1. rollout collection 中触发 compaction

交互历史定义为:

h_t = (s, u, z_1, ..., z_t)
z_i = (a_i, o_i)

其中 s 是 system prompt,u 是原始用户任务,a_i 是 assistant response,o_i 是环境 observation。论文把 assistant-observation pair 当 atomic step,避免 tool call 和 observation 被 compaction 拆开。

当剩余 context 低于阈值时触发:

C - |h_t| < T_comp

随后追加固定 summarization instruction q_sum,由同一 policy 生成 summary:

S_t ~ pi_theta(. | h_t ⊕ q_sum)

再重建上下文:

h_bar_t = system ⊕ resume_template(S_t) ⊕ recent k steps

默认保留最近 k=2 个交互 step,必要时降低 k 以适配 context budget。

2. summary tokens 进入 RL objective

完整 rollout 被切成 segment:

tau = (sigma_1, ..., sigma_K)

segment 分为 execution segment 和 summarization segment。summary 不是外部 summarizer 生成,而是同一个 trainable policy 生成,并纳入 RL loss。每条 rollout 只用最终 task reward R(tau),该 reward 分配给同一 rollout 内全部 trainable segments。

作者刻意不设计单独 summary-quality reward,因为“摘要看起来完整/流畅”不等于“对解决代码任务有用”。实际关键可能是文件路径、报错、失败命令、patch 状态、测试结果等细节。

3. 为什么不用 GRPO

compaction 会把一个 rollout 切成不定数量 segment。GRPO 假设每 prompt 固定 group 的完整 rollout,用组内 reward 做归一化;compaction 后该假设破裂:

  • 如果每个 segment 当样本,G 个 rollout 变成 sum K_g 个 segment,compaction 次数多的 rollout 被重复计权。
  • 如果仍按完整 rollout 做 group normalization,又得不到 execution / summary segment 级 advantage。

因此 CompactionRL 使用 PPO + critic,而不是 group-wise advantage estimator。这与 SAO 的判断一致:复杂 agent RL 中 critic-free group-relative 方法在异步、在线、compaction 场景下不再自然。

4. Token-Level Loss Normalization

segment 数量和长度差异很大,若按 segment/sample 平均,触发更多 compaction 的 rollout 会权重更高。CompactionRL 按 batch 中所有 generated assistant tokens 归一化:

rho_{s,i}(theta) = pi_theta(y_{s,i} | x_{s,i}) / pi_old(y_{s,i} | x_{s,i})
 
L_pi = - 1/|M| * sum_{(s,i) in M}
        min(rho_{s,i} * A_hat_{s,i},
            clip(rho_{s,i}, 1-eps, 1+eps) * A_hat_{s,i})

这修正了 compaction 引入的 segment-count / length bias。

5. Cross-Trajectory GAE

若每个 segment 独立算 GAE,并把最终 reward 放在每个 segment 末尾,早期 summary/action 会被错误地认为离最终 outcome 很近,导致 over-credit。CompactionRL 先算 segment 内 local GAE:

A_loc_{s,i} = sum_l (gamma lambda)^l * delta_{s,i+l}
delta_{s,i} = r_{s,i} + gamma V(x_{s,i+1}) - V(x_{s,i})

再按当前 segment 后续还有多少 optimized tokens 折扣:

N_>s = sum_{j>s} n_j
A_hat_{s,i} = (gamma lambda)^{N_>s} * A_loc_{s,i}

直觉:越早的 summary/action 距离最终任务结果越远,credit 应该折扣更多。它是 full compacted trajectory credit assignment 的近似修正。

实验结论

模型与环境:

  • GLM-4.7-Flash 30B-A3B,context 64k。
  • GLM-4.5-Air-SFT 106B-A30B,context 80k。
  • 训练数据:SWE-Dev;RL 框架:slime。
  • 评估:SWE-bench Verified 200-task random subset,Terminal-Bench 2.0 full set。
  • agent scaffold:Harbor + Terminus-KIRA。
  • compacted evaluation 最多 3 次 compaction,即 ×4 effective budget。

主结果:

  • GLM-4.7-Flash:
    • SWE-bench Verified compacted:base 50.5,RL without compaction 48.0,CompactionRL 56.0
    • Terminal-Bench 2.0 compacted:base 13.4,RL without compaction 12.4,CompactionRL 20.2
  • GLM-4.5-Air:
    • SWE-bench Verified compacted:base 59.8,RL without compaction 62.5,CompactionRL 66.8
    • Terminal-Bench 2.0 compacted:base 21.4,RL without compaction 23.6,CompactionRL 24.5

重要现象:CompactionRL 不一定提升 single-window evaluation。30B 在 SWE single 下从 base 47.5 降到 43.7,但 compacted 从 50.5 升到 56.0。这说明它确实是 compaction-enabled execution 的专用训练,禁用 compaction 会造成 train-test mismatch。

Ablation 读法

  • 固定 execution agent,只换 summary agent,SWE-Verified 从 49.0 到 55.5,说明 summary 质量本身可带来 6.5 个点差异。
  • 只暴露 compacted histories、但 mask 掉 summary loss,不如完整 CompactionRL;说明 summary tokens 必须进入 RL objective。
  • 去掉 token-level loss:GLM-4.5-Air 80k×4 下 SWE 66.8 60.0,Terminal 24.5 21.3,是最大退化。
  • 去掉 cross-trajectory GAE:SWE 66.8 63.0,Terminal 24.5 22.5。

结论:CompactionRL 的收益不只是“推理时多续几段”,而来自训练时同时修正 summary policy、segment 权重偏差、跨段信用分配

局限 / 追问

  • SWE-bench Verified 只用 200 random subset,和 public baselines 的 full benchmark 数字不可直接横比。
  • evaluation 只报 2 runs;agent benchmark 方差通常较大。
  • summary prompt / resume template 对效果影响很大,但正文未给完整模板。
  • Cross-trajectory GAE 仍是近似,无法完全表达 summary 改变 state representation 后对后续 trajectory distribution 的长期影响。
  • CompactionRL 专门面向 test-time compaction;若产品场景有时启用、有时禁用 compaction,可能需要 mixed training 或路由策略。

对 GLM-5.2 的意义

GLM-5.2 blog 中提到 long-horizon 任务因 compaction 被切成多个子轨迹,group-wise GRPO 不再适配,因此改用 critic-based single-rollout PPO,并对 compact trajectory 做 token-level loss。CompactionRL 正是这条变化背后的详细算法论文,解释了 GLM-5.2 为什么需要 summary 参与 RL + token-level normalization + cross-trajectory GAE

原始链接

一手源存档(sources/)