Claude Code + 环境变量配置踩坑实录

内容纲要

本篇行文逻辑按「现象 → 误判 → 真因 → 定位 → 解决 → 心智模型」来写,这是技术人真正防复发的结构。


—— 为什么我 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

然后:

  1. 关闭当前终端
  2. 新开终端
  3. 重新运行 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
  • ✅ 把配置当成「代码」,而不是「顺手点一下」
close
arrow_upward