opencode 接入中转站:自定义供应商怎么写,地址为什么要带 /v1
按 opencode 官方的供应商文档整理:用 /connect 存下 key,再在 opencode.json 里加一个自定义供应商,就能让 opencode 走中转站。讲清三种接口格式各用哪个包、地址要带 /v1、key 怎么不写进文件,以及找不到模型、404 等问题怎么查。
本文根据公开分享整理,本站尚未实测。操作前请对照文末的原始来源。
opencode 是开源的终端编程助手,可以接多家模型。让它走中转站的办法是在配置文件里加一个自定义供应商,写明地址、用哪种接口格式、有哪些模型。
和 Claude Code、Codex 相比,opencode 有一处正好相反,先记住:它的地址要带 /v1。
如果你还没弄清中转站是什么、有哪些风险,先读中转站是什么和用中转站有什么风险;选站可以看中转站排行榜。
开始之前:从中转站拿到三样东西
| 需要什么 | 说明 |
|---|---|
| 接口地址 | 带 /v1 的完整地址,例如 https://你的中转站地址/v1 |
| 模型名 | 中转站的模型页上写的名字,要一字不差 |
| API key | 在中转站的控制台创建,多数站只显示一次 |
还要弄清你要用的模型在中转站上走哪种接口,这决定下一步用哪个包。
1选对接口格式
配置里的 npm 一项指定用哪个 AI SDK 的包,也就是用哪种接口格式和中转站通信。官方文档的说明:
| 中转站提供的接口 | npm 填什么 |
|---|---|
OpenAI 兼容的 /v1/chat/completions |
@ai-sdk/openai-compatible |
OpenAI 的 /v1/responses |
@ai-sdk/openai |
Anthropic 原生的 /v1/messages |
@ai-sdk/anthropic |
前两行是官方文档“自定义供应商”一节写明的。第三行是酷站AI 的文档用来接 Claude 模型的写法;官方文档里给内置的 Anthropic 供应商改地址时,示例地址是 https://api.anthropic.com/v1,同样带 /v1。
官方的说法是,大多数模型服务都提供 OpenAI 兼容的接口,所以拿不准时先试第一种。
2存下 key
在 opencode 里运行 /connect,一直往下翻到 Other:
- 输入一个供应商 id,比如
myrelay。这个 id 后面要写进配置文件,起个好记的。 - 输入中转站的 API key。
这一步只是把 key 存起来,存在 ~/.local/share/opencode/auth.json。opencode 会提示你:还需要在 opencode.json 里配置这个供应商。
3写配置文件
官方文档的写法是在项目目录下创建或修改 opencode.json。想对所有项目生效,酷站AI 的文档用的是全局配置文件:Mac 和 Linux 上是 ~/.config/opencode/opencode.json,Windows 上是 %USERPROFILE%\.config\opencode\opencode.json。
下面是接 OpenAI 兼容接口的例子,myrelay 要和上一步输入的 id 一致:
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"myrelay": {
"npm": "@ai-sdk/openai-compatible",
"name": "My Relay",
"options": {
"baseURL": "https://你的中转站地址/v1"
},
"models": {
"模型名": {
"name": "显示用的名字"
}
}
}
}
}
文件已经存在时,把 provider 这一段合并进去,不要整个覆盖。
各项的含义:
| 配置项 | 作用 |
|---|---|
npm |
用哪个包,见第一步 |
name |
界面上显示的名字 |
options.baseURL |
中转站的接口地址 |
models |
这个供应商有哪些模型。键是中转站的模型名,要用别的模型就照样再加一项 |
options.apiKey |
可选。没有用 /connect 存 key 时在这里给 |
options.headers |
可选。中转站要求额外的请求头时用 |
不想把 key 写进文件
如果跳过了第二步、要在配置里给 key,不要直接写明文。官方支持从环境变量里读:
"options": {
"baseURL": "https://你的中转站地址/v1",
"apiKey": "{env:RELAY_API_KEY}"
}
然后在 shell 里设置 RELAY_API_KEY。项目目录下的 opencode.json 通常会被提交进仓库,明文的 key 写在里面等于公开。
告诉 opencode 模型的上限
内置的供应商会自动拿到每个模型的上下文长度,自定义供应商没有。可以在模型下面补上,opencode 才知道上下文还剩多少:
"模型名": {
"name": "显示用的名字",
"limit": {
"context": 200000,
"output": 65536
}
}
具体数字以中转站或模型官方的说明为准,上面的是官方文档示例里的值。
4选模型并验证
保存后重新启动 opencode,运行 /models,你的供应商和模型会出现在列表里,选中它,发一句话。能正常回答就是接通了。
也可以在配置文件的顶层直接指定默认用哪个模型,写法是“供应商 id/模型名”:
"model": "myrelay/模型名"
三个容易错的地方
这一节来自酷站AI 的接入文档,是它针对自己的服务写的,但前两条的道理对别的中转站也成立。
地址漏了 /v1。 会返回 404。这一点和 Claude Code 相反:Claude Code 自己会加 /v1,opencode 不会。
直接改内置的 Anthropic 供应商。 内置供应商带着一张自己的模型表,中转站的模型名如果不在表里,opencode 会在本机直接报 Model not found,请求根本没有发出去。稳妥的做法是像上面那样新建一个供应商。
没有指定 small_model。 opencode 会用一个小模型给会话起标题。不指定的话,它可能选到中转站没有的模型,标题生成失败。这不影响对话,但会留下报错。在顶层加一行就行:
"small_model": "myrelay/模型名"
常见问题
| 现象 | 检查什么 |
|---|---|
/models 里看不到你的供应商 |
配置文件里的 id 和 /connect 时输入的是否一致;JSON 的括号和引号有没有写对;改完有没有重启 |
404 |
地址有没有带 /v1;npm 选的接口格式中转站是否支持 |
Model not found,而且中转站的日志里没有这次请求 |
请求没发出去。模型名没有写进这个供应商的 models 里,或者用的是内置供应商 |
401 或提示 key 无效 |
key 填错、被删或停用;中转站按渠道发 key 的话,这把 key 的渠道是否包含这个模型 |
| 每次对话都多一条失败的请求 | 多半是生成标题的小模型不存在,按上一节设置 small_model |
接上之后
- 验证拿到的是不是真模型。 能回答不等于给你的是它声称的模型。用同一把 key 到 Veridrop 检测一次,背景见中转站模型降智是怎么回事。
- 其他工具的接法:Claude Code 接入中转站、Codex 接入中转站。
- key 等同于钱。不要发到群里,不要截图,不要提交进仓库;怀疑泄露就到控制台删掉重建。