Claude Code 多环境模型配置实践:解决 ANTHROPIC_AUTH_TOKEN 与 ANTHROPIC_API_KEY 冲突

Claude Code 多环境模型配置实践:解决 ANTHROPIC_AUTH_TOKEN 与 ANTHROPIC_API_KEY 冲突在一台 Mac 电脑上使用 Claude Code 时 经常会遇到多环境切换需求 默认使用 LingyaAI 中转 需要时切换到智谱 GLM Coding 有时还要使用 Claude 官方账号登录 不希望不同平台的 API Key Token Base URL 互相污染 不希望每次手动 export 环境变量 不希望 API Key 长期暴露在当前终端环境里 一开始可能会在

大家好,我是讯享网,很高兴认识大家。这里提供最前沿的Ai技术和互联网信息。



在一台 Mac 电脑上使用 Claude Code 时,经常会遇到多环境切换需求:

  • 默认使用 LingyaAI 中转;
  • 需要时切换到智谱 GLM Coding;
  • 有时还要使用 Claude 官方账号登录;
  • 不希望不同平台的 API Key、Token、Base URL 互相污染;
  • 不希望每次手动 export 环境变量;
  • 不希望 API Key 长期暴露在当前终端环境里。

一开始可能会在 ~/.zshrc 中直接写 alias:

alias claude=‘env -u ANTHROPIC_AUTH_TOKEN ANTHROPIC_API_KEY=“xxx” ANTHROPIC_BASE_URL=”https://api.xxx.com” /Users/yd/.nvm/versions/node/v24.15.0/bin/claude’

alias claude-zp=‘env -u ANTHROPIC_AUTH_TOKEN ANTHROPIC_API_KEY=“xxx” ANTHROPIC_BASE_URL=”https://open.bigmodel.cn/api/coding/paas/v4” /Users/yd/.nvm/versions/node/v24.15.0/bin/claude’

这种写法表面上可以切换环境,但实际使用中容易出现认证冲突、模型不兼容、alias 与 function 冲突、Claude Code 本地 settings 二次注入等问题。

最终成功方案是:

~/.zshrc 定义多环境启动函数 ~/.claude-env 单独保存不同平台的 Key ~/.claude/settings.json 保持干净,不放认证变量 

最终命令效果:

claude # 默认走 LingyaAI claude-ly # LingyaAI 中转 claude-zp # 智谱 GLM Coding claude-official # Claude 官方账号登录 

Claude Code 报错:

Auth conflict: Both a token (ANTHROPIC_AUTH_TOKEN) and an API key (ANTHROPIC_API_KEY) are set. 

原因是同时存在:

ANTHROPIC_AUTH_TOKEN ANTHROPIC_API_KEY 

这两个变量不能同时存在。

变量 含义 ANTHROPIC_API_KEY API Key 认证方式 ANTHROPIC_AUTH_TOKEN Bearer Token / Auth Token 认证方式 ANTHROPIC_BASE_URL Claude 兼容接口地址

原则:

使用 ANTHROPIC_API_KEY 时,不要设置 ANTHROPIC_AUTH_TOKEN。 使用 ANTHROPIC_AUTH_TOKEN 时,不要设置 ANTHROPIC_API_KEY。 

执行:

env | grep -E ‘ANTHROPIC|CLAUDE’ 

如果当前 shell 中没有 ANTHROPIC_AUTH_TOKEN,但 Claude Code 进入后仍然冲突,说明问题可能来自 Claude Code 自己的配置文件:

~/.claude/settings.json 

曾经出现过这样的配置:

{ “env”: {

"ANTHROPIC_AUTH_TOKEN": "sk-xxx", "ANTHROPIC_BASE_URL": "https://api.lingyaai.cn" 

} }

这会导致:

~/.zshrc 已经清理了 AUTH_TOKEN ↓ 启动 Claude Code ↓ Claude Code 又从 /.claude/settings.json 注入 AUTH_TOKEN ↓ 同时又通过启动函数注入 API_KEY ↓ 认证冲突 

