技术摘要:SWE-Pruner Pro
问题陈述
在多轮交互环境中运行的编码智能体(Coding agents)在与代码库交互过程中会积累大量的工具输出(例如 cat、grep、ls、python 执行日志)。这些输出通常包含显著的冗余,消耗了大部分的单次轨迹(per-trajectory)Token 配额,并触发长上下文退化问题。现有的上下文剪枝方案分为两类:
- 通用型压缩: 如 LLMLingua2 或 Selective Context 等方法,根据固定指标(如困惑度、句法结构)对 Token 进行评分。这些方法无法适应智能体不断变化的特定任务焦点。
- 任务特定型剪枝: 先前的研究如 SWE-Pruner 虽然以智能体的意图为条件进行剪枝,但需要一个外部评分模型以及一个显式的“目标提示(goal-hint)”查询,智能体必须在每一轮都生成该查询。这引入了额外的开销和延迟。
这两种方法都将剪枝信号视为一种需要被外部重构的量,忽略了智能体的骨干模型(backbone model)在处理工具输出时,其实已经将其内部表示中编码了相关性信息。
方法论:SWE-Pruner Pro
SWE-Pruner Pro 提出直接从智能体骨干模型的内部隐藏状态(hidden states)中读取剪枝信号,从而消除了对外部评分模型或显式“目标提示”查询的需求。该方法直接运行在智能体的推理循环内部。
核心机制
- 内部表示利用: 当智能体读取工具响应 (rt) 时,冻结的骨干模型执行标准的预填充(prefill),为每个 Token 生成最后一层隐藏状态 (hi)。SWE-Pruner Pro 将一个轻量级的剪枝头(pruning head)附加到这些现有状态上。
- 剪枝头架构:
- 长度感知嵌入(Length-Aware Embedding): 一个以响应总行数 N 为条件的学习嵌入 e(N),被广播并叠加到每个隐藏状态上。这使得模型能够根据响应长度调整其剪枝策略(例如,对于每一行都至关重要的短输出,采取更保守的策略)。
- 非线性分类器: 一个小型前馈网络(LayerNorm + 两个 Linear-GELU-Dropout 块)将增强后的隐藏状态映射为“保留或剪枝”的逻辑值(logit)。这种非线性对于解决在线性探测实验中观察到的表示空间重叠问题是必要的。
- 决策聚合: Token 级别的逻辑值通过在每一行内进行多数投票,从而产生用于整行的二元保留/剪枝决策。
- 训练策略:
- 数据: 该头部在 22,609 条多轮轨迹上进行训练,这些轨迹由 Claude Sonnet 4.6 标注了逐行的保留/剪枝标签。
- 损失函数: 作者采用了每样本平衡焦点损失(per-sample balanced focal loss)。不同于在全局范围内平衡的标准焦点损失,该方法在每个样本内部分别计算“保留”和“剪枝”Token 的损失,并以相等权重进行平均。这确保了具有极端保留率(例如,仅保留 3% 的行)的样本能对目标函数做出同等贡献,防止模型过拟合到平均保留率(约 30%)上。
- 推理集成: 该头部在预填充阶段于“服务器内(in-server)”运行。它复用为工具响应生成的隐藏状态,仅增加一次小规模头部的正向传播。剪枝后的响应 (r~t) 会替换下一轮上下文中的原始响应,而当前轮次的生成仍然会对完整的原始响应进行注意力计算。
核心贡献
- 信号发现: 本文证明了智能体骨干模型的内部表示已经编码了工具输出的行级重要性。一个简单的线性探测达到了 0.83 的 AUC,证明了无需外部重构即可获取“保留或剪枝”信号。
- 架构: 引入了 SWE-Pruner Pro,这是一个利用长度感知嵌入和每样本平衡焦点损失,直接从冻结的骨干模型状态中做出精确剪枝决策的轻量级头部。
- 效率: 该方法避免了额外的模型调用和显式的目标提示查询,在增加有限推理开销的同时实现了显著的 Token 削减。
实验结果
该方法在四个多轮基准测试(SWE-Bench Verified、SWE-QA、SWE-QA-Pro 和 Oolong)上,针对两个开源骨干模型(MiMo-V2-Flash 和 Qwen3-Coder-Next)进行了评估。
- Token 节省: 在评估的七种方法中,SWE-Pruner Pro 是唯一在所有设置下都能减少端到端 Token 使用量的方法。
- 在 SWE-QA-Pro (Qwen3-Coder-Next) 上实现高达 39% 的削减。
- 在长上下文基准 Oolong (MiMo-V2-Flash) 上实现 30% 的削减。
- 相比之下,其他方法(如 LLMLingua2)在长上下文任务中由于开销问题,有时会导致 Token 使用量增加高达 190%。
- 任务质量:
- SWE-QA/Pro: 保持任务质量在未剪枝基线的窄区间内(例如,在 SWE-QA 上仅有 +0.02 的分值变化)。
- Oolong: 在 MiMo-V2-Flash 上将准确率提升了 +2.2 点。
- SWE-Bench Verified: 在 MiMo-V2-Flash 上,它在减少 7.4% 输入 Token 的同时,将解决率提升了 +3.8%。在 Qwen3-Coder-Next 上,它实现了最大的输入 Token 削减(-13.5%)以及最小的解决率下降(-1.2%)。
- 延迟: “服务器内”头部在总生成时间中增加了约 15.0% 的累计墙钟时间(wall time),这一成本通过后续轮次中缩减的上下文规模得到了抵消。
意义与主张
论文声称,上下文剪枝所需的“相关性判断”并非一个必须通过额外查询或模型来诱导的外部信号,而是已经在骨干模型被动读取观测结果时形成的内部表示中存在。
- 范式转移: 与构建在智能体“周围”的剪枝方法(需要外部模型或显式查询)不同,SWE-Pruner Pro 只是简单地“读取”智能体已经形成的信号。
- 实际影响: 这种方法解决了先前工作中观察到的质量-压缩权衡问题,允许进行激进的剪枝(高达 39% 的 Token 节省),且不会降低任务性能,在某些情况下甚至通过缓解长上下文退化来提高性能。
- 泛化性: 虽然主要在以 Python 为中心的编码任务上进行评估,但该流水线是语言无关的,并已在自然语言长上下文任务(Oolong)中展示了保留 Token 节省和质量的能力,表明该范式可以跨领域迁移。
作者总结道,对于编码智能体而言,管理上下文最有效的路径是利用骨干模型自身的内部状态,从而避免外部评分机制带来的延迟和复杂性。