接入中转站的通用方法:三种接口、地址填到哪一级、怎么先验证
不管接哪个工具,改的都是接口地址、key 和模型名三样。本文讲清中转站常见的三种接口各是什么、同一个地址为什么有的工具带 /v1 有的不带,并列出各工具和 OpenAI、Anthropic SDK、LangChain 等框架的写法,以及怎么用 curl 先验证、报错怎么对照。
接入中转站的教程看起来每个工具都不一样,其实改的始终是三样:接口地址、key、模型名。出问题的地方也很集中,最常见的是地址多写或少写了一段。
这篇把通用的部分讲清楚:中转站提供的接口有哪几种、地址该写到哪一级、怎么在动工具之前先验证。读完再看具体工具的教程,就知道每一步是在做什么;遇到本站没有写的工具,也能自己配出来。
各工具的教程在使用指南的“接入你的工具”一组。还没弄清中转站是什么的,先读中转站是什么。
三样东西
| 是什么 | 从哪里来 | 常见的坑 |
|---|---|---|
| 接口地址 | 中转站的接入文档 | 写到哪一级因工具而异,见下文 |
| key | 中转站的控制台。有的站叫令牌 | 多数只显示一次;复制时带上了空格 |
| 模型名 | 中转站的模型页 | 要一字不差。有的站要求带厂商前缀,比如 openai/ |
模型名要特别留意:它只是你发给中转站的一个字符串,中转站拿它去决定把请求转到哪里。名字对上了,不代表背后就是这个模型,见中转站怎么掺假。
三种接口
工具和模型之间说的“话”有固定的格式,叫接口或协议。中转站常见的是三种:
| 接口 | 请求路径 | key 放在哪个请求头 | 谁在用 |
|---|---|---|---|
| OpenAI Chat Completions | /v1/chat/completions |
Authorization: Bearer <key> |
绝大多数工具和框架。常说的“OpenAI 兼容”指的就是它 |
| OpenAI Responses | /v1/responses |
Authorization: Bearer <key> |
OpenAI 较新的接口。Codex 只认这一种 |
| Anthropic Messages | /v1/messages |
x-api-key: <key>,另带一个 anthropic-version 头 |
Claude Code、Claude 桌面应用 |
三种的请求和响应格式都不一样,互相不通。所以接入之前要先对上两件事:工具说哪种,中转站提供哪种。
先看工具说哪种
有的工具只说一种,没得选:
- Claude Code 和 Claude 桌面应用接中转站时,只说 Anthropic Messages。 中转站只有 OpenAI 兼容接口的话,接不了。
- Codex 只说 OpenAI Responses。 只有 Chat Completions 接口的中转站接不了。
这两条是付费之前就该确认的。一个中转站写着“支持 Claude”,可能只是说能通过 OpenAI 兼容接口调用 Claude 模型,并不等于能接 Claude Code。
多数对话客户端和编辑器插件几种都支持,在设置里选。
能选的时候怎么选
- 用 Claude 模型,中转站又提供 Anthropic 原生接口:选原生的。 Claude 的工具调用、思考、提示词缓存都是按 Messages 接口设计的,转成 OpenAI 的格式要多经过一层翻译,多一个出问题的环节。
- 其他情况:选 Chat Completions。 它最通用,支持的中转站最多。
- Responses:模型或工具要求时才选。
第一条是我们综合各工具的文档得出的建议,不是某一份官方文档的原话。
认证头也分两种
同样是 Anthropic 原生接口,官方用的是 x-api-key,而不少中转站认的是 Authorization: Bearer,也有两种都认的。所以几个工具都留了选项:
- Claude Code:key 放进
ANTHROPIC_AUTH_TOKEN走 Bearer,放进ANTHROPIC_API_KEY走x-api-key; - Claude 桌面应用:有一项 Gateway auth scheme,二选一;
- VS Code 的自定义端点:可以用
requestHeaders改掉默认的请求头。
地址和 key 都对、却一直报 401 时,多半是这里选反了。
地址填到哪一级
这是最容易出错的地方。原因很简单:一次请求的完整地址是三段拼起来的。
https://你的中转站地址 /v1 /chat/completions
└──── 根地址 ────┘ └版本┘ └── 接口路径 ──┘
每个工具让你填到哪一段不一样,剩下的它自己补。填多了路径重复,填少了缺一段,结果都是 404。
| 填法 | 你填的 | 工具自己补的 |
|---|---|---|
| 只填根地址 | https://你的中转站地址 |
/v1/chat/completions 或 /v1/messages |
| 填到版本 | https://你的中转站地址/v1 |
/chat/completions |
| 填完整路径 | https://你的中转站地址/v1/chat/completions |
不补 |
有一条大致的规律:OpenAI 这一系的工具和 SDK 习惯填到 /v1,Anthropic 这一系习惯只填根地址。 这和两家官方 SDK 的默认地址一致:OpenAI 的是 https://api.openai.com/v1,Anthropic 的是 https://api.anthropic.com。
各工具对照
下表按本站各篇教程整理,每篇里有官方文档的出处。
| 工具 | 地址写到哪一级 | 教程 |
|---|---|---|
| Claude Code | 根地址,不带 /v1 |
教程 |
| Claude 桌面应用 | 根地址或中转站指定的前缀,不带 /v1 |
教程 |
| Codex | 带 /v1 |
教程 |
| opencode | 带 /v1 |
教程 |
| Cline | OpenAI Compatible 一般带 /v1 |
教程 |
| Zed | OpenAI 兼容带 /v1;Anthropic 兼容填根地址 |
教程 |
| VS Code 的 Copilot 对话 | 官方建议写完整路径 | 教程 |
| OpenClaw | OpenAI 兼容带 /v1;Anthropic 原生填根地址 |
教程 |
| Hermes Agent | 带 /v1 |
教程 |
| WorkBuddy | 完整路径 | 教程 |
| DeepSeek Harness | OpenAI 协议带 /v1;Anthropic 协议官方没有给例子 |
教程 |
| Cherry Studio | 根地址;末尾加 # 表示不再自动补路径 |
教程 |
| Chatbox | 主机和路径分开填 | 教程 |
| LobeHub | OpenAI 服务商一般带 /v1 |
教程 |
| NextChat | 根地址,不带 /v1 |
教程 |
| 沉浸式翻译 | 完整路径 | 教程 |
另外两个:CC Switch 是替你改 Claude Code 和 Codex 的配置文件,地址的写法跟着这两个工具走;Cursor 的情况不同,官方没有提供改接口地址的办法。
三条补充
- 中转站的文档优先。 有的站两种接口共用一个域名,比如酷站AI,OpenAI 兼容接口填
https://api.koozhan.com/v1,Anthropic 接口填https://api.koozhan.com;也有的站把 Anthropic 接口放在单独的前缀下面,比如在地址后面加/anthropic。这种只有它自己的文档知道,表里的规律替代不了。 - 末尾不要带斜杠。
https://你的中转站地址/v1/这种写法,有的工具拼出来会变成两个斜杠。 - 拿不准就两种都试。 报
404时,把/v1加上或去掉再试一次,比猜要快。
动工具之前,先用 curl 验证
工具配不通时,很难分清是中转站的问题还是自己配置的问题。先绕开工具,直接向中转站发一个请求,就能把两者分开。
先把 key 放进环境变量,免得它留在命令历史里到处都是:
export RELAY_API_KEY=你的key
看模型列表。 这个请求不调用模型,很多中转站都支持:
curl -sS https://你的中转站地址/v1/models \
-H "Authorization: Bearer $RELAY_API_KEY"
能返回一串模型名,说明地址和 key 都是对的,顺便核对一下模型名的准确写法。
测 OpenAI 兼容接口:
curl -sS https://你的中转站地址/v1/chat/completions \
-H "Authorization: Bearer $RELAY_API_KEY" \
-H "content-type: application/json" \
-d '{"model": "gpt-6.1-sol", "messages": [{"role": "user", "content": "你好"}]}'
测 Anthropic 原生接口:
curl -sS https://你的中转站地址/v1/messages \
-H "x-api-key: $RELAY_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{"model": "claude-sonnet-5-5", "max_tokens": 1, "messages": [{"role": "user", "content": "."}]}'
中转站认的是 Bearer 时,把 x-api-key 那一行换成 -H "Authorization: Bearer $RELAY_API_KEY"。模型名都换成你的中转站实际提供的。
怎么看结果:
| 返回 | 意思 |
|---|---|
| 一段 JSON,里面有模型的回答 | 地址、key、模型名都对。工具再配不通,问题在工具的配置 |
401 |
key 不对,或者放在了中转站不认的请求头里 |
403 |
key 没有权限用这个模型,或者余额用完了 |
404 |
路径不对。检查有没有多写或少写 /v1 |
| 返回的是一个网页(HTML) | 地址写成了中转站的官网或控制台,不是接口地址 |
| 提示模型不存在 | 模型名和中转站的不一致 |
429 |
请求太频繁,被限流了 |
500、502、503 |
中转站或它的上游出了问题,不是你的配置 |
curl 通了,只说明接口能用。给你的是不是它声称的模型,是另一个问题,见文末。
写代码时:SDK 和框架
自己写程序调用中转站,改的同样是地址和 key。下面的写法都对照过各自的官方文档或源码。
OpenAI SDK
import os
from openai import OpenAI
client = OpenAI(
base_url="https://你的中转站地址/v1",
api_key=os.environ["RELAY_API_KEY"],
)
resp = client.chat.completions.create(
model="gpt-6.1-sol",
messages=[{"role": "user", "content": "你好"}],
)
print(resp.choices[0].message.content)
也可以不改代码,用环境变量 OPENAI_BASE_URL 和 OPENAI_API_KEY。Node 版的参数叫 baseURL,同样读 OPENAI_BASE_URL。
Anthropic SDK
import os
from anthropic import Anthropic
client = Anthropic(
base_url="https://你的中转站地址",
api_key=os.environ["RELAY_API_KEY"],
)
msg = client.messages.create(
model="claude-sonnet-5-5",
max_tokens=1024,
messages=[{"role": "user", "content": "你好"}],
)
print(msg.content[0].text)
注意这里的地址不带 /v1。对应的环境变量是 ANTHROPIC_BASE_URL。key 有两种给法:api_key(环境变量 ANTHROPIC_API_KEY)走 x-api-key,auth_token(环境变量 ANTHROPIC_AUTH_TOKEN)走 Authorization: Bearer,按中转站认哪一种来选。
LangChain
import os
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model="gpt-6.1-sol",
base_url="https://你的中转站地址/v1",
api_key=os.environ["RELAY_API_KEY"],
)
地址也可以用环境变量 OPENAI_API_BASE 给。
LangChain 的源码里有一条提醒值得知道:ChatOpenAI 只按 OpenAI 官方的接口规范处理响应,第三方服务额外加的非标准字段(比如放思考内容的 reasoning_content)不会被取出来。通过中转站用别家的模型时,发现思考过程拿不到,原因可能在这里。
LlamaIndex
import os
from llama_index.llms.openai_like import OpenAILike
llm = OpenAILike(
model="gpt-6.1-sol",
api_base="https://你的中转站地址/v1",
api_key=os.environ["RELAY_API_KEY"],
is_chat_model=True,
context_window=128000,
)
要另装 llama-index-llms-openai-like 这个包。官方文档说明,OpenAILike 是专门给提供 OpenAI 兼容接口的第三方服务用的。有三个参数的默认值要留意:
| 参数 | 默认值 | 说明 |
|---|---|---|
is_chat_model |
False |
对话模型要设成 True,否则走的是旧的补全接口 |
context_window |
3900 |
按模型实际的上下文长度填,例子里的数字只是示意 |
is_function_calling_model |
False |
模型支持工具调用、你也要用时设成 True |
Continue
Continue 是 VS Code 和 JetBrains 里的开源编程助手。在它的 config.yaml 里加一个模型,provider 写 openai,用 apiBase 指向中转站:
models:
- name: 我的中转站
provider: openai
model: gpt-6.1-sol
apiBase: https://你的中转站地址/v1
apiKey: 你的key
官方文档说明,JSON 格式的 config.json 已经弃用。这个文件里有 key,不要提交到代码仓库。
Aider
Aider 是命令行里的编程助手。官方文档的做法是设两个环境变量,再在模型名前面加 openai/:
export OPENAI_API_BASE=https://你的中转站地址/v1
export OPENAI_API_KEY=你的key
aider --model openai/gpt-6.1-sol
这个 openai/ 前缀是告诉 Aider 走 OpenAI 兼容接口,和有些中转站要求的厂商前缀不是一回事。中转站自己也要求前缀时,两个都要写。后半句是我们根据两边的规则推出来的,不是官方的原话。
没列到的工具怎么办
照下面的顺序找:
- 在工具的设置里找“自定义接口”。 常见的叫法有 Base URL、API Base、API Host、接口地址、代理地址、自定义端点、OpenAI Compatible。
- 看清它说哪种接口。 写着 OpenAI 兼容的,用中转站的 OpenAI 兼容地址;写着 Anthropic 或 Claude 的,用它的 Anthropic 地址。
- 看它的例子里地址写到哪一级。 官方文档或输入框里的示例地址带不带
/v1,照着写。 - 填 key 和模型名,模型名照中转站的模型页。
- 先用 curl 确认中转站是通的,再在工具里测试。
工具里完全找不到改地址的地方,说明它不支持,Cursor 就是这种情况。这时不要去找修改程序、抓包改流量之类的办法,换一个支持的工具更省事也更安全。
key 的几条习惯
- 一个工具一把 key。 中转站一般可以建多把。分开之后,用量看得清,哪一把出了问题停掉它就行,不影响别处。
- 放进环境变量,不写进代码。 写在代码里的 key 很容易跟着提交进仓库。配置文件里有 key 的,把它加进
.gitignore。 - 不要贴到公开的地方。 提问、截图、录屏之前先看一眼有没有露出 key。
- 不用了就停用。 换电脑、换中转站、把设备给了别人,到控制台把旧的 key 停掉。
- 只充够用的钱。 中转站可能说停就停,见中转站跑路前有哪些征兆。
接上之后
来源
- Create chat completion(OpenAI API 参考)
- Migrate to the Responses API(OpenAI 官方文档)
- Messages(Claude API 参考)
- OpenAI Python SDK(官方仓库)
- Anthropic Python SDK(官方仓库)
- ChatOpenAI 源码里的说明(LangChain 官方仓库)
- OpenAILike(LlamaIndex 官方文档)
- OpenAI 供应商的配置(Continue 官方仓库的文档)
- OpenAI compatible APIs(Aider 官方文档)
- 酷站AI API 文档(中转站一方的接入说明,用作实际填写的例子)