目录
前言
OpenCode作为开源agent支持自定义模型、并原生适配几乎所有模型厂商,subagent又做的很好,因此是博主使用最频繁的agent之一(另一个是codex)。最近gpt-5.6系列取消5h限额后速度很慢,于是一直沉迷于使用opencode做多模型编排:
比如这里使用gpt-5.6-sol high做主会话模型进行任务编排,调研、实施、检查派发子代理使用grok-4.5,这样会快很多,上下文也会更加干净,能有效保证模型注意力,并且效果也更好。
但是OpenCode自定义provider时并不支持websocket开关,默认通过 HTTP SSE 调用模型。不过对于完全反代 Codex Responses API 的服务,可以复用OpenCode 内置的 Codex WebSocket 适配器,让主对话请求通过 WebSocket连接上游。
你的自定义Provider要完全兼容 OpenAI Responses WebSocket 协议,比如我这里用的就是自己的Sub2API反代,配置时也打开了WS协议。
操作
很简单,最关键的配置不是显示名称,而是 provider ID 必须使用 openai,不能使用自定义名,因为内置 Codex 插件只绑定 providerID = “openai”。显示名称可以继续写成 Sub2API 或其他自定义名称。
同时,SDK 包必须是:
"npm": "@ai-sdk/openai"
不要使用:
"npm": "@ai-sdk/openai-compatible"
后者走的是 Chat Completions 兼容路径,默认使用 /chat/completions 和 SSE,无法触发 Codex Responses WebSocket 适配。
示例配置
注意将下方高亮内容改为你自己的
{
"$schema": "https://opencode.ai/config.json",
"agent": {},
"autoupdate": false,
"small_model": "openai/gpt-5.4-mini",
"mcp": {},
"provider": {
"openai": {
"models": {
"gpt-5.6-sol": {
"name": "gpt-5.6-sol",
"limit": {
"context": 353000,
"output": 64000
},
"variants": {
"low": {
"reasoningEffort": "low"
},
"medium": {
"reasoningEffort": "medium"
},
"high": {
"reasoningEffort": "high"
},
"xhigh": {
"reasoningEffort": "xhigh"
},
"max": {
"reasoningEffort": "max"
},
"ultra": {
"reasoningEffort": "ultra"
}
}
},
"gpt-5.6-terra": {
"name": "gpt-5.6-terra",
"limit": {
"context": 353000,
"output": 64000
},
"variants": {
"low": {
"reasoningEffort": "low"
},
"medium": {
"reasoningEffort": "medium"
},
"high": {
"reasoningEffort": "high"
},
"xhigh": {
"reasoningEffort": "xhigh"
},
"max": {
"reasoningEffort": "max"
},
"ultra": {
"reasoningEffort": "ultra"
}
}
},
"gpt-5.6-luna": {
"name": "gpt-5.6-luna",
"limit": {
"context": 353000,
"output": 64000
},
"variants": {
"low": {
"reasoningEffort": "low"
},
"medium": {
"reasoningEffort": "medium"
},
"high": {
"reasoningEffort": "high"
},
"xhigh": {
"reasoningEffort": "xhigh"
},
"max": {
"reasoningEffort": "max"
},
"ultra": {
"reasoningEffort": "ultra"
}
}
},
"name": "Sub2API",
"npm": "@ai-sdk/openai",
"options": {
"apiKey": "你的api key",
"baseURL": "https://sub.telyra.top/v1"
}
}
},
"tools": {
"webfetch": true
}
}
~/.opencode/opencode.json
OpenCode 创建新会话时,会先发送一次标题生成请求。Codex WebSocket 插件会主动让 title请求走 HTTP SSE,这时候你必须配置一个”small_model”,如上方绿色高亮。否则会默认调用gpt-5.4-nano,如果失败,后续主模型会正常对话但是无法走WS。
然后显式设置环境变量:
export OPENCODE_EXPERIMENTAL_WEBSOCKETS=true
此时启动opencode才会开启WebSocket。
然后测试成功:
可以看到如上面所说title模型走的流式,但不影响主模型走WS
踩坑
一
如果本机之前保存过 OpenAI OAuth 凭据,可能会出现:
Token refresh failed: 403
可以先删除:
opencode auth logout openai
否则 OpenCode 可能优先读取:
~/.local/share/opencode/auth.json
而不是使用配置文件里的 API Key。
二
对于Windows桌面版用户,只按照上面配置时,API Key只写在上述配置文件的形式内,那OpenCode 本地凭据库里没有 openai 条目,内置插件可能不会调用 auth loader,WebSocket fetch 也就不会安装。Issue #29843 · anomalyco/opencode
你需要在设置-提供商-查看更多提供商这里,再一次填入你的上游密钥(和配置文件一样即可)。
此时发送对话,测试成功走WS: