背景
进入 2026 年,AI 编程助手成为开发热点。OpenCode 支持 GitHub Copilot、Claude、GPT-4 等多种模型,并能自动执行多步任务。
部分用户反馈在使用 OpenCode 调用 GitHub Copilot 企业订阅时,账单用量出现异常增长。例如,日常重构任务可能导致团队平均水平的数倍用量。
问题发现
典型场景
我:帮我重构 src/index.ts,优化类型定义
OpenCode:好的,我来帮你...
→ 读取文件 → 分析代码 → 修改文件 → 运行类型检查 → 修复错误 → 完成!
看似正常的自动化流程中隐藏了计费差异。
VS Code vs OpenCode 中的 GitHub Copilot
VS Code 的 GitHub Copilot Chat 体验如下:
我:帮我重构这个文件
VS Code Copilot:好的...(需要读取文件)
→ 弹出权限确认:[Allow] [Deny]
我:点击 Allow
VS Code Copilot:发现 3 个问题...
→ 弹出权限确认:[Allow] [Deny]
我:点击 Allow
VS Code Copilot:已完成!
此过程耗费 1 次对话额度,消耗约 0.3%。
使用 OpenCode 时情况不同,后台自动执行导致额度消耗显著增加,可能达到 1% 或 2%。
计费原理分析
GitHub Copilot 计费规则
经过分析,GitHub Copilot 按发送次数计费,而非 Token 数量。
- 点击 1 次'发送' = 计费 1 次
- 点击'Allow'执行工具 = 不计费(不算新发送)
VS Code 技术实现:单次 Streaming 连接
VS Code 使用 SSE (Server-Sent Events) 流式连接:
用户点击发送(标记为用户发起)
↓
建立 HTTP 连接(streaming)
↓
AI:'我需要读取文件...' [发送 tool-call 事件,连接保持打开]
↓
用户点击 Allow → 执行工具 [结果注入到同一个流中,无需新请求]
↓
AI:'发现 3 个错误...' [继续在同一个流中生成]
↓
AI:'需要修改文件...' [再次发送 tool-call 事件]
↓
用户点击 Allow → 执行工具 [结果继续注入到流中]
↓
AI:'已完成!'
↓
关闭连接
总计:1 次 HTTP 请求 = 计费 1 次 ✅
VS Code 优势:
- 整个对话过程只建立 1 次连接
- 工具执行结果通过流式传输注入,无需发起新请求
- 用户手动确认 Allow,系统识别为'人工批准的工具调用'
- GitHub Copilot 将整个过程视为 1 次用户发起的对话
OpenCode 技术实现:循环模式(Loop)
OpenCode 早期版本采用 Agentic Loop 架构:
用户点击发送(第 1 次请求:用户发起)
↓
═════ 循环 Step 1: 第 1 次 HTTP 请求 ═══
AI:'我需要读取文件...' finish = "tool-calls" 连接关闭
↓
权限检查 → 自动执行工具 → 获得结果
↓
═════ 循环 Step 2: 第 2 次 HTTP 请求 ═══
❌ 计费!
AI:'发现 3 个错误...' (AI 自动发起,但未标记)finish = "tool-calls" 连接关闭
↓
权限检查 → 自动执行工具 → 获得结果
↓
═════ 循环 Step 3: 第 3 次 HTTP 请求 ═══
❌ 计费!
AI:'已完成!' (AI 自动发起,但未标记)finish = "stop" 退出循环
总计:3 次独立的 HTTP 请求 = 计费 3 次 ❌
关键问题:每次循环都会关闭连接并发起新请求,导致 GitHub Copilot 将它们视为独立的用户请求。
同样的任务:
- VS Code:1 次计费(流式连接,始终是用户发起)