所以最终要把 /.claude/settings.json 改成:

{ “env”: {} } 

认证问题解决后,LingyaAI 可以正常使用,但智谱报错:

There’s an issue with the selected model (claude-sonnet-4-6[1m]). It may not exist or you may not have access to it. Run /model to pick a different model. 

或者:

There’s an issue with the selected model (glm-5.1). It may not exist or you may not have access to it. Run /model to pick a different model. 

原因是:智谱 Claude Code 接入方式和普通 Claude API 中转不同。

一开始错误地把智谱也按 LingyaAI 的方式配置:

export ANTHROPIC_API_KEY=”\(ZHIPU_CLAUDE_KEY" export ANTHROPIC_BASE_URL="https://open.bigmodel.cn/api/coding/paas/v4" export ANTHROPIC_MODEL="glm-5.1" 

这个配置不适合 Claude Code 的智谱接入。

最终成功配置是:

export ANTHROPIC_AUTH_TOKEN="\)ZHIPU_CLAUDE_KEY” export ANTHROPIC_BASE_URL=”https://open.bigmodel.cn/api/anthropic”

export ANTHROPIC_DEFAULT_HAIKU_MODEL=“glm-4.5-air” export ANTHROPIC_DEFAULT_SONNET_MODEL=“glm-4.7” export ANTHROPIC_DEFAULT_OPUS_MODEL=“glm-5.1”

关键点:

智谱用 ANTHROPIC_AUTH_TOKEN,不用 ANTHROPIC_API_KEY。 智谱 Base URL 用 /api/anthropic,不用 /api/coding/paas/v4。 智谱不要强行设置 ANTHROPIC_MODEL=“glm-5.1”。 智谱通过 ANTHROPICDEFAULT*_MODEL 做模型映射。 

最终需要维护三个位置:

~/.zshrc ~/.claude-env /.claude/settings.json 

职责如下:

文件 作用 /.zshrc 定义命令、函数、PATH、Claude Code 启动逻辑 /.claude-env 保存 LingyaAI、智谱的 Key /.claude/settings.json Claude Code 自己的配置,保持干净,不放认证变量

创建文件:

nano ~/.claude-env 

内容如下:

export LINGYA_CLAUDE_KEY=“你的_lingyaai_key” export ZHIPU_CLAUDE_KEY=“你的_智谱_key” 

保存:

Ctrl + O 回车 Ctrl + X 

设置权限:

chmod 600 ~/.claude-env 

检查:

ls -la /.claude-env 

理想输出类似:

-rw——- 1 yd staff … /Users/yd/.claude-env 

注意:不要直接执行这个文件。

错误用法:

/.claude-env 

正确用法是由 ~/.zshrc 中的函数在子 shell 里加载:

source “$HOME/.claude-env” 

先备份旧配置:

cp ~/.zshrc ~/.zshrc.bak 

打开:

nano ~/.zshrc 

完整替换为下面内容:

# ================================================================

~/.zshrc

macOS zsh 配置

Windsurf + NVM + Node + Claude Code 多环境隔离版

#

环境:

claude -> 默认 LingyaAI

claude-ly -> LingyaAI 中转

claude-zp -> 智谱 GLM Coding

claude-official -> Claude 官方账号登录

#

设计原则:

1. 不在 ~/.zshrc 里直接写 API Key

2. API Key 单独放在 ~/.claude-env

3. Key 只在子 shell 中临时加载

4. 每次启动前清理冲突环境变量

5. ~/.claude/settings.json 不再放认证变量

================================================================

================================================================

1. Windsurf PATH

================================================================

export PATH=“/Users/yd/.codeium/windsurf/bin:$PATH”

================================================================

2. NVM / Node.js

================================================================

export NVM_DIR=“$HOME/.nvm”

if [ -s “\(NVM_DIR/nvm.sh" ]; then . "\)NVM_DIR/nvm.sh” fi

if [ -s “\(NVM_DIR/bash_completion" ]; then . "\)NVM_DIR/bash_completion” fi

export PATH=“$PATH:/Users/yd/.nvm/versions/node/v24.15.0/bin”

================================================================

3. Claude Code Binary

================================================================

export CLAUDE_BIN=“/Users/yd/.nvm/versions/node/v24.15.0/bin/claude”

================================================================

4. 清理旧 alias

避免 zsh 报:

defining function based on alias `claude’

================================================================

unalias claude 2>/dev/null unalias claude-ly 2>/dev/null unalias claude-zp 2>/dev/null unalias claude-official 2>/dev/null

================================================================

5. Claude 环境变量清理函数

================================================================

claude-clean-env()

================================================================

6. 加载 ~/.claude-env

注意:不要在主 shell 直接 source ~/.claude-env

只在子 shell 中调用这个函数

================================================================

claude-load-keys()

================================================================

7. LingyaAI 中转版

#

使用方式:

claude-ly

#

说明:

LingyaAI 这里使用 ANTHROPIC_API_KEY。

================================================================

claude-ly()

================================================================

8. 智谱 GLM Coding 版

#

使用方式:

claude-zp

#

关键点:

1. 智谱 Claude Code 接入使用 ANTHROPIC_AUTH_TOKEN

2. Base URL 使用 https://open.bigmodel.cn/api/anthropic

3. 不要设置 ANTHROPIC_API_KEY

4. 不要设置 ANTHROPIC_MODEL=“glm-5.1”

5. 使用默认模型映射变量

================================================================

claude-zp()

================================================================

9. Claude 官方账号登录版

#

使用方式:

claude-official

#

说明:

不注入 ANTHROPIC_API_KEY

不注入 ANTHROPIC_AUTH_TOKEN

不注入 ANTHROPIC_BASE_URL

================================================================

claude-official() { (

claude-clean-env exec "$CLAUDE_BIN" "$@" 

) }

================================================================

10. 默认 claude 命令

#

当前默认:

claude -> claude-ly

================================================================

claude() { claude-ly “$@” }

================================================================

11. 调试命令

#

使用方式:

claude-env-check

================================================================

claude-env-check()

================================================================

12. 清理当前 shell 的 Claude 相关环境变量

#

使用方式:

claude-reset-env

================================================================

claude-reset-env() { claude-clean-env echo “Claude related environment variables have been cleared.” }

================================================================

End of ~/.zshrc

================================================================

保存后执行:

source ~/.zshrc 

这个文件不要再放:

ANTHROPIC_AUTH_TOKEN ANTHROPIC_API_KEY ANTHROPIC_BASE_URL ANTHROPIC_MODEL 

直接重置:

mkdir -p ~/.claude

cp ~/.claude/settings.json ~/.claude/settings.json.bak 2>/dev/null

cat > ~/.claude/settings.json <<‘SETTINGS_JSON_EOF’ { “env”: {} } SETTINGS_JSON_EOF

检查:

cat ~/.claude/settings.json 

理想输出:

{ “env”: {} } 

重新加载:

source ~/.zshrc 

检查命令类型:

type claude type claude-ly type claude-zp type claude-official 

正确输出类似:

claude is a shell function from /Users/yd/.zshrc claude-ly is a shell function from /Users/yd/.zshrc claude-zp is a shell function from /Users/yd/.zshrc claude-official is a shell function from /Users/yd/.zshrc 

检查当前 shell 环境:

env | grep -E ‘ANTHROPIC|CLAUDE|LINGYA|ZHIPU’ 

理想情况下只看到:

CLAUDE_BIN=/Users/yd/.nvm/versions/node/v24.15.0/bin/claude 

不应该看到:

ANTHROPIC_AUTH_TOKEN=… ANTHROPIC_API_KEY=… ANTHROPIC_BASE_URL=… LINGYA_CLAUDE_KEY=… ZHIPU_CLAUDE_KEY=… 

因为 Key 只应该在 Claude Code 子进程里临时存在。


默认 LingyaAI:

claude 

LingyaAI:

claude-ly 

智谱 GLM Coding:

claude-zp 

Claude 官方账号:

claude-official 

调试:

claude-env-check 

清理当前 shell:

claude-reset-env 

当输入:

claude 

zsh 不是直接去某个目录找文件,而是按顺序解析命令。

大体顺序是:

alias -> function -> builtin -> PATH 中的可执行文件 

执行:

type claude 

如果看到:

claude is a shell function from /Users/yd/.zshrc 

说明当前 claude~/.zshrc 中定义的函数。

当前配置中:

claude() { claude-ly “\(@" } 

所以输入 claude 实际会进入 claude-ly

claude-ly 最后执行:

exec "\)CLAUDE_BIN” “\(@" 

其中:

\)CLAUDE_BIN 

等于:

/Users/yd/.nvm/versions/node/v24.15.0/bin/claude 

也就是 Claude Code 的真实可执行文件。


函数中使用了括号:

claude-ly() { (

claude-clean-env claude-load-keys export ANTHROPIC_API_KEY="$LINGYA_CLAUDE_KEY" exec "$CLAUDE_BIN" "$@" 

) }

这里的:

( … ) 

表示子 shell。

好处是:

子 shell 中设置的环境变量,只影响 Claude Code 进程,不污染外部终端。 

例如执行:

claude-ly 

子 shell 里会设置:

ANTHROPIC_API_KEY=xxx ANTHROPIC_BASE_URL=https://api.lingyaai.cn 

但退出 Claude Code 后,外部终端不会保留这些变量。

这就是多环境隔离的关键。


alias 简单,但不适合复杂多环境切换。

问题包括:

  1. 不方便写逻辑判断;
  2. 不方便检查 Key 是否为空;
  3. 不方便加载 ~/.claude-env
  4. 不方便做调试输出;
  5. 容易和 function 同名冲突;
  6. 不方便做子 shell 隔离。

例如如果已经有:

alias claude=‘…’ 

又定义:

claude() { … } 

zsh 可能报:

defining function based on alias claude' parse error near()’ 

所以最终配置中先执行:

unalias claude 2>/dev/null unalias claude-ly 2>/dev/null unalias claude-zp 2>/dev/null unalias claude-official 2>/dev/null 

防止旧 alias 干扰函数定义。


环境 认证变量 Base URL 模型配置 LingyaAI ANTHROPIC_API_KEY https://api.lingyaai.cn 可不固定模型,或使用 Claude 模型名 智谱 GLM Coding ANTHROPIC_AUTH_TOKEN https://open.bigmodel.cn/api/anthropic 使用 ANTHROPICDEFAULT*_MODEL 映射 官方 Claude 不注入 Key / Token 不注入 Base URL 使用官方登录态

智谱不能这样配:

export ANTHROPIC_API_KEY=”\(ZHIPU_CLAUDE_KEY" export ANTHROPIC_BASE_URL="https://open.bigmodel.cn/api/coding/paas/v4" export ANTHROPIC_MODEL="glm-5.1" 

正确配置是:

export ANTHROPIC_AUTH_TOKEN="\)ZHIPU_CLAUDE_KEY” export ANTHROPIC_BASE_URL=”https://open.bigmodel.cn/api/anthropic”

export ANTHROPIC_DEFAULT_HAIKU_MODEL=“glm-4.5-air” export ANTHROPIC_DEFAULT_SONNET_MODEL=“glm-4.7” export ANTHROPIC_DEFAULT_OPUS_MODEL=“glm-5.1”


执行:

source ~/.zshrc 

或者重新打开终端。


检查:

type claude 

如果输出:

claude is an alias for … 

查找旧 alias:

grep -n “alias claude” ~/.zshrc 

删除或注释掉:

# alias claude=‘…’

alias claude-zp=‘…’

然后:

source ~/.zshrc 

报错:

defining function based on alias claude' parse error near()’ 

说明 alias 和 function 同名。

解决:在定义函数前加入:

unalias claude 2>/dev/null unalias claude-ly 2>/dev/null unalias claude-zp 2>/dev/null unalias claude-official 2>/dev/null 

检查:

env | grep -E ‘ANTHROPIC|CLAUDE|LINGYA|ZHIPU’ 

如果看到:

LINGYA_CLAUDE_KEY=… ZHIPU_CLAUDE_KEY=… 

说明你可能在 ~/.zshrc 里直接写了:

source ~/.claude-env 

不推荐这样做。

应该只在子 shell 函数中执行:

claude-load-keys 

检查:

cat ~/.claude/settings.json 

如果看到:

{ “env”: {

"ANTHROPIC_AUTH_TOKEN": "xxx" 

} }

或:

{ “env”: {

"ANTHROPIC_API_KEY": "xxx" 

} }

改成:

{ “env”: {} } 

错误:

There’s an issue with the selected model (glm-5.1). It may not exist or you may not have access to it. 

不要设置:

export ANTHROPIC_MODEL=“glm-5.1” 

改用:

export ANTHROPIC_DEFAULT_HAIKU_MODEL=“glm-4.5-air” export ANTHROPIC_DEFAULT_SONNET_MODEL=“glm-4.7” export ANTHROPIC_DEFAULT_OPUS_MODEL=“glm-5.1” 

并确保智谱使用:

export ANTHROPIC_AUTH_TOKEN=“$ZHIPU_CLAUDE_KEY” export ANTHROPIC_BASE_URL=”https://open.bigmodel.cn/api/anthropic” 

Claude Code 提示:

Note: ctrl + z now suspends Claude Code, ctrl + _ undoes input. 

如果按了 Ctrl + Z,程序不是退出,而是挂起。

查看挂起任务:

jobs 

恢复前台:

fg 

杀掉挂起任务:

kill %1 

其中 %1jobs 中显示的任务编号。


不要把 API Key 明文贴到聊天、截图、博客、Git 仓库、日志中。

如果 Key 曾经暴露过,建议立即:

  1. 去对应平台删除旧 Key;
  2. 重新生成新 Key;
  3. 更新 /.claude-env
  4. 检查 Git 仓库是否提交过 Key;
  5. 检查 shell 历史记录中是否有 Key。

检查历史记录:

history | grep -E ‘ANTHROPIC|CLAUDE|sk-|ZHIPU|LINGYA’ 

zsh 历史文件通常是:

/.zsh_history 

这次成功配置的核心是:

1. 用 ~/.zshrc 定义多环境函数。

  1. 用 ~/.claude-env 单独保存 Key。
  2. 用子 shell 临时加载 Key,避免污染当前终端。
  3. LingyaAI 使用 ANTHROPIC_API_KEY。
  4. 智谱使用 ANTHROPIC_AUTH_TOKEN。
  5. 智谱 Base URL 使用 https://open.bigmodel.cn/api/anthropic。
  6. 智谱不要设置 ANTHROPIC_MODEL=“glm-5.1”。
  7. 智谱使用 ANTHROPICDEFAULT*_MODEL 做模型映射。
  8. ~/.claude/settings.json 保持 { “env”: {} }。
  9. 官方 Claude 使用 claude-official,不注入任何 Key 或 Base URL。

    最终可用命令:

    claude # 默认 LingyaAI claude-ly # LingyaAI claude-zp # 智谱 GLM Coding claude-official # Claude 官方账号 

    一句话总结:

    Shell 层用函数做入口,Key 文件只在子 shell 中加载,Claude settings 保持干净,不同服务按各自认证方式配置,才能稳定实现 Claude Code 多环境切换。 
小讯
上一篇 2026-04-20 14:27
下一篇 2026-04-20 14:25

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/270806.html