OpenCode 踩坑记:GitHub Copilot 按次计费?我的账单为何暴涨 3 倍!
从发现问题到深度分析,一篇文章搞懂 OpenCode + GitHub Copilot 的正确打开方式
🌟 前言:一个意外的"惊喜"

进入2026年,朋友圈和技术群里都在讨论一个新的AI开发工具 —— OpenCode,号称是 AI 编程助手的"终极形态",支持 GitHub Copilot、Claude、GPT-4 等多种模型,还能自动执行多步任务。
作为一个爱折腾的程序员,我立马下载试用。我有 GitHub Copilot 企业订阅,而且OpenCode还支持,用起来应该不花钱吧?
结果一周后,我收到了公司 IT 部门的"温馨提醒" 📧:
“您的 Copilot 使用量是团队平均水平的 3 倍,请注意合理使用…”
什么情况??我明明只是让 AI 帮我重构了几个文件而已!
于是,我开始了一场"破案之旅" 🕵️♂️…
🔍 第一步:发现问题
我用 OpenCode 做了什么?
很简单,就是一些日常开发任务:
我:帮我重构 src/index.ts,优化类型定义 OpenCode:好的,我来帮你... → 读取文件 → 分析代码 → 修改文件 → 运行类型检查 → 修复错误 → 完成! 看起来很正常对吧?但问题就出在这个"自动化"过程中。
VS Code vs OpenCode 中使用 Github Copilot:看似相同,实则不同
Github Copilot 和其他模型提供商不太一样,它是按次数计费,企业账号每月可使用300次 Cluade Sonnect 4/4.5 模型。
我以前用 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上Issue里也有很多讨论 OpenCode “烧token”的情况,让很多人望而却步。
💡 第二步:深入分析计费原理

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 次新请求)
怪不得我的用量是别人的 3 倍!
🎯 第三步:发现官方修复
正当我准备放弃 OpenCode 的时候,我在 GitHub 上发现了一个好消息!
官方在 v1.1.31 修复了 Subagent 计费问题
提交信息:
mark subagent sessions as agent initiated to ensure they dont count against quota (got the ok from copilot team) 发布时间:2026年1月21日(就在昨天!)
什么是 Subagent?
OpenCode 有一个强大的功能:子任务代理 (Subagent)
当你让 AI 完成复杂任务时,它可以自动创建子任务:
你:帮我重构整个项目 主任务(你发起): ├─ 分析项目结构 ├─ 创建子任务 1:重构模块 A (@general) ← Subagent ├─ 创建子任务 2:重构模块 B (@general) ← Subagent └─ 创建子任务 3:更新文档 (@general) ← Subagent 修复原理:添加 x-initiator: agent 标记
官方的修复非常巧妙,采用了 GitHub Copilot 认可的标准机制:
// 检查是否是 subagent session(有父任务)if(session.parentID){// 添加特殊 header,标记为 AI 自动发起 headers["x-initiator"]="agent"}这与 VS Code 的机制一致:
- VS Code:在 API 层面使用
requestInitiator参数标识请求来源 - OpenCode:在 HTTP 请求中添加
x-initiator: agentheader - 两者都是 GitHub Copilot 官方支持的标记方式
修复效果:
- ✅ 主任务(用户发起):正常计费
- ✅ 主任务的循环(修复前):每次循环都计费 ❌
- ✅ 主任务的循环(修复后):仍然计费(因为没有 parentID)
- ✅ 子任务(有 parentID):全部不计费 ✅
- ✅ 子任务中的所有 LLM 调用:不计费 ✅
注意:
修复主要针对 Subagent 功能,主任务的循环仍会计费!
看到这里,聪明的你可能想到了什么…我觉得还是打住吧,OpenCode 都没改,你觉得是为什么呢?有大神知道我在说什么的且尝试过的,还请告诉我结果🤞。
成本对比
修复前:
主任务: 1 次计费 ├─ 子任务 1: 5 次 LLM 调用 → 计费 5 次 ❌ ├─ 子任务 2: 3 次 LLM 调用 → 计费 3 次 ❌ └─ 子任务 3: 2 次 LLM 调用 → 计费 2 次 ❌ 总计: 11 次计费 修复后:
主任务: 1 次计费 ├─ 子任务 1: 5 次 LLM 调用 → 不计费 ✅ ├─ 子任务 2: 3 次 LLM 调用 → 不计费 ✅ └─ 子任务 3: 2 次 LLM 调用 → 不计费 ✅ 总计: 1 次计费(节省 90%!) 🛠️ 第四步:解决方案
立即升级到 v1.1.31+
# 检查当前版本 opencode --version # 升级到最新版本npm update opencode-ai@latest # 或 brew upgrade opencode 充分利用 Subagent 功能
升级后,可以放心使用 @general 等 subagent:
# 推荐:让 AI 自动拆分子任务 opencode run "重构整个项目,使用 @general 分析最佳实践"# 效果:# - 主任务分析需求(计费 1 次)# - 创建多个 subagent 子任务(不计费)# - 所有子任务的工作(不计费)
关键原则:尽量让 AI 自己创建子任务,而不是在主任务中做所有事情。
方法 1:使用 @ 语法手动委托
# ❌ 避免:在主任务中执行多步骤操作 你:帮我重构 src 目录下的所有文件 # ✅ 推荐:让 AI 创建 subagent 处理 你:帮我重构 src 目录,使用 @general 分析并逐个文件处理 内置 Subagent:
@general:通用多步骤任务(推荐用于复杂重构)@explore:代码探索和分析(只读,不会修改代码)
方法 2:让 AI 自动判断并委托
# 添加提示词,引导 AI 使用 subagent 你:帮我重构这个项目。如果任务复杂,请使用 @general 创建子任务 OpenCode 会自动识别:
- 如果任务需要多个步骤
- AI 会自动调用
task工具创建 subagent
方法 3:通过配置强制使用 Subagent
// opencode.json { "command": { "refactor": { "template": "重构 {input},使用最佳实践", "subtask": true, // 强制作为子任务执行 "agent": "general" } } } 使用方式:
opencode /refactor src/utils/ # 自动创建 subagent,不计费 ✅方法 4:创建自定义 Subagent
支持两种配置格式:
格式 1:JSON 配置 (推荐用于简单配置)
// opencode.json { "agent": { "reviewer": { "mode": "subagent", "model": "anthropic/claude-sonnet-4-20250514", "description": "专门用于代码审查的子代理", "prompt": "你是一个专业的代码审查专家...", "steps": 50 // 子代理内部最多 50 步(不计费) } } } 格式 2:Markdown 配置 (推荐用于复杂 prompt)
<!-- .opencode/agent/reviewer.md --> --- mode: subagent model: anthropic/claude-sonnet-4-20250514 description: 专门用于代码审查的子代理 steps: 50 --- 你是一个专业的代码审查专家。审查代码时: 1. 检查潜在的 bug 2. 提出性能优化建议 3. 评估代码可读性 使用方式:
你:使用 @reviewer 审查这个文件 # 自动作为 subagent 执行,不计费 ✅📌 关键字段说明:steps vs maxSteps
重要:OpenCode 配置中:
- ✅
steps:正确字段(OpenCode v1.1+ 推荐) - ❌
maxSteps:已弃用字段(仅为向后兼容保留)
// ✅ 正确写法 { "agent": { "build": { "steps": 10 // 限制最多 10 个循环步骤 } } } // ⚠️ 旧写法(仍可用,但不推荐) { "agent": { "build": { "maxSteps": 10 // 会自动转换为 steps } } } 注意:如果同时配置了 steps 和 maxSteps,OpenCode 会优先使用 steps 值。
调整主任务配置(辅助策略)
如果确实需要在主任务中操作,可以通过配置减少循环次数:
// opencode.json { "agent": { "build": { "steps": 10 // 限制最多 10 轮循环 } }, "permission": { "read": "allow", // 读取文件自动允许 "glob": "allow", // 搜索文件自动允许 "edit": "ask", // 修改文件需确认(重要!) "bash": "ask", // 执行命令需确认 "task": "allow" // 自动允许创建 subagent(推荐!) } } 关键配置说明:
maxSteps: 防止无限循环edit: "ask": 可以在关键步骤拒绝,提前结束循环task: "allow": 非常重要,允许 AI 自动创建 subagent
💪 总结与建议

