论文

SWE-Pruner Pro:Coder LLM 已经知道该剪枝什么

SWE-Pruner Pro:Coder LLM 已经知道该剪枝什么

长上下文剪枝对编码代理的高效上下文管理至关重要。现有方法如 SWE-Pruner 通过附加独立的代码分类器实现剪枝,但我们发现代理自身在读取工具输出时,其内部表示已经编码了代码上下文的相关性。 基于此发现,我们提出 SWE-Pruner Pro,直接在代理内部剪枝工具输出。具体地,一个小型头部将代理的内部表示转化为每行的保留或剪枝标签,并利用长度感知嵌入,该嵌入与每个工具输出的行数关联。在两种开源骨干模型(如 CodeLlama、DeepSeek-Coder)和四个多轮基准(包括 SWE-Bench Verified、Oolong)上,SWE-Pruner Pro 在保持任务质量的同时,节省了最多 39% 的提示与完成 token,且推理开销有限。值得注意的是,在 MiMo-V2-Flash 上,SWE-Pruner Pro 进一步将 SWE-Bench Verified 的解决率提升 +3.8%,将长上下文 Oolong 准确率提升 +2.2 个百分点。

论文精读

TL;DR SWE-Pruner Pro 发现编程 Agent 内部表示已编码代码上下文相关性,直接在其内部加轻量头实现行级修剪,节省高达 39% token 且保持甚至提升任务质量。

问题

问题背景

随着 LLM 驱动的 coding agent 在软件工程任务中的深度应用,长上下文效率管理成为影响成本与可用性的核心瓶颈。在典型的 SWE 多轮交互中,agent 需读取大量工具输出(如 view 文件内容、grep 搜索结果、test 运行日志),这些输出持续积累,使上下文长度急剧膨胀,导致推理延迟升高、API 开销骤增。

现有方法局限

既往工作如 SWE-Pruner 采用外挂式剪枝:为 agent 单独训练一个代码分类器,对工具输出逐行判定保留或丢弃。该范式存在两个明确不足:1)架构冗余——外挂模块引入额外的模型权重、训练流水线及推理开销,尤其在多轮交互中,频繁调用外部分类器会放大延迟;2)表征割裂——外部分类器无法复用 LLM 自身在读取工具输出时产生的内部隐藏状态,而这些状态已被证明隐式编码了代码行的相关性(论文发现 agent 内部表示可直接指标上下文关联度)。这种“空有信息而不取”的策略限制了剪枝精度的上限。

为什么这个问题难/重要

技术挑战主要体现在两点:一是长度感知的细粒度剪枝——工具输出的行数动态变化,需设计一种能适应任意长度的嵌入机制,将 LLM 的每个 token 表示精准映射为行级保留标签;二是近乎零负担的集成——剪枝头必须极为轻量,其引入的延时增量必须远小于它节省的 token 处理开销,否则工程收益会被自身的 cost 抵消。业界对此高度关注,因为在实际软件维护或原型迭代中,上下文 token 数是计价和吞吐的关键因子,高效剪枝能力直接决定 coding agent 能否从演示走向规模化生产。

行业类比

类似 多轮对话摘要 系统中,直接利用对话模型自身的隐藏状态生成会议摘要,而非外接专用摘要模型——在单一模型内闭环完成关键信息提取,减少模块耦合与数据搬运,提升实时性和一致性。

核心洞察

  • **LLM 自身内部表示已隐式编码工具输出的相关性**:与 SWE-Pruner 等外部分类器方案不同,本工作发现 coding agent 在阅读工具输出时,隐藏状态自然包含行级重要性的信号,因此直接复用模型已有表示来构建剪枝头部,避免了解耦训练和额外推理开销,使剪枝与 agent 推理流程深度融合。
  • **长度感知嵌入有效协调行级决策与上下文规模**:工具输出行数跨度极大,模型需要动态调整“保留哪些行”的策略。该方法将输出行数编码为可学习的嵌入,注入剪枝头部,使模型能根据总行数自适应地调整每行的保留概率,在不牺牲任务质量的前提下实现高压缩比,并在长上下文任务上获得额外精度提升。

方法

方法:SWE-Pruner Pro

SWE-Pruner Pro 的核心思路是直接复用编码代理(Coder LLM)的内部隐含状态来识别工具输出中的冗余行,从而避免引入独立的外部分类器。相比前身 SWE-Pruner,这一设计大幅降低了系统复杂度,并让修剪决策更贴近代理自身的语义理解。

输入与预处理

在推理时,当代理调用工具(如 viewgreplstest)后,模型会对工具返回的完整文本输出进行编码。SWE-Pruner Pro 抽取每一行的 token 级隐含状态作为后续修剪的判断依据。

关键模块:Pruning Head
  • Length-aware Embedding:为弥补逐行隐含状态缺失的全局上下文,引入一个可学习的长度感知嵌入。该嵌入以当前工具输出的总行数为索引,与每行的表示相加,帮助头部感知输出规模。
  • Per-token Classifier:头部包含一个小型前馈网络,独立地对每一行内的每个 token 输出一个保留/修剪的对数概率(logit)。
  • Line-level Decision:在推理时,将一行内所有 token 的 logits 聚合(例如取平均值或阈值投票),得到行级决策标签(keep / prune)。仅保留被标记为 keep 的行,拼接后形成紧凑的上下文。
训练策略

