OpenCode 接入 CCSub:opencode.json 的 provider 和 baseURL 怎么写
OpenCode 接第三方 Claude / OpenAI 接口:在 opencode.json 里加自定义 provider,baseURL 填 https://www.ccsub.net/api/v1(Anthropic 方式也要带 /v1)。附 /connect 和报错排查。
复制即用的配置
把下面三项填进工具里即可。API Key 在控制台「API 密钥」页面创建。
- baseURL
https://www.ccsub.net/api/v1(两种协议都填这个,必须带 /v1)- apiKey
sk-你的CCSub密钥(也可以用 /connect 保存)- model
ccsub/claude-sonnet-5(格式是 provider/型号)
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"ccsub": {
"npm": "@ai-sdk/anthropic",
"name": "CCSub",
"options": {
"baseURL": "https://www.ccsub.net/api/v1",
"apiKey": "{env:CCSUB_API_KEY}"
},
"models": {
"claude-sonnet-5": { "name": "claude-sonnet-5" }
}
}
},
"model": "ccsub/claude-sonnet-5"
}model 可填 claude-sonnet-5 等,全部可用型号 ID 见 型号列表。 还没有 Key? 先注册账号。
配置步骤速览
- 1
安装 OpenCode 并创建 CCSub Key
按 OpenCode 官网的方式安装,然后在 CCSub 控制台「API 密钥」页面创建一把 sk- 开头的 Key。
- 2
把 Key 放进环境变量
在 ~/.zshrc 里加 export CCSUB_API_KEY="sk-你的密钥" 并重开终端;也可以稍后在 OpenCode 里用 /connect 保存。
- 3
编辑 opencode.json
在 ~/.config/opencode/opencode.json 的 provider 里加一个 ccsub,npm 选 @ai-sdk/anthropic 或 @ai-sdk/openai-compatible,options.baseURL 填 https://www.ccsub.net/api/v1。
- 4
声明型号并设为默认
在 models 里列出要用的型号 ID,例如 claude-sonnet-5,再把顶层 model 设为 ccsub/claude-sonnet-5。
- 5
启动验证
在项目目录运行 opencode,发一句话,到 CCSub「使用记录」核对请求。
OpenCode 是一个开源的终端编程助手,模型接入走的是 Vercel AI SDK 的各个 provider 包,所以 Anthropic 协议和 OpenAI 协议都能接 CCSub。配置都写在一个 JSON 文件里,改完重启 OpenCode 即可。
配置文件在哪
- 全局配置
~/.config/opencode/opencode.json对所有项目生效,Windows 是 %USERPROFILE%\.config\opencode\- 项目配置
项目根目录/opencode.json和全局配置合并,同名字段以项目为准- Key 存储
~/.local/share/opencode/auth.json用 /connect 保存的 Key 放在这里
写法一:Anthropic 协议(调用 Claude 型号)
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"ccsub": {
"npm": "@ai-sdk/anthropic",
"name": "CCSub",
"options": {
"baseURL": "https://www.ccsub.net/api/v1",
"apiKey": "{env:CCSUB_API_KEY}"
},
"models": {
"claude-sonnet-5": { "name": "claude-sonnet-5" }
}
}
},
"model": "ccsub/claude-sonnet-5"
}
这里的地址要带 /v1,和 Claude Code 不一样。 @ai-sdk/anthropic 只会在 baseURL 后面拼 /messages,只有地址是官方的 https://api.anthropic.com 时才自动补 /v1。填 https://www.ccsub.net 会请求到 /messages,结果是 404。另外,如果没写 baseURL,它会去读环境变量 ANTHROPIC_BASE_URL——你为 Claude Code 设置的那个值不带 /v1,同样会出错。所以一定要在 options 里显式写上。
写法二:OpenAI 兼容协议(调用 GPT 型号)
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"ccsub-openai": {
"npm": "@ai-sdk/openai-compatible",
"name": "CCSub OpenAI",
"options": {
"baseURL": "https://www.ccsub.net/api/v1",
"apiKey": "{env:CCSUB_API_KEY}"
},
"models": {
"gpt-5.5": { "name": "gpt-5.5" }
}
}
},
"model": "ccsub-openai/gpt-5.5"
}
@ai-sdk/openai-compatible 会在 baseURL 后拼 /chat/completions。两个 provider 可以同时写在一个 provider 对象里,用 /models 在 OpenCode 里随时切换。
字段说明
- provider 下的键名(上面的
ccsub、ccsub-openai)就是 provider ID,可以自己起,后面引用型号时要用到。 {env:CCSUB_API_KEY}表示从环境变量读 Key。先在 shell 配置里加一行export CCSUB_API_KEY="sk-你的密钥",重开终端。models里列出你要用的型号 ID。model 可填claude-sonnet-5等,全部可用型号 ID 见 型号列表。每个型号还可以加limit(context和output),让 OpenCode 计算剩余上下文;不写的话它无法提示上下文快满了。- 顶层
model的格式是provider ID/型号 ID,例如ccsub/claude-sonnet-5。
两个 provider 一起用
上面两种写法可以合并进同一个 provider 对象:ccsub 用 @ai-sdk/anthropic 调用 Claude 型号,ccsub-openai 用 @ai-sdk/openai-compatible 调用 GPT 型号,两边的 apiKey 都引用同一个 CCSUB_API_KEY。顶层 model 选一个作为默认,会话里随时用 /models 切换。
顶层还可以加一个 small_model,同样写成 provider ID/型号 ID,OpenCode 会用它处理生成会话标题这类轻量任务。不写的话,OpenCode 会尝试在同一个 provider 里找一个更便宜的型号,找不到就用默认型号;这些请求同样会出现在 CCSub 的「使用记录」里。
改完 opencode.json 要重新启动 OpenCode 才会生效;如果启动时报配置错误,多半是 JSON 里少了逗号或引号,可以先用编辑器的 JSON 校验检查一遍。
不想把 Key 写进文件:用 /connect
在 OpenCode 里输入 /connect,选择 Other,输入 provider ID(必须和配置里的键名一致,例如 ccsub),再粘贴 Key。Key 会保存到 ~/.local/share/opencode/auth.json,这时配置里的 apiKey 可以删掉。用 opencode auth list 能查看已保存的凭证。
验证
在项目目录执行 opencode,发一句话,然后到 CCSub 控制台的「使用记录」里找这条请求。也可以用 CC Switch 管理 OpenCode 的供应商,它的预设里有 CCSub。需要 Claude Code 的写法见 Claude Code 接入教程。
常见报错和排查
404 或返回一段网页
原因:Anthropic 方式的 baseURL 只填了 https://www.ccsub.net,请求变成了 /messages;或者没写 baseURL,被环境变量 ANTHROPIC_BASE_URL 的值带偏了。
处理:在 options 里显式写 baseURL: https://www.ccsub.net/api/v1。
401 authentication_error
原因:{env:CCSUB_API_KEY} 引用的变量没有设置,或者 /connect 时输入的 provider ID 和配置里的不一致。
处理:echo $CCSUB_API_KEY 确认有值;/connect 输入的 ID 要和 provider 下的键名完全一样,可用 opencode auth list 检查。
404 Unknown model
原因:model 写成了显示名,或者没加 provider 前缀。
处理:写成 ccsub/claude-sonnet-5 这种格式,型号 ID 对照 /zh/models。
常见问题
Anthropic 方式的 baseURL 为什么要带 /v1?
OpenCode 的 @ai-sdk/anthropic 只会在地址后面拼 /messages,只有官方地址才会自动补 /v1。所以要填 https://www.ccsub.net/api/v1(或 https://www.ccsub.net/v1),不能像 Claude Code 那样只填域名。
用 @ai-sdk/anthropic 还是 @ai-sdk/openai-compatible?
两种都能接 CCSub。调用 claude- 开头的型号建议用 @ai-sdk/anthropic;调用 gpt- 开头的型号用 @ai-sdk/openai-compatible,它请求的是 /chat/completions。
Key 写在配置文件里安全吗?
更推荐用 {env:CCSUB_API_KEY} 引用环境变量,或者在 OpenCode 里执行 /connect 选 Other、输入 provider ID ccsub 后粘贴 Key,Key 会保存在 ~/.local/share/opencode/auth.json,不会进项目仓库。
项目里的 opencode.json 和全局配置哪个生效?
两份会合并,同名字段以项目里的 opencode.json 为准。Key 不要写进会提交到 Git 的项目配置。
model 应该填什么?
格式是 provider ID 加型号 ID,例如 ccsub/claude-sonnet-5。型号 ID 要先在 provider 的 models 里声明,全部可用型号 ID 见 CCSub 型号列表页。