编程 GitHub Copilot 如何让 AI 编码更省成本:四项减少无效工作的优化

2026-09-07 06:13:24

GitHub Copilot 如何让 AI 编码更省成本:四项减少无效工作的优化

GitHub 官方博客发表文章,由 Erik Kristensen 和 Napalys Klicius 撰写,介绍 GitHub Copilot 为降低 AI 编码成本、提升任务质量做的四项优化。核心洞察:输出质量重要,但真正的效率来自快速、高效、带着正确上下文完成工作——单次交互的 token 数不是效率的有效度量。目标不是用更少的 token,而是调用恰到好处的上下文推动任务前进。本文基于 GitHub 官方文章,系统解读这四项优化及其评估方法。

核心洞察:局部指标陷阱

  • 常见做法是缩短每次工具调用的输出以降低 agent 成本
  • RTK(Rust Token Killer)等工具在 agent 读取前缩短 shell 输出
  • 评估发现:RTK 缩短部分响应,但当被省略的文本重要时,模型有时会重新打开原始输出或重跑命令来恢复所需信息
  • 这些恢复步骤增加了轮次并携带更多上下文:单个工具响应更短,但任务平均使用更多 token、耗时更长
  • "局部省 token,全局多花钱"

结论:每次工具调用的 token 数不是正确的优化目标。效率变更必须跨完整任务评估——从用户请求到最终结果。更有用的是:找出哪些内容可以移除而不会让模型重复工作。

四项优化

1. 压缩噪音,保留有用信息

目标:缩短重复输出,同时保留 agent 完成任务所需的上下文,避免重走步骤。

分析发现:

  • install、build、test、lint 输出常含重复噪音
  • 类源码输出和任意命令结果更可能包含 agent 需要的信息

基于此设计了选择性输出压缩器,并形成三部分策略:

  • 保留类源码和任意输出:cat、git diff、git show 和任意脚本原样返回
  • 重组搜索结果但不丢内容:grep 等工具的匹配和文件列表可更高效分组,同时保留每个结果
  • 选择性压缩重复噪音:install、build、test、progress 输出仅在节省显著时压缩

早期版本过于激进(如压缩 git diff 导致 agent 重新打开原始输出),最终版保守但有效。压缩时 agent 仍可通过直接恢复路径获取完整原文——这既是安全机制也是评估信号。

离线任务结果:输出压缩触发时无统计显著的任务成功率回归,agent 极少打开已保存的原始输出。在线实验:平均成本略有下降,跟踪质量指标无实质性回归。

2. 先移除格式,再移除信息

view 工具(agent 读取文件内容进入上下文)之前给每行加行号前缀。旧的文件编辑工具用行号定位更改,但当前工具改为匹配周围代码,不再使用行号。

  • 行号前缀很小,但跨每一行、每一次文件读取反复累积
  • 移除后:模型推理成本在离线基准中下降约 5%,成功率保持在预期波动内
  • 在线实验:平均每日每用户模型推理成本降低约 3%,质量和满意度指标无实质回归
  • 开发者获得更多上下文窗口空间用于工作本身

这是理想变更:无需给模型新指令、没有需要恢复的信息源、没有额外决策。文件内容原样到达模型。

3. 压缩提示词而不压缩意图

提示词携带塑造 agent 工作方式的指令,每轮都发给模型。Copilot 的 task 工具启动专用 agent 做并行工作,其指导分散在工具描述、schema、agent 定义、系统指令和配套工具中。

  • 元提示循环(meta-prompting):Copilot 迭代编写自己的提示词,将提示词减少约一半
  • Copilot 生成并改进更小的候选,定向行为测试检查要保留的需求
  • 第一次在线实验发现离线评估遗漏的回归:元提示循环把"谨慎的并行指导"改写为硬性调度策略,导致独立自定义 agent 串行运行——立即停止实验
  • 修复:把显式允许/禁止列表替换为一句话:"独立 agent 可以并行运行;考虑副作用"。该句更短、限制更少,把是否并行运行子 agent 的选择权交给模型

关键教训:提示词行为需要测试。如果行为未测试,更短的提示词可能在无人注意的情况下移除它。

最终结果:发布的提示词每轮减少约 1,300 个 task-tool 提示 token,对应每次会话总提示 token 减少约 1.8%,归一化每活跃小时成本降低 2.9%,测量的评估中无质量回归。

4. 直接交付后台工作结果,省去额外检索轮次

agent 常在后台运行独立工作(如长时 shell 命令并行子 agent 调查)。通知让 agent 继续,直到工作就绪而不消耗等待的工具调用。如果 agent 不显式等待任一任务,harness 在 shell 命令或子 agent 完成时唤醒模型并通知。

  • 之前通知不包含完成结果,agent 必须再花一轮检索 Copilot 已收到的输出
  • 多个任务接近完成时,这种绕路会重复
  • Copilot 现在批量合并符合条件的完成通知,直接在现有工具结果格式中交付完成结果
  • agent 可以带着所需信息继续,无需多花一轮重新请求

变更前:每个完成任务需要一次模型调用请求结果 + 一次处理;shell 命令和子 agent 意味着工作继续前需要四次模型调用。变更后:harness 批量合并两个完成并一起提供结果,单次模型调用即可处理两者。移除检索绕路还避免让完整会话上下文穿过不必要的调用。此变更将平均与 token 相关的使用(以 AI Credits 衡量)降低约 2.3%。

评估方法:在上下文中衡量变更

  • 一项在某个 Copilot 工作流中省 token 的变更可能在另一个中增加成本(例:更紧凑的文件工具指令在 code review 中表现好,在 Copilot CLI 在线实验中增加成本,未发布)
  • 所有变更先用 agentic 编码基准离线评估,再用受控在线实验验证
  • 行号前缀移除和选择性输出压缩各自在独立评估中让每次 review 平均提示 token 减少约 5%

总结

GitHub Copilot 的四项成本优化围绕一个核心原则:优化任务结果而非工具调用。局部指标陷阱说明缩短单次输出可能让任务整体更贵(恢复步骤带来更多轮次和上下文);四项优化分别是:选择性输出压缩(保留类源码输出、重组搜索结果、只压重复噪音)、移除无用的行号格式(零信息损失的 5% 推理成本下降)、元提示压缩(提示词减半但需行为测试保障——教训是"如果行为未测试,更短的提示词可能移除它")、后台结果直接交付(批量合并完成通知,省去检索轮次,token 使用降 2.3%)。方法论要点:所有变更先离线基准评估、再受控在线验证;同一变更在不同工作流效果可能相反(代码审查有效、CLI 反而增成本);恢复路径既是安全机制也是评估信号。对构建 AI 编码工具的团队,这套"跨完整任务衡量效率、保守压缩、行为测试、上下文感知评估"的方法可以直接借鉴。

来源:https://github.blog/ai-and-ml/github-copilot/how-we-make-ai-coding-more-cost-efficient-without-sacrificing-task-quality/

推荐文章

程序员茄子在线接单