我在终端里跑 Claude Code 跑了快两个月,一直用默认的模型配置。说句实话,默认配置确实省心,该有的能力全都给你配好了。但后来有个项目需要统一走团队在 GLM 开放平台上的 API 额度,顺带想把单次长任务的成本降下来,我就认真折腾了一轮"把 Claude Code 换成 GLM-4.7 驱动"的完整配置。
整件事比我想象中简单得多。Claude Code 并不强制绑定某一个模型,它只是按照固定的 API 请求格式去调模型服务,而这个请求地址本身就是可以改的。GLM-4.7 的开放平台又恰好提供了 Anthropic 兼容网关,于是只要把几个环境变量改一下,Claude Code 最核心的能力——读仓库、调工具、改代码、跑命令、看结果再迭代——就全部接管为 GLM-4.7 来驱动了。
这篇文章就是这次配置的完整操作记录。内容包括前置准备、三种配置方式、配置后的验证流程、常见问题排查,以及一些常规文档里不会细写的搭配心得。适合已经用过 Claude Code、想换模型试水的开发者,也适合刚接触 Agent 编程、想用 GLM-4.7 低成本入门的读者。按下面的步骤走,二十分钟左右就能跑通。
1. 配置前先搞清楚:Claude Code 的模型接入到底怎么工作
很多人在第一步就卡住了,上来就把地址配错。根本原因是没有理解 Claude Code 和模型服务商之间是怎么通信的。先花几分钟把这个逻辑理顺,后面所有配置都能一眼看懂。
1.1 为什么第三方模型能"无缝"替换
Claude Code 本质上是一个 Agent 型编码工具。它和普通聊天窗口最大的区别是:它不止生成文字,还会主动调用工具——读取文件、执行 shell 命令、编辑代码、运行测试,然后根据执行结果继续推理。这一整套循环依赖模型的"工具调用"能力。
从通信层面看,Claude Code 发出的请求遵循 Messages API 格式,请求体里包含 system、messages、tools 这些字段,响应里除了纯文本,还会有 tool_use 这样的结构化工具调用块。所以任何能理解这种格式、能正确返回工具调用块的模型服务,理论上都能接进来。GLM-4.7 这类兼容网关所做的事,就是把这些请求翻译成自家模型的输入,再把模型的输出翻译回 Claude Code 认识的格式。
所以关键问题不是"Claude Code 支不支持某某模型",而是"你选的模型服务商有没有提供 Anthropic 兼容端点"。理解了这一点,后面配置就不会迷路。
1.2 四个环境变量各管什么
实际起作用的通常是这四个环境变量:
| 环境变量 | 作用 | 配置时注意 |
|---|---|---|
| ANTHROPIC_BASE_URL | 请求发往哪里 | 默认是官方地址,接 GLM 后要改成兼容网关地址 |
| ANTHROPIC_AUTH_TOKEN | 用什么身份认证 | 接第三方网关时用它携带 GLM 的 API Key |
| ANTHROPIC_MODEL | 主模型 ID | 核心编码、推理、工具调用都由它承担 |
| ANTHROPIC_SMALL_FAST_MODEL | 后台小模型 ID | 负责标题生成、上下文压缩、文件摘要等隐形任务 |
我见过不少配置翻车案例,就是把前两个配好了,却漏掉第四个。结果表面上看 Claude Code 一切正常,后台任务却一直在按默认模型计费,成本完全失控。举个例子:你让 Claude Code 总结一个超长文件时,它会自动触发后台压缩任务;开启一个新对话时,它要生成对话标题。这些任务如果都跑旗舰模型,一次两次感觉不到,一天下来量非常可观。
提示:接第三方网关时,建议统一用 ANTHROPIC_AUTH_TOKEN 做认证,并确保旧的 ANTHROPIC_API_KEY 已经 unset。两者同时存在时可能互相干扰,导致启动时报鉴权错误。
1.3 一个关键前提:Anthropic 兼容网关
这里必须强调一个高频踩坑点:不是随便一个 OpenAI 兼容地址都能用。很多人习惯把某个https://xxx/v1/chat/completions当成万能地址,但它和 Claude Code 需要的.../v1/messages格式完全不同,两者连路径都对不上。如果模型服务商只提供 OpenAI 兼容接口,那中间必须加一层转换服务,请求先翻译成 OpenAI 格式,返回再翻译回来——多一层转换就多一个失败点,出了问题时你甚至分不清是模型本身不行,还是转换层出了问题。
所以我个人的建议是:优先用服务商官方提供的 Anthropic 兼容网关。GLM 开放平台在模型广场和接入文档里给出了专门面向 Claude Code 的说明,网关地址一般直接写在控制台或文档页里,形如https://<平台域名>/api/anthropic。配置时认准这个路径,不要自己拼接。
2. 动手前准备:环境、密钥与连通性验证
配置本身只要几分钟,但前置准备如果偷懒,后面排查会非常难受。我习惯按"环境、密钥、连通性"三步走,每一步都有明确的验证标准。
2.1 安装与基础环境自检
Claude Code 依赖 Node.js 运行时。先确认版本:
node -v npm -v版本太旧会遇到各种莫名其妙的兼容问题。我的建议是 Node.js 18 以上,直接上 20 LTS 最稳妥。安装 Claude Code 本身很简单:
npm install -g @anthropic-ai/claude-code claude --version如果你发现 npm 安装速度很慢,可以先配置 registry 镜像再装。装完后能正常输出版本号,这一步就算过了。
2.2 获取 GLM-4.7 的 API Key
接下来去 GLM 开放平台控制台创建一个 API Key。几个容易被忽略的细节:
- Key 类型和权限要看清楚,有些平台区分不同用途,选错会导致请求被拒。
- Key 创建后通常只展示一次,一定要当场复制并妥善保存,丢了就得重新创建。
- 确认账户有可用余额或免费额度,否则配置完成后第一个请求就返回 402 或 429,你会误以为是配置问题。
密钥不要放在会被提交的代码或仓库文件里。后面讲配置方式时会专门说明怎么安全存放。
2.3 先别急着配,用 curl 验证网关
我强烈建议在配置 Claude Code 之前,先用 curl 直接打网关。这一步能把"网关地址"和"密钥"两件事先验证干净,相当于把两个变量变成零个变量。否则一旦配置出错,你会同时面对"密钥错了"和"地址错了"两种可能,排查效率极低。
以一个最小请求为例:
curl https://<平台域名>/api/anthropic/v1/messages \ -H "x-api-key: 你的GLM_API_KEY" \ -H "anthropic-version: 2023-06-01" \ -H "content-type: application/json" \ -d '{ "model": "glm-4.7", "max_tokens": 1024, "messages": [ {"role": "user", "content": "用一句话说明你是谁"} ] }'如果返回了正常的 message 内容,说明网关地址和密钥都没问题。如果返回 401,多半是密钥或认证头写法不对;如果返回 404,多半是地址压根不是兼容路径。认证头具体用 x-api-key 还是 Authorization: Bearer,以网关文档为准——curl 里怎么通过,Claude Code 里就用对应的环境变量,两者保持一致。
注意:curl 验证通过不代表万事大吉,但至少排除了"密钥不可用、地址不可达"这两类基础故障。后面如果还有问题,就可以放心地把注意力集中在模型 ID 和工具调用上。
2.4 这一步不需要做的事
这个阶段最容易犯的错是过度准备。有人会在中途重启服务、改系统级配置文件、装各种辅助工具,其实通通不需要。Claude Code 每次启动都是从环境变量和配置文件里读取模型设置,改完重启终端进程即可,不涉及任何系统层面的修改。
3. 三种配置方式,按使用场景选一个
配置方式本质上只有一种:把 BASE_URL、AUTH_TOKEN、MODEL、SMALL_FAST_MODEL 这几个值告诉 Claude Code。不同方式只是载体不同、生效范围不同,适用场景也各不相同。
3.1 临时切换:环境变量方案
环境变量方案适合第一次验证、临时切换,或者不想永久改动默认配置的场景。在终端里执行:
export ANTHROPIC_BASE_URL="https://<平台域名>/api/anthropic" export ANTHROPIC_AUTH_TOKEN="你的GLM_API_KEY" export ANTHROPIC_MODEL="glm-4.7" export ANTHROPIC_SMALL_FAST_MODEL="glm-4.7-air" claude几个注意点:
- 这些 export 只对当前终端会话生效,关掉终端就自动失效,不会污染全局配置。
- 如果之前设置过 ANTHROPIC_API_KEY,先执行
unset ANTHROPIC_API_KEY,再启动 claude。不想手动 unset 的话,干脆新开一个干净的终端窗口。 - 启动后立刻输入
/status查看当前会话的模型信息,确认是不是 GLM-4.7。
这套方案最大的缺点是每次都要敲一遍,容易漏。所以它适合"验一次",不适合"长期用"。
3.2 一劳永逸:用户级 settings.json
想长期用 GLM-4.7 驱动 Claude Code,我推荐把配置写进用户级配置文件。Claude Code 会读取~/.claude/settings.json,你可以在这个文件里用 env 字段声明环境变量。
直接编辑文件,或者在 claude 里输入/config后手动改:
{ "env": { "ANTHROPIC_BASE_URL": "https://<平台域名>/api/anthropic", "ANTHROPIC_AUTH_TOKEN": "你的GLM_API_KEY", "ANTHROPIC_MODEL": "glm-4.7", "ANTHROPIC_SMALL_FAST_MODEL": "glm-4.7-air" } }保存后重启 claude,这套配置会对当前用户的所有项目生效。以后无论你在哪个目录启动 Claude Code,请求都会自动走 GLM-4.7。想换回默认模型时,把 env 块清空或删除即可。
我个人日常就是用这种方式,因为它在"全局生效"和"可维护性"之间最平衡。唯一要提醒的是:用户级配置的改动会影响这台机器上所有项目,如果你同时维护多个模型切换需求,可以结合后面的 shell 函数方案,而不是频繁改这个文件。
3.3 团队协作:项目级 settings.json 与 settings.local.json
如果你在公司仓库或开源项目里使用,还有项目级配置和本地配置两层可用:
- 项目级配置放在仓库根目录
.claude/settings.json,跟随仓库一起提交,团队 clone 下来就自动生效。适合统一团队的主模型设置。 - 本地敏感配置放在
.claude/settings.local.json,这个文件默认被 git 忽略,适合放 AUTH_TOKEN、BASE_URL 这类与个人密钥强相关的值。
典型的两层拆分是这样的。
.claude/settings.json(可以进版本库):
{ "env": { "ANTHROPIC_MODEL": "glm-4.7" } }.claude/settings.local.json(不进版本库):
{ "env": { "ANTHROPIC_BASE_URL": "https://<平台域名>/api/anthropic", "ANTHROPIC_AUTH_TOKEN": "你的GLM_API_KEY", "ANTHROPIC_SMALL_FAST_MODEL": "glm-4.7-air" } }这样新同事 clone 仓库后,即使没有任何个人配置,也能自动用上项目指定的 GLM-4.7 主模型,只需要在自己的 local 文件里填入密钥。需要强调一句:永远不要把 AUTH_TOKEN 写进会进版本库的 settings.json,否则密钥等于裸奔。我见过真实的泄露案例,虽然最后没有造成实际损失,但改动历史里留下的密钥记录清理起来非常麻烦。
提示:项目级配置、用户级配置、环境变量同时存在时,生效优先级在不同版本里略有差异。不要死记规则,配置完成后用
/status和会话日志双重确认当前实际生效的是哪个模型。
4. 配置完成后,这样验证才算数
配置完不是"能启动"就行,要按层次逐步验证,确保不只是能聊天,而是能干活。
4.1 三分钟基础验证
先做最简单的一层:
- 启动 claude。
- 输入
/status,确认 model 字段显示的是 glm-4.7 而不是默认模型。 - 随便问一个编程问题,比如"请用 Python 写一个二分查找函数",看能否正常生成代码。
这一步通过,说明最基本的请求链路是通的。但还远远不够,因为聊天能通过,不代表工具调用能通过。很多模型接进来后聊天很流畅,一让它执行命令就卡住,问题正是出在工具调用上。
4.2 用真实任务验证工具调用
Claude Code 的杀手锏是能操作你的终端和文件系统。所以验证核心要看它能不能调用工具,而不是只会聊天。找一个可逆的小任务,比如:
- 让它"在当前目录创建 test_glm.md 并写入三行内容";
- 让它"执行 ls 并告诉我有哪些文件"。
如果在执行过程中,你能看到 Claude Code 自主选择了 Bash 工具或文件编辑工具,并且根据执行结果给出了下一步动作,说明工具调用链路是通的。如果它只会回复"我建议你手动执行",那大概率是工具调用格式转换出了问题,需要排查网关的兼容度。
4.3 翻会话日志确认模型与用量
这是我个人最推荐的验证手段。Claude Code 会在~/.claude/projects/目录下按项目留存会话 JSONL 日志。你可以打开最近一次会话日志,搜索 model 字段,看看每次请求到底被路由到了哪个模型、用了多少 token。
日志里的记录大概长这样:
{"type":"assistant","message":{"model":"glm-4.7","usage":{"input_tokens":1280,"output_tokens":342}}} {"type":"assistant","message":{"model":"glm-4.7-air","usage":{"input_tokens":512,"output_tokens":96}}}我实际排查过几次"费用不对"的问题,全是靠日志定位的。比如后台任务误用了主模型、或者小模型没生效,单看界面根本发现不了,打开日志一眼就能看到每次调用的 model 名和 usage 计数。这比任何界面上的状态显示都靠谱。
5. 常见问题与排查实录
接入过程中我踩过不少坑,也帮几位朋友排查过类似问题。下面是最高频的几个问题,先整理成速查表,再逐条展开。
| 现象 | 可能原因 | 快速定位手段 |
|---|---|---|
| 401 Unauthorized / Invalid API Key | 密钥错误、认证头写法不对、API_KEY 与 AUTH_TOKEN 混用 | env | grep ANTHROPIC自查;用 curl 先验证 |
| 404 Not Found | BASE_URL 指向了 OpenAI 兼容地址,不是 Anthropic 兼容网关 | 用 curl 打.../v1/messages确认路径 |
| model not found / 模型不存在 | 模型 ID 与平台型号不完全一致 | 对照官方模型 ID,注意大小写与版本后缀 |
| 请求卡住、SSE 中断 | 网关不支持流式或工具调用;小模型型号不匹配 | 换官方最新网关;检查 SMALL_FAST_MODEL |
| 429 Too Many Requests | 账户并发与额度限制 | 控制台查额度;降低同时打开的会话数 |
| 长任务中途掉上下文 | 模型上下文窗口比默认假设小 | 分阶段任务;用 /compact 压缩 |
5.1 401:先确认密钥变量有没有被干扰
最常见的原因不是密钥本身错误,而是环境变量打架。我遇到过一次配置,AUTH_TOKEN 明明正确,但系统里还留着旧的 ANTHROPIC_API_KEY,Claude Code 优先读了后者,网关直接返回 401。
排查顺序建议是:先执行env | grep ANTHROPIC看当前环境里有哪些变量;确认只有一个认证来源;再拿同样的密钥用 curl 打网关,排除密钥本身的问题。这一步做完,401 基本都能定位到原因。
5.2 404:BASE_URL 拼错是重灾区
Claude Code 请求的真实路径是/v1/messages。如果你把 BASE_URL 配成了https://xxx/v1,网关返回 404 非常正常。正确写法通常是平台文档里给出的完整前缀,一般是https://<平台域名>/api/anthropic,Claude Code 会在它后面自动拼接/v1/messages。
另一个隐蔽问题是:有些平台同时提供多个网关域名,不同区域可能不通用,密钥也不能跨网关混用。如果你用的是 A 站的密钥配 B 站的网关,返回 401 的概率极大。
5.3 模型 ID 对不上
GLM 平台对模型 ID 的写法是有讲究的。不同版本、不同尺寸的模型 ID 可能带后缀,比如glm-4.7和某个带日期后缀的版本号并不完全等价。配置里写错一个字符,就会报 model not found。
正确做法是:以官方模型广场或控制台实际列出的 ID 为准,不要靠记忆。配置完成后,在会话里用/model查看当前生效的模型名,确认与后台一致。
5.4 卡顿与中断:流式与工具调用优先排查
如果你发现 Claude Code 能正常开始回答,但经常中途断掉,或者工具调用后没有后续动作,大概率是网关的流式响应或工具返回格式有问题。这时候建议先做两件事:
第一,把 Claude Code 升级到最新版本。模型兼容性修补通常会随版本更新推进,很多问题在新版里已经被修掉。第二,优先换官方 Anthropic 兼容网关,而不是继续折腾第三方转换层。转换层在普通聊天场景下表现尚可,一旦涉及复杂工具调用,格式转换错误几乎不可避免。
5.5 429:额度有限,不只是配置问题
GLM-4.7 如果同时开多个 claude 会话,很容易触发并发限制。严格来说 429 不是配置问题,但在"配置有没有生效"的排查阶段,它很容易混淆视听。遇到 429,先别改配置,去控制台看额度与并发说明,必要时把不用的 claude 会话关掉再试。
6. 进阶心得:模型搭配、切换脚本与安全红线
配置跑通只是开始。这段时间实际用下来,有几个配置之外的经验我觉得比配置本身更值得分享。
6.1 主模型与后台小模型的搭配
我建议主模型用 GLM-4.7 这类旗舰型号,处理核心编码和工具调用;SMALL_FAST_MODEL 选配套的轻量型号,比如 air 或 flash 级别。
原因很简单:后台任务的调用频率远高于你的主对话。文件摘要、上下文压缩、标题生成这类任务又短又快,用小模型处理,一天下来能省下很可观的 token。在我自己的使用统计里,小模型的调用次数经常是主模型的好几倍,这个数量级差距直接决定了账单大小。所以配置时千万不要省略这个变量——省略的后果不是功能不可用,而是账单悄悄变大。
6.2 一键切换脚本与日常使用习惯
如果你不想把 GLM-4.7 设成全局默认,又希望随时切换,可以在 shell 配置文件里放一个函数。我自己的做法是:
claude-glm() { export ANTHROPIC_BASE_URL="https://<平台域名>/api/anthropic" export ANTHROPIC_AUTH_TOKEN="你的GLM_API_KEY" export ANTHROPIC_MODEL="glm-4.7" export ANTHROPIC_SMALL_FAST_MODEL="glm-4.7-air" claude unset ANTHROPIC_BASE_URL ANTHROPIC_AUTH_TOKEN ANTHROPIC_MODEL ANTHROPIC_SMALL_FAST_MODEL }这样平时启动 claude 还是默认模型,想用 GLM-4.7 时执行claude-glm即可。退出 claude 后环境变量自动清理,不会影响其他终端。密钥也只存在于 shell 函数里,不写进任何配置文件。对我这种需要在两种模型之间反复切换的人来说,这个方案比反复改 settings.json 顺手太多。
6.3 几条安全红线
最后说几条我自己一直遵守的底线:
- 密钥不进版本库。项目级 settings.json 只放模型 ID,密钥一律放 settings.local.json 或环境变量。
- 本地配置文件设好权限。settings.local.json 可以执行
chmod 600,避免同机其他用户读到。 - 定期核对用量。Claude Code 里的
/cost可以看最近会话费用,再配合会话日志确认请求模型与 token 消耗是否正常。 - 升级要谨慎。Claude Code 大版本升级后,先用环境变量方式验证一遍 GLM 网关,再决定要不要彻底切过去。
这些规矩看着简单,但都是实打实换来的教训。尤其是密钥进版本库那一次,虽然最后没有外泄,但清理历史记录的过程足够让人长记性。根据我个人的实操体会,把 Claude Code 接到 GLM-4.7 这件事,难点从来不在"改配置",而在于理解请求格式和兼容网关这两层概念。把第一节的逻辑吃透,后面的所有步骤都只是重复执行而已。如果你现在正卡在某个报错上,建议先退回 curl 验证那一步,把底色打干净,再往上走。