背景
进入 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 次计费(流式连接,始终是用户发起)
- OpenCode(修复前):3 次计费(每次循环 = 1 次新请求)
官方修复方案
v1.1.31 修复 Subagent 计费问题
官方在 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 功能,主任务的循环仍会计费!
成本对比
修复前:
主任务: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
}
}
}
格式 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
}
}
}
// ⚠️ 旧写法(仍可用,但不推荐)
{
"agent": {
"build": {
"maxSteps": 10
}
}
}
注意:如果同时配置了 steps 和 maxSteps,OpenCode 会优先使用 steps 值。
调整主任务配置(辅助策略)
如果确实需要在主任务中操作,可以通过配置减少循环次数:
// opencode.json
{
"agent": {
"build": {
"steps": 10
}
},
"permission": {
"read": "allow",
"glob": "allow",
"edit": "ask",
"bash": "ask",
"task": "allow"
}
}
关键配置说明:
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% |


