1. Ubuntu 上跑 Claude Code + GLM4.5,为什么 Key 管理最容易翻车
Claude Code 是 Anthropic 官方出的终端编码代理工具,能在命令行里直接读写项目文件、跑测试、改 bug,配合一个足够强的模型,体验接近把一个会写代码的同事塞进终端。GLM4.5 是智谱的旗舰模型,在代码补全、长上下文理解上的表现被很多人拿来和 Claude Sonnet 4 对比,魔搭社区每天提供 2000 条免费请求额度,个人日常写代码基本用不完。把这两者拼在一起,就是一套几乎零成本的本地编码工作流,适合学生、独立开发者、以及想先试水 AI 编码再决定要不要付费的人。
但真正动手时,坑往往不在模型本身,而在 Key。Claude Code 默认认 Anthropic 的 Key,GLM4.5 走的是魔搭的 OpenAI 兼容接口,中间还得靠 claude-code-router 做协议转换。于是你手里会同时出现魔搭令牌、路由配置里的 api_key、环境变量里的各种 KEY,散落在~/.claude-code-router/config.json、settings.json、config.toml好几个文件里。改一次模型要翻三个地方,换台机器又要重来一遍。
这篇的做法是:用 TaoToken 作为统一 Key 通道,把模型接入收敛到一个 API 地址和一把 Key 上,再在 Claude Code 的配置骨架里写死。这样 Ubuntu 上从装 Node.js 到跑通第一条请求,链路是清晰的,出问题也知道去哪查。下面按顺序走,命令都可以直接复制。
2. 前置准备:Node.js 环境校验与 TaoToken 统一 Key
2.1 先确认 Node.js 版本够不够
Claude Code 要求 Node.js 18 及以上。Ubuntu 20.04 自带的源里 Node 版本偏低,直接apt install nodejs很可能装到 12 或 14,后面npm install -g会报引擎不兼容。先查一下:
node -v npm -v如果输出低于 v18,别硬扛,用 nvm 装一个干净的版本最省事:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash source ~/.bashrc nvm install 20 nvm use 20 node -v看到v20.x.x就对了。如果你习惯用 conda,也可以建一个 Node 20 的环境,效果一样,关键是node -v必须 ≥ 18。
2.2 装 Claude Code 本体
npm install -g @anthropic-ai/claude-code装完重开一个终端,验证:
claude -v能打印版本号说明二进制已经进 PATH。如果提示command not found,多半是 npm 全局 bin 目录没进 PATH,用npm config get prefix看一下路径,把它加到~/.bashrc的export PATH里再source一次。
2.3 拿 TaoToken 的统一 Key
打开官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,注册后在控制台创建 API Key。这个 Key 就是你后面所有配置里唯一要填的凭证,模型切换、路由转发都靠它,不用再分别去记魔搭的令牌。
创建入口在控制台的 API Keys 页面:https://taotoken.net/console/api-keys?utm_source=taotoken_aicg_blog_end&utm_campaign=rewrite 。API 的基础地址统一用 https://taotoken.net/api ,注意这个地址不带任何查询参数,配置里直接写死即可。
提示:Key 只在创建时完整显示一次,复制后先存到密码管理器或临时文件,别直接贴在会提交到 git 的配置里。
3. 可复制配置:settings.json 与 config.toml 骨架
Claude Code 的配置分两层:一层是 Claude Code 自己的settings.json,管模型和 API 端点;另一层是 claude-code-router 的config.toml(或config.json),管请求怎么转发到具体模型。两层的 Key 都指向 TaoToken,这样才叫统一。
3.1 安装路由与配置工具
npm install -g @musistudio/claude-code-router npm install -g @leason/claude-code-config第一条装路由器,第二条是帮你生成配置目录的辅助工具。装完先跑一次初始化,让它把默认目录建出来:
ccr-modelscope弹框里粘贴你的 TaoToken Key。这一步只是把目录结构铺好,真正的配置我们手动写,避免它默认塞进去的魔搭直连地址。
3.2 写 Claude Code 的 settings.json
路径在~/.claude/settings.json,没有就新建:
mkdir -p ~/.claude nano ~/.claude/settings.json内容如下,把sk-你的TaoTokenKey换成真实 Key:
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_API_KEY": "sk-你的TaoTokenKey", "ANTHROPIC_MODEL": "ZhipuAI/GLM-4.5" } }这里ANTHROPIC_BASE_URL指向 TaoToken 的 API 根地址,Claude Code 会把请求发到这里,由 TaoToken 侧完成到 GLM4.5 的转发。ANTHROPIC_MODEL写模型全名,大小写和斜杠都要对。
3.3 写路由器的 config.toml
路径在~/.claude-code-router/config.toml:
nano ~/.claude-code-router/config.tomlLOG = true [Providers.taotoken] name = "taotoken" api_base_url = "https://taotoken.net/api/v1/chat/completions" api_key = "sk-你的TaoTokenKey" models = ["ZhipuAI/GLM-4.5"] [Router] default = "taotoken,ZhipuAI/GLM-4.5" think = "taotoken,ZhipuAI/GLM-4.5" background = "taotoken,ZhipuAI/GLM-4.5" longContext = "taotoken,ZhipuAI/GLM-4.5"四个路由项都指向同一个模型,是为了避免 Claude Code 在不同任务类型下(思考、后台、长上下文)找不到对应 provider 而报错。等你以后想混用别的模型,只改这里就行,Key 不用动。
改完重启路由器:
ccr restart3.4 参数对照表
| 配置项 | 文件 | 作用 | 建议值 |
|---|---|---|---|
| ANTHROPIC_BASE_URL | settings.json | 请求出口 | https://taotoken.net/api |
| ANTHROPIC_API_KEY | settings.json | 统一凭证 | TaoToken Key |
| api_base_url | config.toml | 路由转发目标 | https://taotoken.net/api/v1/chat/completions |
| default | config.toml | 默认模型路由 | taotoken,ZhipuAI/GLM-4.5 |
| LOG | config.toml | 是否打日志 | true(排障期) |
4. 验证请求:从连通性测试到第一条编码指令
配置写完别急着开 Claude Code,先单独验证 API 通不通,这样出问题能快速定位是网络、Key 还是模型名。
4.1 curl 测连通性
curl https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer sk-你的TaoTokenKey" \ -H "Content-Type: application/json" \ -d '{ "model": "ZhipuAI/GLM-4.5", "messages": [{"role": "user", "content": "用一句话说明什么是递归"}] }'返回 JSON 里choices[0].message.content有正常文字,说明 Key、地址、模型名三者都对。如果返回 401,是 Key 问题;返回 404,多半是模型名拼错或路径少了/v1。
4.2 启动 Claude Code
ccr stop ccr codeccr stop清掉旧缓存,ccr code拉起 Claude Code 并挂上路由。进入交互界面后,随便给个任务试试:
帮我看看当前目录下有哪些文件,并解释 package.json 里的依赖如果它能列出文件、读出内容并给出解释,整条链路就通了。实测下来,GLM4.5 在解释代码结构、生成单元测试这类任务上响应很快,长文件也能吃进去。
4.3 验证模型身份
想确认当前跑的确实是 GLM4.5,可以在 Claude Code 里直接问:
你当前使用的模型名称是什么或者在 TaoToken 的模型对话页面 https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_campaign=rewrite 单独发一条消息,对比响应风格。两边一致,说明路由没串。
5. 本篇常见报错排查
5.1 claude: command not found
npm 全局 bin 没进 PATH。执行npm config get prefix,把输出的路径拼上/bin加到~/.bashrc:
export PATH="$PATH:$(npm config get prefix)/bin" source ~/.bashrc5.2 401 Unauthorized
三种可能:Key 复制时带了空格、Key 已失效、或者 settings.json 和 config.toml 里的 Key 不一致。用grep -r "sk-" ~/.claude ~/.claude-code-router把两处都查一遍,确保是同一把。
5.3 模型名报错 model not found
GLM4.5 在路由里的写法是ZhipuAI/GLM-4.5,斜杠和大小写都不能错。config.toml 里models数组和Router四项必须完全一致,改一处漏一处就会报这个错。
5.4 请求超时或卡住
先看~/.claude-code-router/下的日志文件(LOG 开了才有)。如果是连接超时,检查本机 DNS 和网络出口是否正常访问 https://taotoken.net/api 。如果是响应中途断流,把 config.toml 里 provider 的流式开关关掉再试,排除流式解析问题。
5.5 Node 版本导致的引擎报错
npm install -g时报Unsupported engine,就是 Node 低于 18。回到 2.1 节用 nvm 换版本,别去改 package.json 的 engines 字段硬绕。
6. 把 Key 收敛到一处,长期编码更省心
整套流程跑下来,你会发现真正省事的地方在于:Ubuntu 上不管装多少工具,Key 只有一把,地址只有一个。以后想换模型、加 provider,改 config.toml 的 Router 就行,settings.json 不用动;想在新机器上复现,把两个配置文件拷过去、填上同一把 Key 即可。
如果你打算长期用 Claude Code 做日常开发,甚至挂 Agent 跑批量任务,可以了解一下 Coding Plan https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_campaign=rewrite ,它针对高频编码场景做了额度规划,比按次调用更划算。接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_campaign=rewrite ,里面把各语言的调用示例和参数说明列得很细,遇到配置细节可以直接对照。
最后留一个我踩过的坑:改完 config.toml 一定要ccr restart,光重启终端不生效,路由还是读的旧配置。这个动作花两秒,能省掉半小时的无效排查。