前言
OpenCode 是一款支持 GitHub Copilot、Claude、GPT-4 等多种模型的 AI 编程助手,号称是 AI 编程助手的"终极形态"。
问题发现
在试用 OpenCode 时,发现其计费情况与预期不符。日常开发任务如重构文件,在 VS Code 中使用 GitHub Copilot Chat 通常只消耗少量额度,但使用 OpenCode 后,账单显示用量是团队平均水平的 3 倍。
计费原理分析
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 次计费(流式连接,始终是用户发起)
- OpenCode(修复前):3 次计费(每次循环 = 1 次新请求)
官方修复
v1.1.31 修复了 Subagent 计费问题
提交信息:
mark subagent sessions as agent initiated to ensure they dont count against quota (got the ok from copilot team)


