工程 / 工程
GitHub Copilot 如何在不牺牲质量的前提下大幅降低 AI 编程成本
GitHub Copilot 工程团队近期发布了一篇深度技术文章,详细介绍了他们在不降低任务完成质量的前提下,如何系统性地降低 AI 编程 Agent 的运行成本。文章的核心观点是:以单次工具调用的 token 数量作为效率指标是一个常见误区。如果压缩输出导致模型缺失关键信息,Agent 往往需要重新执行命令或重读文件,反而使整体 token 消耗更高、任务耗时更长。为此,团队围绕四个方向进行了独立 A/B 实验:选择性压缩重复性噪声输出、移除不再被使用的行号格式前缀、精简系统指令,以及在后台预先完成检索工作以减少额外调用步骤。每项改动均先经过离线基准测试验证,再通过线上受控实验确认效果,最终在不影响用户体验的前提下实现了可观的成本节省。
在 AI 编程 Agent 的成本优化领域,一个直觉上看似合理的做法是:压缩每次工具调用返回的输出内容,从而减少 token 消耗。GitHub 团队对开源工具 RTK(Rust Token Killer)进行了评估,该工具会在 Agent 读取 shell 输出之前对其进行截断。测试结果却出乎意料——当被省略的内容对任务至关重要时,模型会重新打开原始输出或重新执行命令来补全所需信息,这些恢复步骤反而带来了更多的上下文传递和额外轮次,导致整体 token 消耗高于未压缩时的水平。
这一发现促使团队重新定义效率目标:不是减少单次工具调用的 token,而是在不让模型重复工作的前提下,移除真正无用的内容。为此,团队开发了一套选择性输出压缩策略。分析显示,安装、构建、测试和代码检查的输出往往包含大量重复噪声,而源代码类输出和任意命令结果则更可能包含 Agent 所需的关键信息。基于此,团队制定了三条规则:源代码类输出(如 cat、git diff)原样保留;搜索结果在不丢失内容的前提下重新组织;仅对节省效果显著的重复性噪声进行压缩。
早期版本的压缩策略过于激进,导致模型频繁重读原始输出,反而增加了端到端成本并降低了任务成功率。例如,团队最初对 git diff 输出也进行了压缩,但基准测试显示 Agent 会反复打开原始文件以恢复丢失信息,该过滤规则随即被移除。最终发布的版本经过多轮评估与迭代,保守性并非设计目标,而是评估结果自然收敛的方向。在离线测试中,触发压缩的任务未检测到统计显著的成功率下降,Agent 极少主动打开已保存的原始输出;线上实验中,平均成本小幅下降,质量指标未出现实质性回归。
另一项成本优化来自对文件查看工具的改造。此前,Agent 使用 view 工具读取文件内容时,每一行都会被自动添加行号前缀。这一设计源于早期文件编辑工具依赖行号定位修改位置的需求,但当前的编辑工具已改为通过匹配周围代码来定位,行号前缀实际上已无任何作用。尽管单个前缀体积微小,但在每次文件读取、每一行内容上累积,整个会话中的浪费相当可观。移除行号前缀后,离线基准测试中模型推理成本下降约 5%,任务成功率和编辑失败率均未出现变化。
线上实验进一步验证了这一改动的实际效果:Copilot CLI 用户的每日平均模型推理成本下降约 3%,质量与满意度指标均未检测到实质性回归。这意味着开发者的上下文窗口中有更多空间留给真正有价值的代码内容,而非冗余的格式标记。这四项改动共同揭示了一个更普遍的工程原则:AI Agent 的效率优化必须以完整任务为单位进行评估,任何局部指标的改善都需要在全局视角下加以验证,否则极易陷入「本地最优、全局更差」的陷阱。
要点
- 单次工具调用的 token 数量是错误的效率指标,压缩输出若导致模型重复工作,整体成本反而更高。
- 选择性输出压缩需区分内容类型:源代码类输出应原样保留,仅对可预测的重复性噪声进行压缩。
- 移除已无实际用途的行号格式前缀,使 Copilot CLI 线上用户的每日模型推理成本降低约 3%。
- 所有效率改动均须经过离线基准测试与线上 A/B 实验双重验证,确保质量指标不出现实质性回归。
- AI 编程 Agent 的优化应以完整任务为单位衡量,而非聚焦于单个工具调用的局部表现。
原始标题:How we make AI coding more cost efficient without sacrificing task quality
本文由 DataHub 基于公开来源整理,用于信息发现与摘要阅读;具体事实、数据和后续更新以原始来源为准。