OpenCode 与 GitHub Copilot 计费差异及优化实践
最近在使用 OpenCode 时遇到一个意外情况:明明只是让 AI 帮忙重构了几个文件,账单却突然涨了 3 倍。作为开发者,我们习惯依赖工具提升效率,但往往忽略了背后的计费逻辑。今天就来聊聊这个坑,以及如何正确配置以控制成本。
问题发现:自动化带来的'惊喜'
我之前的使用习惯是直接在 VS Code 里调用 GitHub Copilot Chat,体验很流畅。比如重构 src/index.ts,流程通常是:
- 发送请求
- 读取文件
- 分析代码
- 修改并运行检查
- 完成
在 VS Code 里,这一套动作下来,通常只消耗一次对话额度。但切换到 OpenCode 后,同样的任务,后台自动执行了多次循环,导致额度消耗激增。查看账单才发现,原来是因为计费机制的差异。
深入分析:为什么 OpenCode 更'烧钱'?
要理解这个问题,得先搞清楚 GitHub Copilot 的计费规则。它主要是按'发送次数'计费,而不是单纯按 Token 数量。
VS Code 的实现:单次流式连接
VS Code 使用的是 SSE (Server-Sent Events) 流式连接。当你点击发送后,建立一次 HTTP 连接,AI 在同一个连接中持续生成内容。即使中间需要读取文件或修改代码,只要用户点击允许(Allow),这些操作都被视为同一次请求的延续。
用户点击发送 → 建立 HTTP 连接(streaming)
↓
AI:'我需要读取文件...' [发送 tool-call 事件,连接保持打开]
↓
用户点击 Allow → 执行工具 [结果注入到同一个流中,无需新请求]
↓
AI:'已完成!'
↓
关闭连接
核心优势:整个对话过程只建立 1 次连接,无论中间交互多少次,都算作 1 次计费。
OpenCode 的实现:循环模式(Loop)
OpenCode 早期采用的是 Agentic Loop 架构。每次 AI 决定执行下一步(比如读取文件、修改代码),都会关闭当前连接并发起一个新的 HTTP 请求。
用户点击发送(第 1 次请求)
↓
Step 1: AI:'我需要读取文件...' → 连接关闭
↓
权限检查 → 自动执行工具 → 获得结果
↓
Step 2: AI:'发现 3 个错误...' → ❌ 计费!新请求
↓
权限检查 → 自动执行工具 → 获得结果
↓
Step 3: AI:'已完成!' → ❌ 计费!新请求
关键问题:每次循环都会关闭连接并发起新请求,GitHub Copilot 将它们视为独立的用户请求,导致同样的任务被计了 3 次费。
官方修复:Subagent 机制
好在官方很快意识到了这个问题。在 v1.1.31 版本中,针对 Subagent(子任务代理)功能进行了修复。
什么是 Subagent?
当你让 AI 处理复杂任务时,它可以自动创建子任务。例如重构整个项目,主任务负责分析,子任务负责具体模块的重构。
修复原理:添加 x-initiator: agent 标记
官方通过在 HTTP 请求中添加特殊 Header,标记为 AI 自动发起,从而避免重复计费。


