Claude Code 默认要登录 Anthropic 官方账号;换成自己的 API 只需要两个变量:ANTHROPIC_BASE_URL 和 ANTHROPIC_AUTH_TOKEN。本文以 DeepSeek 为例(撰写时版本:Claude Code 2.1.178,模型 deepseek-v4-pro[1m] / deepseek-flash)。
一、最小配置
配置文件位置:
| 系统 | 路径 |
|---|---|
| Linux / macOS / WSL | ~/.claude/settings.json |
| Windows | C:\Users\<用户名>\.claude\settings.json |
把下面这段抄进 settings.json(BASE_URL、TOKEN、模型名换成自己的):
{
"env": {
"ANTHROPIC_BASE_URL": "https://api.deepseek.com/anthropic",
"ANTHROPIC_AUTH_TOKEN": "sk-你的key",
"ANTHROPIC_MODEL": "deepseek-v4-pro[1m]",
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "deepseek-flash",
"ANTHROPIC_DEFAULT_SONNET_MODEL": "deepseek-flash",
"ANTHROPIC_DEFAULT_OPUS_MODEL": "deepseek-v4-pro[1m]"
},
"model": "haiku",
"includeCoAuthoredBy": false
}
字段含义:
| 字段 | 作用 |
|---|---|
ANTHROPIC_BASE_URL | 请求发到哪:官方、兼容端点或中转站 |
ANTHROPIC_AUTH_TOKEN | 鉴权 token(服务商给的 sk-...) |
ANTHROPIC_MODEL | 默认模型名 |
ANTHROPIC_DEFAULT_*_MODEL | 把 Claude Code 的档位映射到服务商的模型 |
model | 默认用哪一档:haiku / sonnet / opus |
includeCoAuthoredBy | 提交信息里是否带 Claude 署名,一般关掉 |
二、模型档位映射
Claude Code 内部按档位(不是具体模型名)发请求,2.x 共四档:
| 档位 | 环境变量 | 用途 |
|---|---|---|
| fable | ANTHROPIC_DEFAULT_FABLE_MODEL | 新增档位 |
| haiku | ANTHROPIC_DEFAULT_HAIKU_MODEL | 后台小任务、快速响应 |
| sonnet | ANTHROPIC_DEFAULT_SONNET_MODEL | 日常主力 |
| opus | ANTHROPIC_DEFAULT_OPUS_MODEL | 复杂任务 |
不映射也能启动,但服务商不认识 claude-* 这类模型名就会报错。DeepSeek 只有两个模型,本机这样映射:
opus → deepseek-v4-pro[1m] # 复杂任务用 pro
sonnet → deepseek-flash
haiku → deepseek-flash # 小任务用便宜的 flash
模型名实测:
| 名称 | 结果 |
|---|---|
deepseek-flash / deepseek-v4-pro | ✅ 官方 ID |
deepseek-v4-pro[1m] | ✅ 1M 上下文变体,服务商不支持时去掉后缀 |
deepseek-v4-flash | ✅ 旧别名,仍可用 |
deepseek-v4.1-flash | ❌ 400,不是有效模型名 |
官方列表可自查:curl -H "Authorization: Bearer $KEY" https://api.deepseek.com/models。
老配置里常见的 ANTHROPIC_SMALL_FAST_MODEL 等价于 haiku 档。
三、配置来源与优先级
三个地方都能改,优先级从高到低:
--settings <file-or-json>:只对当前这条命令生效~/.claude/settings.json的env段:最常用,一次配好- Shell 环境变量:
export ANTHROPIC_BASE_URL=...,适合临时测试
实测:shell 里给错的 BASE_URL,settings.json 的 env 仍然覆盖。
--setting-sources user,project,local 可以控制加载哪些来源。
四、多套配置切换
需要对比不同服务商时,把配置存成不同文件名,切换时用 --settings 指定:
ls ~/.claude/settings.json*
# settings.json settings.json.bak settings.json.relay-a settings.json.relay-b
claude --settings ~/.claude/settings.json.relay-a # 这次用它跑
要固定切换就做成别名:
# ~/.bashrc
alias claude-d='claude --settings ~/.claude/settings.json' # 默认:DeepSeek
alias claude-a='claude --settings ~/.claude/settings.json.relay-a' # 备用线路
| 配置 | BASE_URL | opus / haiku 映射 |
|---|---|---|
| 默认(DeepSeek) | https://api.deepseek.com/anthropic | deepseek-v4-pro[1m] / deepseek-flash |
| 中转 A | https://中转站域名 | claude-opus-4-8 / claude-haiku-4-5 |
| 中转 B | https://另一个中转站 | claude-opus-4-8 / gpt-5.5 |
五、Windows 端
同样放 %USERPROFILE%\.claude\settings.json,结构完全一致。环境变量写法不同:
# 临时(当前窗口)
$env:ANTHROPIC_BASE_URL = "https://api.deepseek.com/anthropic"
$env:ANTHROPIC_AUTH_TOKEN = "sk-你的key"
# 永久(写入用户环境变量,重开终端生效)
setx ANTHROPIC_BASE_URL "https://api.deepseek.com/anthropic"
setx ANTHROPIC_AUTH_TOKEN "sk-你的key"
六、验证
claude -p "只回复 ok" # 返回 ok 就通了
交互模式里用 /status 查看当前生效的 BASE_URL 和模型。
七、常见报错
| 现象 | 原因 | 解法 |
|---|---|---|
401 Unauthorized | TOKEN 错、过期或没配 | 重新生成并更新 ANTHROPIC_AUTH_TOKEN |
400 / model not found | 模型名不在服务商列表 | 用 /models 接口核对;DeepSeek 只有 deepseek-v4-pro / deepseek-flash |
404 / invalid path | BASE_URL 少了路径 | 兼容端点通常有固定路径(DeepSeek 是 /anthropic),按服务商文档填全 |
| 缓存相关报错 | 中转不支持 prompt caching | 设 DISABLE_PROMPT_CACHING=1 |
| 网关要求额外 header | 中转鉴权方式不同 | ANTHROPIC_CUSTOM_HEADERS,如 "x-api-key: xxx" |
| 请求发去了奇怪的地方 | 代理环境变量劫持 | 检查 HTTP_PROXY / HTTPS_PROXY,必要时 unset |
| 配了 env 仍走官方 | 交互模式里 /login 登录过官方账号 | settings.json 的 env 优先级更高;必要时 /logout 清除登录态 |
八、安全
- key 只放本机:不要提交进仓库,也不要用共享
settings.json的方式「同步配置」 - 文件权限:
chmod 600 ~/.claude/settings.json - 权限白名单放
settings.local.json:本机就是这么分的——settings.json放 provider 配置,settings.local.json放工具权限
小结
- 切 API = 改
ANTHROPIC_BASE_URL+ANTHROPIC_AUTH_TOKEN,写进~/.claude/settings.json的env段 - 服务商不认
claude-*模型名时,用ANTHROPIC_DEFAULT_{HAIKU,SONNET,OPUS}_MODEL做映射 - 模型名以服务商
/models列表为准,不要凭记忆写 - 多套配置存成不同文件,
claude --settings xxx.json临时切换 - key 不进仓库,文件权限 600