Claude Code 自定义 API 与 Codex、OpenCode 接口地址配置
Claude Code 自定义 API 地址靠两个环境变量:ANTHROPIC_BASE_URL 和 ANTHROPIC_AUTH_TOKEN。Codex 和 OpenCode 则是在各自的配置文件里声明一个“供应商”,写上 base url 和密钥来源。改完如果报错,多半是地址路径写错、密钥类型不对或者网络不通,后文的排错表可以逐项对照。
下面只写官方文档里有记载的配置项。这几个工具更新快,字段名可能变化,标了“以官方文档为准”的地方,动手前先核对当前版本的文档。
填进去的接口地址要满足什么条件?
先确认你要接的服务和工具用的是同一种接口格式。
| 工具 | 默认使用的接口格式 | 你填的地址需要兼容 |
|---|---|---|
| Claude Code | Anthropic Messages 接口 | Anthropic 格式 |
| Codex | OpenAI 接口 | OpenAI 格式(具体走 Chat Completions 还是 Responses,以 Codex 官方文档为准) |
| OpenCode | 按供应商配置决定 | 你在配置里声明的那种格式 |
只兼容 OpenAI 格式的地址填进 Claude Code 跑不通,反过来也一样,这是 404 的常见来源。
另外两点:
- base url 一般只写到根路径或
/v1,工具会自己拼后面的/messages、/chat/completions。要不要带/v1,看服务方的接入说明。 - 密钥不要写进项目仓库,放在 shell 配置、用户目录下的配置文件或系统的密钥管理里。
Claude Code 怎么设置自定义 API 地址?
Claude Code 官方文档里与此相关的环境变量有三个:
| 变量 | 作用 |
|---|---|
ANTHROPIC_BASE_URL | 覆盖默认的 API 地址 |
ANTHROPIC_AUTH_TOKEN | 作为 Authorization: Bearer 头发送的令牌,常用于网关或代理 |
ANTHROPIC_API_KEY | 作为 X-Api-Key 头发送的密钥 |
ANTHROPIC_AUTH_TOKEN 和 ANTHROPIC_API_KEY 走的是不同的请求头。服务方要哪一种就设哪一种,不要两个都填。
方式一:在终端里临时设置
export ANTHROPIC_BASE_URL="https://your-endpoint.example.com"
export ANTHROPIC_AUTH_TOKEN="sk-xxxxxxxx"
claude
适合先试通不通,关掉终端就失效。
方式二:写进 settings.json
settings.json 支持 env 字段,里面的变量在每次会话启动时生效。用户级配置在 ~/.claude/settings.json:
{
"env": {
"ANTHROPIC_BASE_URL": "https://your-endpoint.example.com",
"ANTHROPIC_AUTH_TOKEN": "sk-xxxxxxxx"
}
}
项目目录下也可以放 .claude/settings.json,但这个文件通常会提交到仓库,密钥别写在里面。项目级的私有配置用 .claude/settings.local.json,并确认它在 .gitignore 里。
怎么确认生效了
启动后在 Claude Code 里执行 /status,查看当前的 API 地址和认证来源。如果显示的还是默认地址,检查 shell 里是不是另有同名变量。
Codex 怎么配置自定义 base url?
Codex 的配置文件是 ~/.codex/config.toml。官方文档的做法是用 model_providers 声明一个自定义供应商,再用 model_provider 指向它。示例:
model_provider = "mygateway"
[model_providers.mygateway]
name = "My Gateway"
base_url = "https://your-endpoint.example.com/v1"
env_key = "MYGATEWAY_API_KEY"
密钥放在环境变量里:
export MYGATEWAY_API_KEY="sk-xxxxxxxx"
codex
几点说明:
env_key填的是环境变量的名字,不是密钥本身,Codex 启动时去读这个变量。- 供应商段落里还有
wire_api等字段,用来指定走哪种 OpenAI 接口。可选值和默认值在不同版本里调整过,以 Codex 官方文档为准。 - 模型名用
model = "..."指定,填服务方支持的名称。
OpenCode 怎么添加自定义 provider?
OpenCode 的全局配置一般在 ~/.config/opencode/opencode.json,项目根目录也可以放一份。接入兼容 OpenAI 格式的服务用 provider 字段,官方文档的写法大致如下:
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"mygateway": {
"npm": "@ai-sdk/openai-compatible",
"name": "My Gateway",
"options": {
"baseURL": "https://your-endpoint.example.com/v1"
},
"models": {
"your-model-id": {}
}
}
}
}
密钥可以用 opencode auth login 交互录入,也可以在 options 里引用环境变量。具体字段名,以及 Anthropic 格式供应商的写法,以 OpenCode 官方文档为准。
接聚合网关时有什么不同?以 AGI Plan 为例
用聚合网关的流程和上面一样,只是地址和密钥换成网关给的。以 AGI Plan 为例(AGI Plan 是 cdnping 的商业合作方):它同时兼容 OpenAI 和 Anthropic 两种接口格式,Claude Code、Codex、OpenCode 都能接。接入分三步:邮箱验证码注册、选套餐并建密钥、改一处配置。各工具的地址和分步教程见 agiplan.dev。AGI Plan 站方说明自己不是官方授权渠道,部分模型标注为“仅境外”,具体以 模型页 为准。使用前看清说明,并遵守各服务的条款和当地法规。
报 401、404、超时怎么查?
改完配置报错,按下表从上往下查。
| 现象 | 常见原因 | 怎么查 |
|---|---|---|
| 401 / 403 | 密钥错误、过期或额度用完;请求头类型不对(Claude Code 里 AUTH_TOKEN 和 API_KEY 用反) | 用 curl 带同一个密钥直接请求一次;在 Claude Code 里用 /status 看认证来源 |
| 404 | base url 多写或少写了 /v1;接口格式不匹配(OpenAI 格式地址填进了 Claude Code);模型名服务方不支持 | 对照服务方文档核对完整路径和模型名 |
| 连接超时 / 一直转圈 | 本机到接口地址的网络不通;代理没覆盖到终端;DNS 解析异常 | 先看对方是否故障,再查本机网络,见下一节 |
| 偶发 5xx、429 | 服务端故障或限流 | 看 /status 和 /down 上同一时段有没有异常 |
| 改了配置不生效 | shell 里有同名环境变量覆盖;改的是项目级而不是用户级配置 | env | grep -i anthropic 或 env | grep -i base_url |
通用的 curl 自检命令(Anthropic 格式,按服务方要求换成对应的请求头):
curl -sS -o /dev/null -w "HTTP %{http_code} 连接 %{time_connect}s 总计 %{time_total}s\n" \
"$ANTHROPIC_BASE_URL/v1/messages" \
-H "Authorization: Bearer $ANTHROPIC_AUTH_TOKEN" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{"model":"your-model-id","max_tokens":16,"messages":[{"role":"user","content":"hi"}]}'
返回 200 说明地址和密钥都对,问题在工具配置;返回 401 或 404 对照上表;命令卡住不返回,就是网络问题。
超时是服务端的问题还是本机网络的问题?
超时有两种可能:对方服务故障,或者你这边到对方的路不通。分开查会快很多。
第一步,看服务方是否正常。打开 API 状态页,它从 Cloudflare 边缘每 5 分钟探测一次各家官方 API 入口,并同步部分官方状态页。用 AGI Plan 的可以直接看 /status/agiplan;用 Claude Code 也可以看 /down/claude-code,那里汇总了官方状态页、API 探测和用户报告。
作为参照:cdnping 在 2026 年 10 月 17 日从 Cloudflare 丹佛节点(DEN)做的边缘探测中(统计窗口约 85 分钟,共 242 次探测,来源 cdnping /status),api.anthropic.com 的 p50 为 73 ms,api.openai.com 为 96 ms,窗口内都没有失败。cdnping 从这一天才开始采集,这只是一小段窗口的机房到机房数据,不代表你本机的体验,只能说明当时服务端在正常响应。如果状态页正常而你这边超时,问题多半在本地网络。
第二步,查本机网络。打开 IP 与环境检测,重点看三项:
- 出口 IP 与类型:确认终端实际走的出口在哪里,是机房、家宽还是移动网络。
- 大陆分流检测:判断当前是“大陆分流 / 全局代理 / 国内直连”。浏览器走了代理而终端没走,是常见情况。
- 多出口检测与 DNS 泄漏:看访问不同服务时出口是否一致,DNS 是否走了预期的解析器。
检测完可以生成带水印的结果图,并可选择隐藏 IP 地址。发给同事或在群里求助时,把这张图附上,不会把自己的出口 IP 暴露出去。指纹在本地计算,不上传。
第三步,测延迟。首页的在线测速在浏览器里测到 15 个 AI 模型 API 的“首次连接”(含 DNS 和 TLS 握手)和“往返”时间。首次连接明显偏高而往返正常,通常是 DNS 或握手阶段的问题;两者都高,就是链路本身慢。延迟的成因可以参考 AI API 延迟为什么高。
浏览器和终端不一定走同一条网络路径。浏览器里测得通、终端里不通,先检查终端有没有设置 HTTPS_PROXY 等变量,以及分流规则是否覆盖了接口域名,原理见分流原理。