AutoCompact自学压缩时机与后续动作,SWE-bench绝对+9.2%

AutoCompact: Learning When to Compact Context in Long-Horizon Coding Agents

Xuan Zhang, Longtao Zheng, Cunxiao Du, Bo An, Xin Dong

cs.CL

2026-10-02

AutoCompact用judge在线纠偏再RL,把压缩时机和后续动作写进策略,Qwen3-Coder-30B在SWE-bench Verified上从30.4%提到39.6%。

这篇在解决什么

仓库级修 bug 要搜、读、改、测,轨迹很长。前面的假设、失败尝试和冗长工具输出很快过时。下一步只需要一份工作状态:已确认的结论、相关代码和仓库现状、还该干什么。

按长度触发的压缩要等窗口快满才动手,过时探索会堆到阈值,还可能压在证据没齐的半截阶段。主动压缩目前两条路:推理时用 rubric 提示(SelfCompact),或离线往完整轨迹里插入压缩调用再 SFT(SWE-Compressor)。rubric 没有训练信号。离线插入仍保留原来的后续动作,摘要该留什么、压缩之后该怎么接着干,都没被监督。

方法

给 agent 加可主动调用的 compact()。更早的历史换成带 Auto Context Summary 头的工作状态摘要,原始任务保留,从短上下文继续。

只写进 prompt 不够,基座几乎不会在触顶前主动 compact。数据收集用 GPT-5.5-Codex 当 judge,只看当前历史,在线纠三类决策:阶段收束了就该压;摘要必须保住结论、代码状态和下一步;压缩后的动作跟着摘要走,已记进摘要的搜索不要再跑。纠正立刻在环境里执行,后续从纠正后的状态接着滚。

379 个 SWE-rebench 任务上留下 1052 条纠偏轨迹:24% 监督触发,53% 监督工作状态,23% 监督压缩后续写。SFT 两轮,学习率 5×10^{-7}。SFT 只拟合局部纠正。接着在 SWE-Gym 上 GRPO,唯一奖励是最终 patch 过不过测试。compact() 改写前缀,轨迹按重写点切段,同一轨迹所有段共享 advantage。无 KL、无熵奖励、无压缩专用 shaping。

基座是 Qwen3-Coder-30B-A3B-Instruct,同一套终端 REPL。评测时去掉 judge。

结果

三次平均,无费用上限:

方法SWE-bench VerifiedSWE-PolyBench Verified
Base30.4%19.5%
Fixed Compaction28.8%18.6%
CompactionRL32.7%19.8%
AutoCompact-SFT32.2%21.7%
AutoCompact39.6%24.5%

固定长度压缩比不压更差。CompactionRL 相对 Base 只抬 2.3 和 0.3 个点。SelfCompact 是 31.7% 和 20.6%,SWE-Compressor 是 31.0% 和 20.1%。主动压缩都超过 Base:256K 装得下全历史,过时探索照样干扰。在线纠偏 SFT 比 SWE-Compressor 高 1.2 和 1.6 个点;RL 再加 7.4 和 2.8 个点,是大头。

每任务 $0.10 到 $4.00,256K(无轨迹触到强制压缩)和 16K 强制回退两套设置下提升都在。16K 高预算 AutoCompact 38.0%,Base 28.8%。同一 checkpoint 跳过 compact()、继续用旧历史,pass rate 在 $0.10 差 19.9 个点,$4.00 仍差 1.9 个点。

500 道 SWE-bench Verified 上,Base 几乎不主动 compact;SFT 后 44.3% 的任务会调用,RL 后 58.5%。摘要漏关键状态从 3.1% 降到 0.2%,漏下一步从 8.2% 降到 2.2%。SFT 摘要会写出「记录了未修好的 SyntaxError,建议收工」;RL 之后状态和下一步对得上,奖励只认后面动作成不成功。

为什么重要

脚手架暴露 compact(),模型把压缩时机、摘要、后续动作当成策略来学。长轨迹 coding agent 的上下文问题,核心是按任务进度丢掉过时探索。

数字绑在 Qwen3-Coder-30B 加这一套 REPL 上。换模型要重测。已经在用触顶才压的系统(论文点名 Codex、Claude Code)可以读成:阶段切完就主动压一轮,低预算更划算。

渐进改进,打在现有方法没监督的那一截:压缩之后怎么继续。

局限与存疑

RL 只在 32K token 序列上训,评测窗口是 256K。作者用所有预算都涨来辩护够用,没有同长度 RL 对照。

单脚手架。judge 纠偏没有人工一致性,也没有更弱 judge 消融。SWE-Compressor 对照只说轨迹数量相近,没给精确条数和任务重叠。摘要缺陷率靠关键词筛选。满窗口满预算时执行压缩只剩 1.9 个点,钱和窗口都宽时这笔收益很薄。没有更强闭源 agent 对照,也没有平均压缩次数、摘要长度、实际节省的 token。

术语

原文与代码

社区讨论

相关论文

全部论文解读