编码代理跑长任务时,上下文只增不减:翻代码、跑搜索、改文件、跑测试,轨迹里堆满过期的假设、失败的尝试和冗长的工具输出。眼下主流 harness——论文里点名的 Codex 和 Claude Code——的做法是"到线才压":上下文逼近窗口上限时自动压缩。10 月 1 日上传 arXiv 的 AutoCompact(新加坡管理大学、南洋理工与哈佛团队)把这个决策搬进模型策略本身:让代理自己学会什么时候压、留什么、压完怎么接着干。

到线才压,问题不在"压",在"何时"

长度触发的设计把压缩绑在上下文长度上,而不是任务进度上。论文的观察很直接:过期的探索会一直堆积到阈值触发,而触发点可能正落在一个还没了结的阶段中间——此时的证据恰恰最不该被摘要掉。也有让模型自己决定何时压缩的先行工作:推理时用 rubric 的自压缩代理、离线往完整轨迹里插压缩调用的 SWE-Compressor、以及把压缩塞进 RL 循环的 CompactionRL。但论文指出一个共同盲区:这些方法都不监督"压缩之后的第一步动作"——工作状态摘要写得再对,代理也可能回头重搜已经记录过的内容。

裁判在线纠错,改完再执行

AutoCompact 给代理加了一个可主动调用的 compact() 动作,数据收集阶段用 GPT-5.5-Codex 当在线裁判:每一步审查提案动作,压缩时机不对、摘要漏了关键状态、压完第一步跑偏,都当场改写——被改过的输出直接进环境执行,轨迹从纠正点继续生长。这与事后标注有本质区别:纠错会真实改变后续状态。在 379 个 SWE-rebench 任务上,团队收集了 1,052 条裁判纠正轨迹,其中 24% 管时机、53% 管摘要、23% 管后续动作。先 SFT 初始化,再在 SWE-Gym 上用 GRPO 做联合优化——奖励只有"最终补丁是否通过测试"这一个二元信号,不给压缩加任何辅助奖励。

数字:两个基准、两档窗口、全线提升

基座是 Qwen3-Coder-30B-A3B-Instruct。SWE-bench Verified 通过率 39.6%(较基座 +9.2 个百分点),SWE-PolyBench Verified 24.5%(+5.0);RL 在 SFT 之上再加 7.4 与 2.8 个百分点。两个设定值得注意:256K 窗口下没有一条轨迹触发强制压缩,SFT 版仍然胜过全量历史基座——说明完整历史即使放得下也不是最优输入;16K 窗口下所有方法共用同一长度触发兜底,训练出的主动压缩依然领先。收益覆盖每任务 $0.10 到 $4.00 的全部推理预算,且预算越紧优势越大——同权重模型跳过 compact() 执行后,$0.10 档通过率掉 19.9 个百分点。行为层面,主动压缩的使用率从 SFT 版的 44.3% 升到 RL 后的 58.5%,摘要漏关键状态的比例从 3.1% 降到 0.2%,漏下一步动作从 8.2% 降到 2.2%。

摘要自洽:一个新维度的短板

案例对比刺眼:django-13809 上,SFT 版摘要如实记录了未解决的语法错误,下一步却写"直接收尾"——状态与动作互相矛盾,最终以 SyntaxError 失败;RL 版摘要与后续动作一致,任务通过。作者称之为"摘要自洽性"。局限也直说:RL 训练用 32K 序列,评测却是 256K 上下文,靠短训长用的迁移撑住收益。

所以呢?上下文管理正在从 harness 的管道工程,变成模型可训练的策略行为——"何时压缩"本身就是能力的一部分。论文只验证了一个 scaffold,但方向清楚:还在到线硬压的商业编码代理,等于把一个可学习的决策交给了阈值。

参考:arXiv:2610.02163(arxiv.org/abs/2610.02163)