从发现问题到深度分析,一篇文章搞懂 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 认可的标准机制:
typescript
// 检查是否是 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+
bash
# 检查当前版本
opencode --version
# 升级到最新版本
npm update opencode-ai@latest
# 或
brew upgrade opencode
充分利用 Subagent 功能
升级后,可以放心使用 @general 等 subagent:
bash
# 推荐:让 AI 自动拆分子任务
opencode run "重构整个项目,使用 @general 分析最佳实践"
# 效果:
# - 主任务分析需求(计费 1 次)
# - 创建多个 subagent 子任务(不计费)
# - 所有子任务的工作(不计费)

关键原则:尽量让 AI 自己创建子任务,而不是在主任务中做所有事情。
方法 1:使用 @ 语法手动委托
bash
# ❌ 避免:在主任务中执行多步骤操作
你:帮我重构 src 目录下的所有文件
# ✅ 推荐:让 AI 创建 subagent 处理
你:帮我重构 src 目录,使用 @general 分析并逐个文件处理
内置 Subagent:
@general:通用多步骤任务(推荐用于复杂重构)@explore:代码探索和分析(只读,不会修改代码)
方法 2:让 AI 自动判断并委托
bash
# 添加提示词,引导 AI 使用 subagent
你:帮我重构这个项目。如果任务复杂,请使用 @general 创建子任务
OpenCode 会自动识别:
- 如果任务需要多个步骤
- AI 会自动调用
task工具创建 subagent
方法 3:通过配置强制使用 Subagent
jsonc
// opencode.json
{
"command": {
"refactor": {
"template": "重构 {input},使用最佳实践",
"subtask": true, // 强制作为子任务执行
"agent": "general"
}
}
}
使用方式:
bash
opencode /refactor src/utils/
# 自动创建 subagent,不计费 ✅
方法 4:创建自定义 Subagent
支持两种配置格式:
格式 1:JSON 配置 (推荐用于简单配置)
jsonc
// opencode.json
{
"agent": {
"reviewer": {
"mode": "subagent",
"model": "anthropic/claude-sonnet-4-20250514",
"description": "专门用于代码审查的子代理",
"prompt": "你是一个专业的代码审查专家...",
"steps": 50 // 子代理内部最多 50 步(不计费)
}
}
}
格式 2:Markdown 配置 (推荐用于复杂 prompt)
markdown
<!-- .opencode/agent/reviewer.md -->
---
mode: subagent
model: anthropic/claude-sonnet-4-20250514
description: 专门用于代码审查的子代理
steps: 50
---
你是一个专业的代码审查专家。审查代码时:
1. 检查潜在的 bug
2. 提出性能优化建议
3. 评估代码可读性
使用方式:
bash
你:使用 @reviewer 审查这个文件
# 自动作为 subagent 执行,不计费 ✅
📌 关键字段说明:steps vs maxSteps
重要:OpenCode 配置中:
- ✅
steps:正确字段(OpenCode v1.1+ 推荐) - ❌
maxSteps:已弃用字段(仅为向后兼容保留)
jsonc
// ✅ 正确写法
{
"agent": {
"build": {
"steps": 10 // 限制最多 10 个循环步骤
}
}
}
// ⚠️ 旧写法(仍可用,但不推荐)
{
"agent": {
"build": {
"maxSteps": 10 // 会自动转换为 steps
}
}
}
注意 :如果同时配置了 steps 和 maxSteps,OpenCode 会优先使用 steps 值。
调整主任务配置(辅助策略)
如果确实需要在主任务中操作,可以通过配置减少循环次数:
jsonc
// 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 版本编写,未来版本可能有所变化。文中提到的成本估算仅供参考,实际费用以官方为准。
觉得有用?点个「关注」吧! 👍
让更多人避开这个坑!