关键要点
- 理解架构差异是关键
- VS Code:流式连接,1 次对话 = 1 次计费
- OpenCode:循环架构,每次循环 = 1 次计费
- Subagent 是 OpenCode 的成本优化利器
- v1.1.31 带来的变化
- Subagent 功能完全免费(有 parentID 的 session),充分利用时成本节省高达 90%
- 主任务的循环仍然计费(这是架构特性)
- Provider选择建议
- GitHub Copilot(按次):适合复杂长任务,会消耗大量token的任务。
- 其他按 Token 计费的:适合短任务,token消耗可控的任务。
写在最后
OpenCode 是一个强大的工具,但要用好它,理解计费原理至关重要。
通过这次"踩坑"经历,我学到了:
- 自动化是把双刃剑:省力但可能费钱
- 官方的更新很重要:v1.1.31 的修复太及时了
- 合理配置是关键:权限 + 步数限制 + subagent
现在,我的 Copilot 用量恢复正常了,开发效率却提升了不止一倍!
希望这篇文章能帮到同样遇到问题的你 🤝
📊 附:计费说明
1. GitHub Copilot 计费规则
| 场景 | 计费方式 | 说明 |
|---|---|---|
| 用户点击"发送" | ✅ 计费 1 次 | 触发主任务 |
| 点击 Allow/Deny | ❌ 不计费 | 不算新请求 |
| 主任务循环 (OpenCode) | ✅ 每次循环计费 | N 次循环 = N 次计费 |
| Subagent (v1.1.31+) | ✅ 不计费 | 官方修复 |
| Subagent 中的循环 | ❌ 不计费 | 所有操作都不计费 |
2. 其他提供商(按 Token 计费)
对于 OpenAI、Anthropic 等按 Token 计费的提供商:
示例:Tool Calls 占 88.9% 的请求
假设总共 10,000 tokens:
| 类型 | 占比 | Tokens | 成本 (GPT-4) |
|---|---|---|---|
| User | 3.3% | 330 | $0.01 |
| Assistant | 7.5% | 750 | $0.05 |
| Tool Calls | 88.9% | 8,890 | $0.27 |
| Other | 0.3% | 30 | $0.00 |
| 总计 | 100% | 10,000 | $0.33 |
结论:工具调用越多,成本越高!
3. 成本对比总结
同样的任务(含 3 个子任务):
| 工具 | 计费模式 | 修复前成本 | 修复后成本 | 节省 |
|---|---|---|---|---|
| VS Code Copilot | 按次 | 1 次 | 1 次 | - |
| OpenCode (主任务) | 按次 | 5-10 次 | 5-10 次 | 0% |
| OpenCode (Subagent) | 按次 | 15-30 次 | 1 次 | 90% ✅ |
| OpenAI GPT-4 | 按 Token | $1.50 | $1.50 | 0% |
| Anthropic Claude | 按 Token | $0.80 | $0.80 | 0% |
📚 参考资料
关于作者:一个热爱折腾的开发者,专注于 AI 工具在实际开发中的应用。如果你也在使用 OpenCode,欢迎留言交流!
声明:本文基于 OpenCode v1.1.31 版本编写,未来版本可能有所变化。文中提到的成本估算仅供参考,实际费用以官方为准。
觉得有用?点个「关注」吧! 👍
让更多人避开这个坑!