卡内基梅隆 CliffCompaction:只截不改写,Terminal-Bench 成本砍半仍涨分

CliffCompaction: Cost-Efficient Compaction for Long-Horizon Coding Agents

Trang Nguyen, Eulrang Cho, Bingqing Chen, Tim Dettmers

cs.AI, cs.LG, cs.SE

2026-09-23

CliffCompaction 触发阈值后只截断工具调用和长输出,绝不改写,也不再压缩上次压缩结果。Kimi K2.6 在 Terminal-Bench 16K 预算下成功率 61.42%,成本约砍半;KernelBench 400 步达 3.58 倍加速。

这篇在解决什么

编码 Agent 一条轨迹可以吃掉上百万 token。上下文窗口有限,必须压缩;KV cache 读才是长会话里最贵的那一项,每次改上下文还会让前缀缓存作废、被迫重新 prefill。常见两条路都不干净。滑动窗口丢掉旧轮次,窗口一滑缓存就断。LLM 摘要能跨很多次压缩「记住」旧信息,但摘要套摘要会慢慢偏,模型还容易以为摘要已经够全,不再回读文件。

CliffCompaction 要的是可落地的前端压缩:训练无关、可塞进现有 harness、不另调辅助模型、尽量保住 KV 缓存。它主动放弃「整段历史随时能在上下文里召回」,把保真度放在覆盖面前面。

方法

上下文自由涨到阈值才压一次,中间完全不改,缓存可以一路复用。压的时候只截断或丢弃,绝不改写。工具结果超过 500 字符直接丢掉,短的留下(grep、退出码、短脚本输出往往有用且便宜)。工具调用收成签名:名字、路径、关键参数,内嵌的整文件内容删掉,因为文件还在仓库里,模型拿签名可以再调一次。思考文本截到 300 字符。系统提示和第一条用户任务全文保留,最近 K 轮原样留下。

下一轮压缩时,上一份压缩块整份扔掉,只压缩「上次压缩之后新长出来的活会话」。不会出现摘要的摘要。信息仍会间接往下传:新轮次是在上一份压缩块眼皮底下生成的,行为里带着残留影响。作者把这叫高 precision、低 recall:最近两扇窗口里的原文很干净,再往前的直接内容没有了。

Terminal-Bench 上未压缩时,工具结果占 token 的 56.0%,工具调用占 28.0%,合在一起 84%。砍这两类,是因为它们既最肥,又最容易靠再调用找回。实现上既改过 mini-swe-agent、OpenHands、Terminus-2,也做了脚手架无关的 API 代理,闭源的 Claude Code 也能接。

结果

SWE-bench Verified 上,中等阈值几乎不掉点。Kimi K2.6 全上下文 73.87%,32K 阈值 73.27%,16K 仍在 2 个百分点内。GLM 5.1、GLM 5 Turbo 在 16K 同样大约掉 2 个点。8K 是压力测试,掉得更明显,但不是断崖。OpenHands 上 32K 相对其原生 condenser:Kimi 71.30%→70.20% 且更便宜,GLM 5.1 71.93%→72.20%。

Terminal-Bench 2.0(Terminus-2)上,压缩有时比全上下文更高。Kimi K2.6 全上下文 59.16%、成本 0.40 美元;32K 和 16K 的 CliffCompaction 都是 61.42%,成本 0.24 / 0.19 美元。同一 16K 预算下,脚手架自带的摘要压缩只有 55.45%。GLM 5.1 全上下文 49.83%,16K 升到 54.33%,成本 0.54→0.27 美元。Terminal-Bench 2.1 上 GLM 5.3 Flash 接 Claude Code:约 45K 峰值时 CliffCompaction 76.69%,原生自动压缩 70.97%,默认 200K 是 73.03%。

测试时扩展被压到能算账的区间。Kimi K2.6 三条 16K 轨迹加学习选择器 Soft Group Verification,Terminal-Bench 2.0 实用分 69.7%、总花费 58.01 美元,对齐 Opus 4.7 的 69.4%,超过 GPT-5.3 Codex 的 64.7%(单次 64.63 美元)和 Opus 4.6 的 62.9%。相对单次全上下文,这是 +10.5 分、1.9 倍成本。未压缩的三条轨迹是 +4.8 分、3.0 倍成本、91.65 美元。两条 16K 轨迹 65.9%、38.67 美元。选择器特征含步数、工具调用和行重叠一类组内一致性,用另一模型的轨迹训练,交叉用。

KernelBench Level 3 上,无压缩会先撞 256K 窗口:L40S 上 98% 的 run 在中位 99 步就停,加速 1.30 倍。CliffCompaction(128K)200 步 2.23 倍、400 步 3.58 倍,正确率 94% / 96%,超过 2 倍加速的题目从 50% 升到 86%。GPT-5-mini 写 Triton、200 步 2.09 倍,对 AdaExplore 同设置的 1.78 倍。等花费下相对全上下文约 2.02 对 1.30 倍。对照滑动窗口、摘要、摘要+微压缩,CliffCompaction 是唯一在质量和费用两边都不掉队的:KernelBench 3.58 倍、每题 8.32 美元、候选 kernel 最少。

为什么重要

编码 Agent 的上下文税主要打在工具 I/O 和 cache 读上。不改写、不套娃压缩,听起来像偷懒,测下来比摘要更稳,因为模型不会把一份略偏的摘要当成完整记忆。缓存友好让「多开几条轨迹」从亏本变成能跟闭源旗舰比价。KernelBench 上一个通用压缩策略压过为 kernel 搜索特化的系统,说明长程优化缺的常常是「还能继续跑」,不是又一套外部记忆。API 代理能直接挂 Claude Code / Codex。

局限与存疑

8K 阈值会掉点,短任务收益有限。最低能用的阈值跟着脚手架走:系统提示和工具定义先占掉一块预算。实用测试时扩展靠的是学习选择器,不是无成本的 oracle;oracle 上 Kimi 三条 16K 是 74.2%,实用 69.7%。没和「训练模型自己管上下文」或外部记忆/RAG 比,作者写明没资源做。对比表里滑动窗口在短轨迹 SWE-bench 上略高,但比全上下文更贵。KernelBench 的 action 单元和搜索式基线不完全同口径,论文自己也标了。

术语

原文与代码

社区讨论

相关论文

全部论文解读