1. 为什么大家都在折腾 GLM-4.6 接入 Claude Code
如果你最近刷技术社区,大概率会看到 GLM-4.6 这个名字反复出现。它在多个代码能力评测里冲到第一梯队,HumanEval、MBPP 这类基准测试的成绩相当能打,中文代码理解更是它的主场。但真正让开发者兴奋的不是榜单,而是它现在能通过 ModelScope 的免费额度接进 Claude Code——也就是说,你手里那套已经用顺手的 Claude Code 工作流,可以换成 GLM-4.6 来驱动,成本几乎为零。
Claude Code 本身是 Anthropic 出的命令行编程助手,交互方式很直接:你在终端里描述需求,它读你的项目文件、改代码、跑命令。它默认连的是 Claude 系列模型,但通过路由工具可以把请求转发到别的模型上。GLM-4.6 就是目前最值得一试的替代目标之一,原因有三点:代码生成质量高、中文需求理解准、ModelScope 提供免费推理额度。
这篇文章面向的是想零成本体验 GLM-4.6 代码能力的开发者,尤其是已经在用或准备用 Claude Code 的人。我会从 Node.js 环境准备讲起,一步步走到 API Key 获取、settings 配置、真实补全验证,最后把常见的报错挨个拆开。全程可复制,你跟着敲就行。
需要先说明一个前提:Claude Code 的模型接入依赖一个路由层,因为 Claude Code 原生只认 Anthropic 的接口格式。我们要做的是在中间加一个转换层,把 Claude Code 的请求翻译成 GLM-4.6 能听懂的格式。这个转换层用现成的工具就能搞定,不需要你自己写代码。
整个链路是这样的:Claude Code → 路由工具 → ModelScope 推理 API → GLM-4.6。每一环我都会给出具体配置。你可能会担心"免费额度够不够用",实测下来个人日常开发完全够,后面我会讲怎么把额度用在刀刃上。
先明确一下你需要的三样东西:一个 ModelScope 账号(免费注册)、一个完成实名认证的阿里云账号(ModelScope 绑定要用)、本地装好的 Node.js 环境(建议 18 以上)。这三样齐了,剩下的就是复制粘贴配置的事。
2. 前置准备:Node.js 环境与 ModelScope 免费 API Key 获取
这一节把地基打好。很多人卡在第一步不是因为难,而是因为版本不对或者账号没绑对。我按顺序拆开讲。
2.1 Node.js 环境检查与安装
Claude Code 和路由工具都是 npm 包,所以 Node.js 是硬性依赖。先确认你本地的版本:
node -v npm -v如果输出是 v18.x 或更高,可以直接跳过安装。如果低于 18,或者提示 command not found,那就装一个。macOS 用户推荐用 nvm 管理版本:
# 安装 nvm(如果还没装) curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash # 重新加载 shell 配置 source ~/.zshrc # 或 source ~/.bashrc # 安装并使用 Node.js 20 nvm install 20 nvm use 20 node -vWindows 用户直接去 Node.js 官网下载 LTS 安装包,一路下一步即可。装完在 PowerShell 里跑node -v验证。这里有个坑:如果你之前装过旧版本,装新版本后要确认 PATH 指向的是新版本,否则 npm 全局包会装到旧环境里,后面调用时找不到命令。
2.2 注册 ModelScope 并绑定阿里云
打开 ModelScope 官网,用手机号或邮箱注册。注册完成后进入个人中心,找到账号绑定相关的入口,把阿里云账号绑上去。这一步是必须的,因为 ModelScope 的推理 API 免费额度依赖阿里云账号的实名认证。
绑定流程大致是:点击绑定 → 跳转阿里云登录 → 授权 → 回到 ModelScope 确认。如果你还没有阿里云账号,在跳转页面直接注册一个,实名认证用支付宝扫脸几分钟就过。
绑定成功后,回到 ModelScope 的个人中心,找到 API 管理或访问令牌相关的页面。这里能看到你的 API Key。点生成,把密钥复制下来存好。这个 Key 就是后面配置里要填的东西。
注意:API Key 只在生成时完整显示一次,关掉页面就看不到了。如果没存,只能重新生成一个。建议直接存进密码管理器。
2.3 安装 Claude Code 与路由工具
环境齐了,开始装工具。Claude Code 本体和路由工具都要全局安装:
# 安装 Claude Code npm install -g @anthropic-ai/claude-code # 安装路由工具(负责把请求转发到 GLM-4.6) npm install -g @musistudio/claude-code-router装完后验证一下:
claude --version ccr --version两个命令都能输出版本号就说明装好了。如果提示命令找不到,多半是 npm 全局 bin 目录没进 PATH。用npm config get prefix看一下全局路径,把它加到 PATH 里。
这里解释一下路由工具的作用。Claude Code 发出的请求是 Anthropic 格式的,而 ModelScope 的 GLM-4.6 接口是 OpenAI 兼容格式的。路由工具在中间做协议转换,同时负责把模型名、API 地址、密钥这些信息注入进去。没有它,Claude Code 没法直接跟 GLM-4.6 对话。
装好之后先别急着配置,下一节我们直接写配置文件。整个配置的核心就是一个 JSON 文件,把 Provider 和 Router 两段填对就行。
3. 可复制配置:settings 与 config.json 逐项拆解
这一节是全文的核心,配置写对了后面就顺了。Claude Code 的模型切换依赖路由工具的配置文件,路径在用户目录下的.claude-code-router/config.json。我们分两步:先写路由配置,再确认 Claude Code 的 settings。
3.1 路由配置文件 config.json
先创建配置目录(如果不存在):
mkdir -p ~/.claude-code-router然后编辑~/.claude-code-router/config.json,填入以下内容:
{ "Providers": [ { "name": "modelscope", "api_base_url": "https://api-inference.modelscope.cn/v1/chat/completions", "api_key": "你的ModelScope免费API密钥", "models": ["ZhipuAI/GLM-4.6"], "transformer": { "use": [ ["maxtoken", { "max_tokens": 65536 }], "enhancetool" ] } } ], "Router": { "default": "modelscope,ZhipuAI/GLM-4.6" } }逐项说明一下,别填错:
name是 Provider 的标识,随便起但要和 Router 里对应。api_base_url是 ModelScope 的推理接口地址,注意结尾是/v1/chat/completions,这是 OpenAI 兼容格式的路径。api_key填你刚才在 ModelScope 生成的密钥。models数组里是模型 ID,GLM-4.6 在 ModelScope 上的标识是ZhipuAI/GLM-4.6,大小写要一致。
transformer这一段是关键。maxtoken把最大输出 token 提到 65536,因为 GLM-4.6 支持长上下文,不设的话默认值可能偏小,生成长代码会被截断。enhancetool是增强工具调用能力的转换器,Claude Code 会频繁调用文件读写、命令执行这类工具,加上它兼容性更好。
Router.default指定默认走哪个 Provider 和模型,格式是Provider名,模型ID,中间用英文逗号,不能有空格。
3.2 Claude Code settings 确认
Claude Code 本身有一个 settings 文件,通常在~/.claude/settings.json。如果你之前配过别的模型,需要确认它没有覆盖路由工具的设置。一个干净的 settings 大致长这样:
{ "env": { "ANTHROPIC_BASE_URL": "http://127.0.0.1:3456", "ANTHROPIC_API_KEY": "dummy-key" } }这里的ANTHROPIC_BASE_URL指向本地路由工具的监听端口(默认 3456),ANTHROPIC_API_KEY填任意占位值即可,因为真正的密钥在路由配置里。路由工具启动后会在这个端口上接收 Claude Code 的请求,再转发给 ModelScope。
注意:如果你用的是 Claude Code 的 OAuth 登录模式,需要先退出登录,改用 API Key 模式,否则请求不会走本地路由。执行
claude后按提示选择 API Key 方式即可。
3.3 启动路由并验证配置加载
配置写完后,启动路由工具:
ccr code这个命令会启动路由服务并拉起 Claude Code。如果只想单独启动路由服务,用ccr start。启动后你会看到类似Server running on http://127.0.0.1:3456的日志。
如果启动时报 JSON 解析错误,多半是配置文件里有中文引号或者多余的逗号。用cat ~/.claude-code-router/config.json | python -m json.tool校验一下格式,能正常输出就说明 JSON 合法。
配置这一步最容易出问题的地方是api_base_url写错。有人会漏掉/v1,有人会把chat/completions写成completions,都会导致后面请求 404。照着上面的原文复制,别手敲。
4. 验证请求:一次真实的代码补全测试
配置对不对,跑一次就知道。这一节我们用 Claude Code 做一次真实的代码补全,确认 GLM-4.6 正常响应。
4.1 发起第一个请求
在一个空目录里初始化一个测试项目:
mkdir glm-test && cd glm-test claude进入 Claude Code 交互界面后,输入一个具体的编码需求:
用 Python 写一个函数,读取当前目录下所有 .log 文件, 统计每个文件中 ERROR 出现的次数,返回一个字典, key 是文件名,value 是次数。加上异常处理和中文注释。回车后,Claude Code 会把请求发给本地路由,路由转发给 ModelScope 的 GLM-4.6。正常情况下几秒内你会看到模型返回的代码,并且 Claude Code 会询问是否写入文件。
如果一切正常,你会看到类似这样的返回:
import os import glob def count_errors_in_logs(directory: str = ".") -> dict: """ 统计指定目录下所有 .log 文件中 ERROR 出现的次数。 :param directory: 要扫描的目录,默认为当前目录 :return: 字典,key 为文件名,value 为 ERROR 出现次数 """ result = {} try: log_files = glob.glob(os.path.join(directory, "*.log")) if not log_files: print("未找到 .log 文件") return result for file_path in log_files: try: with open(file_path, "r", encoding="utf-8") as f: content = f.read() count = content.count("ERROR") result[os.path.basename(file_path)] = count except (IOError, UnicodeDecodeError) as e: print(f"读取文件 {file_path} 失败: {e}") result[os.path.basename(file_path)] = -1 except Exception as e: print(f"扫描目录时出错: {e}") return result if __name__ == "__main__": print(count_errors_in_logs())代码结构清晰,异常处理分层,中文注释到位。这说明 GLM-4.6 已经通过路由正常响应了。
4.2 确认模型身份
想确认当前用的确实是 GLM-4.6 而不是别的模型,可以直接问它:
你是什么模型?由谁开发的?GLM-4.6 通常会回答自己是智谱 AI 开发的 GLM 系列模型。如果它回答自己是 Claude,那说明请求没走路由,还在用 Anthropic 的接口,需要回头检查 settings 里的ANTHROPIC_BASE_URL是否指向了本地端口。
4.3 测试工具调用能力
Claude Code 的核心能力是读写文件和执行命令,所以工具调用必须正常。试一个需要多步操作的请求:
在当前目录创建一个 requirements.txt, 写入 flask 和 requests 两个依赖,然后读取它并打印内容。正常的话,Claude Code 会调用写文件工具创建requirements.txt,再调用读文件工具把内容读出来。如果工具调用失败,通常是transformer里的enhancetool没生效,检查配置里这一项是否拼写正确。
实测下来,GLM-4.6 在工具调用上的表现比较稳,偶尔会有参数格式的小偏差,但 Claude Code 的重试机制一般能兜住。如果连续失败,把请求拆小一点再试。
5. 常见报错排查:401、local proxy failed 与 reading choices
配置和验证过程中,报错基本集中在几个地方。这一节我把最常见的四类错误拆开,给出定位方法和修复步骤。
5.1 401 Unauthorized
这是最常见的错误,日志里会显示401或invalid api key。原因有三个可能:
第一,API Key 填错了。回 ModelScope 个人中心重新复制一次,注意不要带空格。第二,Key 过期或被重置。重新生成一个替换。第三,api_base_url和 Key 不匹配,比如把 ModelScope 的 Key 填到了别的 Provider 配置里。
排查命令:
# 直接测试 ModelScope 接口是否通 curl -X POST https://api-inference.modelscope.cn/v1/chat/completions \ -H "Authorization: Bearer 你的API密钥" \ -H "Content-Type: application/json" \ -d '{"model":"ZhipuAI/GLM-4.6","messages":[{"role":"user","content":"hi"}]}'如果这个 curl 返回 401,说明 Key 本身有问题,跟 Claude Code 无关。如果 curl 正常但 Claude Code 报 401,那就是路由配置里的 Key 没填对。
5.2 local proxy failed / connection refused
报错长这样:local proxy failed或ECONNREFUSED 127.0.0.1:3456。这说明 Claude Code 找不到本地路由服务。
原因通常是路由没启动,或者端口被占用。先确认路由在跑:
ccr status如果显示未运行,用ccr start启动。如果提示端口被占用,改一下路由配置里的端口,或者杀掉占用进程:
# macOS/Linux 查看占用 3456 端口的进程 lsof -i :3456还有一种情况是 settings 里的ANTHROPIC_BASE_URL端口和路由实际监听端口不一致。默认都是 3456,如果你改过其中一个,记得两边同步。
5.3 reading choices / 响应解析失败
报错里出现reading 'choices'或cannot read property of undefined,这是路由在解析 ModelScope 返回时出的问题。根因通常是接口返回了错误信息,但路由按正常格式去取choices字段,取不到就崩了。
定位方法:看路由的日志输出,里面会有 ModelScope 返回的原始响应。常见触发原因有两个:一是模型 ID 写错,ModelScope 返回model not found;二是请求体格式不对,比如max_tokens超了模型上限。
修复:确认models里是ZhipuAI/GLM-4.6,确认maxtoken设的是 65536 而不是更大的值。如果还不行,把transformer里的enhancetool暂时去掉,排除是不是它引起的格式问题。
5.4 OAuth 登录冲突
如果你之前用 OAuth 登录过 Claude Code,配置路由后可能仍然走 Anthropic 官方接口,表现为请求正常但用的不是 GLM-4.6。这是因为 OAuth 凭证优先级高于 API Key。
解决:退出登录,清除凭证。
claude logout然后重新用 API Key 模式启动。确认~/.claude/settings.json里ANTHROPIC_BASE_URL指向本地路由,ANTHROPIC_API_KEY是占位值。重启 Claude Code 后再问一次"你是什么模型"验证。
5.5 报错速查表
| 报错关键词 | 根因 | 修复动作 |
|---|---|---|
| 401 Unauthorized | API Key 错误或过期 | 重新生成 Key 并替换 |
| local proxy failed | 路由未启动或端口不符 | ccr start,核对端口 |
| reading 'choices' | 模型 ID 错或请求格式错 | 核对模型 ID 与 max_tokens |
| OAuth 冲突 | 旧登录凭证未清除 | claude logout后重配 |
| 响应被截断 | max_tokens 偏小 | transformer 里设 65536 |
排查的核心思路是分层定位:先确认 ModelScope 接口本身通不通(curl 测),再确认路由服务在不在(ccr status),最后确认 Claude Code 指向对不对(settings 文件)。三层都过了,基本不会有问题。
6. 把 GLM-4.6 用顺手:额度优化与接入入口
配置跑通只是开始,怎么把免费额度用出最大价值才是关键。这一节讲几个实操技巧,再给出后续接入需要的入口。
6.1 额度用在刀刃上
ModelScope 的免费额度按调用次数算,所以减少无效请求就是省钱。几个习惯很管用:
把相关任务合并成一次请求。比如你要给五个函数写测试,不要一个一个问,一次性把五个函数贴进去,让模型批量生成。提示词写清楚"为以下每个函数生成 pytest 测试用例,包含正常场景、边界条件、异常情况"。
利用 GLM-4.6 的长上下文。它支持 65K token,意味着你可以在一次对话里先让它设计数据库模型,再基于刚才的设计让它写 ORM 定义,不用重复描述背景。上下文记忆能省下大量重复输入的 token。
让模型顺手把文档写了。代码生成完之后,直接追加一句"基于以上代码生成 README 和接口文档,用中文",一次请求多份产出。
6.2 提示词的具体化
模糊的提示词会导致多轮返工,反而更费额度。对比一下:
差的写法是"写个排序函数"。好的写法是"写一个 Python 函数,输入是整数列表,用归并排序实现,要求稳定排序,包含类型注解和中文注释,并给出时间复杂度分析"。后者一次到位,前者可能要来回三四轮。
6.3 后续接入入口
如果你想把 GLM-4.6 接到更多工具里,或者需要更稳定的调用方案,下面这些入口用得上。获取和管理 API Key 走这里:
API Keys 管理:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=api_keys
接入文档里有各语言的调用示例和参数说明,配置遇到问题时对照着看:
接入文档:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=doc
想先在网页上试试 GLM-4.6 的代码能力,不装任何工具,用模型对话就行:
模型对话:https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=chat
如果你打算长期用 Claude Code 做开发,或者要跑 Agent 类的自动化任务,Coding Plan 的额度方案比按次调用更划算:
Coding Plan:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=coding_plan
API 基础地址统一是 https://taotoken.net/api,配置时把api_base_url换成这个即可。
6.4 一个容易忽略的收尾动作
配置完成后,记得把包含 API Key 的文件加进.gitignore。~/.claude-code-router/config.json在用户目录下一般不会被提交,但如果你把配置复制到了项目里,一定要排除掉。密钥泄露的代价比省下的那点配置时间大得多。
最后留一个实用习惯:每次换模型或改配置后,先用"你是什么模型"这个问题验证一次,再开始正式编码。这一步花十秒,能避免你写半天代码才发现请求根本没走 GLM-4.6。