给 Claude Code 配置自定义 API 端点(ANTHROPIC_BASE_URL)

Claude Code 读两个环境变量决定请求发往哪里:ANTHROPIC_BASE_URLANTHROPIC_AUTH_TOKEN。只要端点兼容 Anthropic 的 Messages API,改这两项就能切换, 客户端本身不需要任何改动,也不需要打补丁或换版本。

写进配置文件(推荐)

把下面这段放进 ~/.claude/settings.json

{
  "env": {
    "ANTHROPIC_AUTH_TOKEN": "<你的密钥>",
    "ANTHROPIC_BASE_URL": "https://relay.example.com/api/"
  }
}

这种写法的好处是不依赖 shell 环境:不管从终端、编辑器还是任务计划里启动,配置都在。 文件如果已经存在,只需要把 env 这一段合并进去,别整个覆盖 —— 里面可能还有别的设置。

或者用环境变量

export ANTHROPIC_BASE_URL=https://relay.example.com/api/
export ANTHROPIC_AUTH_TOKEN=<你的密钥>
claude

临时试的时候方便,但只对当前 shell 生效。想持久化就写进 ~/.zshrc~/.bashrc

几个容易踩的点

  • ANTHROPIC_API_KEYANTHROPIC_AUTH_TOKEN 不是一回事。 前者是官方订阅/API 账号的密钥,后者才是自定义端点用的。两个都设了会互相干扰,用哪个就只留哪个。
  • 路径末尾的 /api/ 不能省。 它是中继端点的挂载路径,漏掉会得到 404。
  • 配置改了要重启 Claude Code。 它在启动时读一次,运行中改文件不会重新加载。
  • 收到 402 而不是 401,说明认证是通过的,只是额度用尽了 —— 这两个状态码要分清, 排查方向完全不同。

怎么确认生效了

启动后随便问一句,如果响应正常返回,说明请求确实走到了新端点。想更直接一点,可以看 中继侧的用量记录里有没有刚才那次请求 —— 有就是通了。

配置本身不复杂,绝大多数「不生效」最后都是那三种:变量名用错了、末尾路径漏了、 或者改完没重启。

← 技术笔记