本篇行文逻辑按「现象 → 误判 → 真因 → 定位 → 解决 → 心智模型」来写,这是技术人真正防复发的结构。
—— 为什么我 setx 了,Claude Code 却完全不理我?
一、踩坑背景
为了让 Claude Code(claudecode) 接入 火山引擎 ARK(Anthropic 兼容 API),我在 Windows 上配置了以下环境变量:
setx ANTHROPIC_AUTH_TOKEN ARK_API_KEY
setx ANTHROPIC_BASE_URL https://ark.cn-beijing.volces.com/api/coding
setx ANTHROPIC_MODEL ark-code-latest
按常理判断:
只要环境变量对了,CLI 就应该乖乖用新的 Base URL 和模型。
但现实狠狠打脸。
二、异常现象(表象)
启动 claudecode 后,在 Settings 面板里看到的是:
Anthropic base URL: https://open.bigmodel.cn/api/anthropic
Model: glm-4.6
Setting sources: User settings, Project local settings
这意味着:
- ❌ 没用我设置的 ARK Base URL
- ❌ 没用我设置的 ark-code-latest
- ❌ 甚至还在用 智谱 BigModel 的 glm-4.6
环境变量仿佛不存在。
三、第一层误判(99% 的人都会错)
❌ 误以为:
setx设置完 → 当前终端立刻生效
✅ 实际情况:
setx只写注册表- 不会影响当前已打开的终端
- CLI 只能在新开的 Shell里读取到
但注意:
👉 即便你新开了终端,这个问题依然可能存在
因为这还不是最终原因。
四、真正的致命原因(核心)
Claude Code 的配置优先级(非常重要)
Claude Code 不是一个“以环境变量为核心”的工具,它的优先级是:
1️⃣ Project local settings(项目级配置)
2️⃣ User settings(用户级配置)
3️⃣ Environment variables(环境变量)
4️⃣ 内置默认值
而我在 Settings 里清楚看到:
Setting sources: User settings, Project local settings
这句话翻译成人话就是:
你已经在 JSON 里写过配置了,环境变量我不看。
五、是谁在偷偷覆盖环境变量?
1️⃣ 项目级配置(最常见、最隐蔽)
在当前工作目录,例如:
E:\tools\mp4tomp3
只要存在以下任意文件之一:
.claude.json
.claudecode.json
.claude/config.json
并且内容里有类似:
{
"anthropicBaseUrl": "https://open.bigmodel.cn/api/anthropic",
"model": "glm-4.6"
}
👉 环境变量将被 100% 忽略
2️⃣ 用户级配置(全局生效)
Windows 常见位置:
C:\Users\<用户名>\.claude\
C:\Users\<用户名>\AppData\Roaming\Claude\
一旦这里写过配置,Claude Code 就会“忠诚执行”。
六、为什么我会看到 glm-4.6?
这是一个重要线索:
我之前已经成功把 Claude Code 接成「智谱 BigModel 的 Anthropic 兼容接口」
所以:
- Claude Code 并没有“坏”
- 它只是严格执行了你以前写下的配置
- 并且优先级远高于环境变量
七、正确解决方案(3 种,按推荐度排序)
✅ 方案一:删除项目级配置(最干净、最推荐)
适用于:
想用 环境变量统一控制,不想被项目绑死
del .claude.json
del .claudecode.json
然后:
- 关闭当前终端
- 新开终端
- 重新运行
claudecode
此时 Settings 应显示:
Setting sources: Environment variables
Anthropic base URL: https://ark.cn-beijing.volces.com/api/coding
Model: ark-code-latest
✅ 方案二:项目级显式写 ARK(工程化推荐)
适用于:
这个项目就是要固定走 ARK,可复现、可共享
{
"anthropicBaseUrl": "https://ark.cn-beijing.volces.com/api/coding",
"model": "ark-code-latest",
"anthropicAuthTokenEnv": "ANTHROPIC_AUTH_TOKEN"
}
优点:
- 不依赖机器环境
- 不怕别人环境变量不同
- 非常适合团队 / 多机
⚠️ 方案三:PowerShell 临时注入(应急用)
$env:ANTHROPIC_AUTH_TOKEN="你的ARK Key"
$env:ANTHROPIC_BASE_URL="https://ark.cn-beijing.volces.com/api/coding"
$env:ANTHROPIC_MODEL="ark-code-latest"
claudecode
缺点:
- 一关窗口就失效
- 不适合长期使用
八、快速自检方法(强烈建议记住)
在 启动 claudecode 前,先确认:
echo $env:ANTHROPIC_BASE_URL
echo $env:ANTHROPIC_MODEL
如果这里都不是你期望的值,
Claude Code 不可能读对。
九、终极心智模型(避免未来再踩)
你必须记住这句话:
Claude Code 是“配置文件优先”的 CLI,不是“环境变量优先”。
换句话说:
- 一旦你写过
.claude.json - 你就已经放弃了 env 的控制权
- 除非你主动删除或覆盖它
十、给未来自己的备注
- ❌ 不要盲信
setx - ❌ 不要假设 CLI 都“尊重环境变量”
- ✅ 先看 Setting sources
- ✅ 先搜
.claude*.json - ✅ 把配置当成「代码」,而不是「顺手点一下」