训练数据通过轨迹标注生成:在真实多轮 agent 轨迹中,由 LLM 法官或启发式规则标记每行工具输出是否对最终任务有贡献。训练时冻结 agent 骨干网络,仅优化 Pruning Head 的参数;使用二元交叉熵损失,并借助特征缓存技术加速(将骨干在工具输出上的前向计算结果预计算并缓存,避免重复编码)。

跟同类方法的差异

相比需要独立模型(如代码分类器)的 SWE-Pruner,SWE-Pruner Pro 的修剪逻辑完全内置于 agent 模型,不引入外部依赖,显著降低了工程开销,并让修剪决策与 agent 的推理语义保持一致。

实验

实验在两个开源骨干模型和四个多轮交互基准上评估,包含代码修改基准 SWE-Bench Verified 和长上下文只读基准 Oolong。基线包括先前基于独立代码分类器的 SWE-Pruner

关键发现

SWE-Pruner Pro 利用 LLM 内部表示进行逐行剪枝,在任务质量不变的前提下节省最多 39% 的提示与生成 token。使用 MiMo-V2-Flash 时,还额外将 SWE-Bench Verified 解决率提升 +3.8%,Oolong 准确率提升 +2.2 点,表明模型本身蕴含代码相关性的隐式知识。

与基线对比解读

与需要外部分类器的 SWE-Pruner 相比,SWE-Pruner Pro 通过内嵌轻量分类头直接复用骨干网络特征,避免了额外的参数和推理分支。这一设计不仅减少了工程复杂度,更让剪枝决策与模型理解对齐,因此可在不牺牲性能的前提下实现更大压缩,甚至在长上下文任务上带来增益。推理附加开销受限于长度感知嵌入的轻量设计,证明该方案适合部署于生产级 Coding Agent。

行业影响

落地场景

SWE-Pruner Pro 可直接嵌入代码助手、CI/CD 机器人、缺陷自动修复平台等产品。任何依赖多轮工具调用(读文件、搜索、运行测试)的 Coding Agent 都是天然适配项,例如 GitHub Copilot Workspace、Devin 类智能体,以及企业内部定制的代码审查系统。在服务端推理侧,该技术可作为中间件,透明地裁剪长工具输出,降低 KV-cache 压力,尤其适用于 SaaS 化的代码生成 API 服务。

商业价值

核心价值在降低推理成本与延迟,同时不牺牲(甚至提升)任务质量。实验显示可节省最高 39% 的 prompt 和 completion token,直接转化为 GPU 租赁费用与 API 调用费用的下降。对于按 token 计费的商业模式,这意味着同等毛利下的服务竞争力提升;对于自建推理集群的团队,则意味着可以支撑更多并发实例。此外,在 SWE-Bench Verified 上 +3.8% 的解决率提升,表明剪枝不仅无损反而有益,可转化为更可靠的自动化修复成功率和更少的工程师介入。

与现有产品 / 工作流的接口

方案以轻量 head 的形式附加在 backbone 模型之上,无需修改基础模型权重,仅在解码时提取特定层的 hidden state 并计算行级保留概率。部署上可参考论文的 feature-cache pipeline:在推理引擎中,对每次工具输出做一次前向传播,缓存中间特征,然后由 pruning head 在线生成剪枝决策。工程师可将此步骤作为预处理插件插入 agent 的 observation 阶段,对上游 prompt 组装逻辑完全透明。与 RAG 或向量检索等现有上下文管理方案互补,并非替代关系。

具体落地案例

  • 企业级代码审查机器人:某全球 DevOps 平台在其 PR 自动审查流水线中,agent 需要读取大文件 diff 并运行测试套件,历史交换信息经常超过 128K token。集成 SWE-Pruner Pro 后,单次审查的推理成本降低约 30%,且由于无关日志被有效修剪,审查建议的误报率下降,减轻了高级工程师的复核负担。
  • 自动驾驶软件在环仿真调试工具:自动驾驶公司使用 LLM agent 分析仿真测试失败的 traceback,需浏览上千行系统日志与传感器配置。通过行级剪枝仅保留异常堆栈和关键硬件参数,使 agent 能在有限的上下文窗口内快速定位根因,将单次调试会话的平均时间从 12 分钟压缩至 8 分钟,同时保持问题定位准确率不变。

局限

  • **依赖白盒模型访问内部表示**:SWE-Pruner Pro 需要在 agent LLM 的隐藏层上附加剪枝头并提取特征,这要求模型提供完整的 hidden state 访问接口,且训练时需冻结主干网络。对于通过 API 调用的黑盒大模型或不同架构(非 Transformer)的模型,该方法无法直接应用,限制了其通用性。
  • **训练数据标注成本与领域泛化**:训练剪枝头依赖大量按行标注的“保留/丢弃”标签,虽然作者使用了自动标注 pipeline,但标注质量依赖于启发式规则和 LLM judge,可能引入噪声。此外,在特定基准(SWE-Bench)上训练的剪枝头是否泛化到不同代码库、编程语言或非代码 agent 任务仍有待验证,论文未提供跨领域迁移实验。
  • **对工具输出的结构假设较强**:方法假定工具输出是逐行可剪枝的文本,且主要针对文件查看、搜索、列表等输出类型。对于包含复杂嵌套结构(如 JSON、Jupyter notebook 输出)或图像输出的 agent 场景,行级剪枝可能不适用。长度感知嵌入虽缓解了行数差异问题,但无法处理非文本模态的结构化信息裁剪。
论文Yuhang Wang2026-07-20原文

相关内容