GitHub Copilot 降本实践——不牺牲任务质量
GitHub Copilot 降本实践——不牺牲任务质量
原文链接:https://github.blog/ai-and-ml/github-copilot/how-we-make-ai-coding-more-cost-efficient-without-sacrificing-task-quality AIHOT 收录页:https://aihot.virxact.com/items/cmtkfkfvl03garobqyr0vwpth 作者:Erik Kristensen(GitHub)· 来源:GitHub Blog 原文发布时间:2026-09-02(北京时间 09-03 02:00)· 收录时间:2026-09-03
核心观点
单次交互的 token 数量不是效率指标。目标不是「用更少的 token」,而是「调用适量的上下文推进任务」——简洁但缺信息的工具响应反而会引发额外调用或重复劳动,让任务更慢更贵。因此优化目标是最终任务结果,而非工具调用本身。
所有改动遵循同一流程:先在智能体编码基准上离线评估,最有前景的再经受控在线实验验证后上线。示例来自 GitHub Copilot CLI,其余产品(Copilot 应用、代码审查)共用同一测试框架。
四项降本改动
1. 选择性压缩工具输出(成本约 -5.5%)
- 分析发现:安装/构建/测试/lint 输出多为重复性噪声 → 可压缩;类源码输出和任意命令结果更可能含智能体所需信息 → 保持原样。
- 早期版本过激进(曾压缩 git diff),基准任务显示智能体被迫重开原始输出恢复信息,最终移除了该过滤。
- 最终三路策略:任意/源码输出原样保留;搜索结果重组但不丢匹配;重复性噪声选择性压缩,同时保留完整原文 + 提供恢复路径。
- 恢复路径同时是安全机制和评估信号:追踪智能体是否重开保存原文、重跑命令、重复探索——频繁恢复即说明压缩器删掉了有价值内容。
- 结果:离线任务无统计显著的成功率回退,智能体极少打开保存的原文;在线实验平均成本略降、质量指标无实质回退。
2. 移除 view 工具行号前缀(线下推理 -5% / 线上用户日均 -3%)
- 行号前缀是早期编辑工具定位修改目标用的,当前工具改为匹配周围代码,已无用处,却仍附着在每次文件读取上、在会话期间持续累积。
- 移除后无需给模型加新指令、无需恢复信息来源、无需额外决策——「文件内容原封不动到达模型」,是最理想的一类改动。
- 行号在 diff 和短片段里仍保留价值,只是不该出现在每次文件读取上。
3. 压缩 task-tool 提示词(每轮 -1300 token / 每活跃小时标准化成本 -2.9%)
- 任务工具的指导说明分散在工具描述、schema、智能体定义、系统指令和配套工具里,不断累积。
- 用元提示循环(Copilot 迭代地改写自己的提示词)把提示词压缩约一半,配合针对性行为测试逐个校验要保留的行为。
- ⚠️ 踩坑:首次在线实验发现离线评估漏掉的回归——压缩把「谨慎的并行指导」改写成了硬性调度策略,导致独立自定义智能体被串行执行,立即停实验。
- 修复:用一句话取代原允许/拒绝列表——「独立智能体可以并行运行;请考虑副作用。」——把并行与否的决策权交还给模型,行为测试全部通过。
- 教训:提示词行为需要测试。没被测试覆盖的行为,可能被更短的提示词无声移除。
4. 后台任务完成直接交付结果(AI Credits 用量约 -2.3%)
- 背景:智能体常在后台并行跑长命令(如跑 3 分钟的构建)和子智能体调查,完成时框架唤醒模型并通知,模型无需傻等。
- 旧行为(敲门但不给包裹):通知里不含已完成的结果,只告知”任务完成了” → 模型必须额外花一轮工具调用去取回框架已收到的输出,取回后还要再花一轮处理;1 个 shell 命令 + 1 个子智能体 = 4 次模型调用(各”请求一次 + 处理一次”),多个任务相近时间完成时这种绕路反复发生。
- 新行为(敲门直接把包裹递上):框架把符合条件的完成通知批处理,直接把已完成的结果按”工具结果”格式附进通知一并交付 → 两份结果一次模型调用同时处理(4 次 → 1 次);对仍在运行的任务,显式读取行为不变。
- 关键认知:省的不是结果本身——交付时不压缩、不摘要、不扣留任何内容,结果与以前完全一致;省的是”取回结果的往返轮次”(retrieval detour)。
- 连带收益:每减少一次无谓的取回调用,就少一次把完整会话上下文重新发给模型,这部分 token 一并省下(平均约 -2.3% AI Credits)。
方法论沉淀(五条经验)
- 局部度量是陷阱:RTK(Rust Token Killer)类工具压缩 shell 输出,单次响应变短,但信息缺失时模型重开原文/重跑命令,交互轮次和携带上下文反而更多——局部省 token、全局更贵。「每次工具调用的 token 数」是错误优化目标。
- 压缩噪声、保留有用信息:先问「在不让模型重复劳动的前提下,哪些内容可以移除」。
- 先删格式、再删信息:行号前缀这类纯格式开销是最干净的优化点。
- 压缩提示词不能压缩意图:行为要有测试覆盖,回归要在真实工作流里用在线实验验证。
- 改动必须在其运行的工作流中衡量:一个工作流省 token 的改动可能在另一个推高成本(例:精简文件工具指令在代码审查有效,在 CLI 在线实验反而推高成本,未上线;而移除行号前缀 + 选择性压缩输出在代码审查各自再降约 5% 每次审查 prompt token)。
一句话结论
这些改动都没有让模型变得更聪明,它们只是移除了模型本不需要做的工作。