先说结论:Claude Code 本身是 Anthropic 官方出的终端编程智能体,效果确实顶,但对很多国内开发者和学习者来说,官方 API 有不少现实门槛——绑定海外支付方式、按美元计费、接口稳定性也看网络心情。所以社区现在最流行的玩法,就是给 Claude Code 装一个“协议翻译层”,让它能调用 DeepSeek、Kimi、智谱 GLM、通义千问这些国产大模型。这套方案既能保留 Claude Code 的 Agent 工作流(读代码、改文件、跑命令、提 commit),又能把成本打下来,接口还是国内直连,非常舒服。
这篇教程面向纯小白,我会从 Node.js 安装开始,一路讲到 Claude Code 本体、路由层 claude-code-router 的配置,再给你一套可以直接抄作业的 DeepSeek 配置文件,最后附上我踩过的坑和排查清单。整个方案不需要写一行代码逻辑,全程命令 + 配置文件。
1. 先把思路捋清楚:Claude Code 怎么“改嫁”国产模型
很多人第一次听说 Claude Code 能接国产大模型,第一反应是“这俩协议都不一样,能通吗?”。能通,而且原理比你想的简单。
1.1 Claude Code 是什么,它到底怎么工作
Claude Code 是 Anthropic 推出的命令行 AI 编程助手。你不需要在编辑器里装插件,直接在一个终端里启动,用自然语言给它下指令,比如“看一下这个项目,告诉我哪里性能有瓶颈”,它会自己去读文件、跑测试、改代码,甚至帮你执行 git 命令。
它每干一件事,背后其实都在做同一个循环:把你的指令转成请求发给大模型,大模型返回“我准备做这些动作”,然后它执行这些动作,再把你看到的输出结果继续发给大模型,直到任务完成。
这个循环里最关键的部分,是它跟模型之间有一套固定的“对话格式”。官方版 Claude Code 默认只认 Anthropic Messages API 格式,而且默认只连 Anthropic 自家的模型。你要是直接把请求地址换成 DeepSeek 或者别的国产模型,两边语言不通,根本聊不下去。
1.2 国产模型的优势:便宜、直接、没门槛
Claude Code 官方模型很强,但“强”和“适合所有人”是两回事。官方接口需要 Anthropic 账号,绑海外支付方式,按用量计费,对很多学生党、个人开发者来说门槛不低。
国产模型这边就是另一番光景了。DeepSeek、Kimi、GLM、通义千问这些,国内注册就能用,充值就是微信/支付宝扫一下,成本相比官方 API 直接低一个量级,赠金还经常送。更重要的是,这些模型基本都提供 OpenAI 兼容接口,而 OpenAI 的消息格式在开源生态里已经是事实标准,这就给了做“中间转换层”的机会。
1.3 集成原理:一个“翻译官”搞定协议转换
所以,方案的核心就是找一个“翻译官”,把 Claude Code 的 Anthropic 格式请求翻译成 OpenAI 格式,发给国产模型,再把国产模型的返回翻译回 Claude Code 能理解的格式。
这个“翻译官”就是 claude-code-router,社区里也常叫 CCR。它底层用的是 LiteLLM 这套成熟的模型网关,支持几百种模型的转发,也支持你自定义任意 OpenAI 兼容接口。你只要写一个 JSON 配置文件,把国产模型的 API 地址、Key、模型名填进去,再在环境变量里把 Claude Code 的请求地址指向 CCR 的本地代理,整个链路就通了。
一句话总结这个思路:Claude Code 负责干活,CCR 负责翻译,国产模型负责思考。
2. 环境准备:把 Node.js 和 Claude Code 本体装好
在搞串联之前,先把地基打好。磨刀不误砍柴工,这一步我建议按顺序来,不要跳。
2.1 安装 Node.js(LTS 版本就够)
Claude Code 和 CCR 都是基于 Node.js 的 npm 包,所以 Node.js 是第一个必须装的组件。
到 Node.js 官网下载 LTS 版本(不是 Current 版本),Windows 用户直接下载 .msi 安装包,macOS 用户下载 .pkg,Linux 用户可以用 nvm 装。安装过程中全部默认选项即可,Windows 用户特别留意一下安装向导里“Add to PATH”那个选项要勾上,不然一会儿命令行找不到 node。
装完打开一个新的终端,输入:
node -v npm -v能正常输出版本号,比如 v20.x.x 和 10.x.x,就说明装好了。
2.2 给 npm 换个国内源(能省很多时间)
npm 默认源在国外,装大一点的项目容易卡到怀疑人生。这一步强烈建议先做:
npm config set registry https://registry.npmmirror.com设置完之后可以验证:
npm config get registry输出了 npmmirror 的地址就说明换源成功。后面所有 npm 安装命令都会快很多。
2.3 安装 Claude Code 本体
直接在终端执行:
npm install -g @anthropic-ai/claude-code全局安装,装完确认一下:
claude --version如果能输出版本号,说明 Claude Code 本体已经就位。注意,现在先别急着运行claude命令,因为默认情况下它会进入官方登录流程。我们接下来要做的是让它先“改道”,再去启动它。
2.4 三个环境变量,提前搞懂不踩坑
Claude Code 在启动时,会按照一定的优先级去读取 API 地址和令牌。后面我们所有“改道”操作,本质就是通过环境变量实现的。
你需要记住三个变量:
ANTHROPIC_BASE_URL:API 请求的基础地址。默认是 Anthropic 官方地址,我们要改成 CCR 本地代理的地址。ANTHROPIC_AUTH_TOKEN:自定义令牌。CCR 模式下它并不真正校验令牌内容,你随便填一个字符串让它能通过就行,真正的 Key 在 CCR 的配置文件里。ANTHROPIC_API_KEY:官方 API Key。这个变量是个大坑,如果它被设置了,Claude Code 会优先读它,直接连到官方地址,然后报 401。如果你之前配置过,务必先把它清掉。
注意:这三个变量的优先级关系是 ANTHROPIC_API_KEY 优先于 ANTHROPIC_AUTH_TOKEN。只要 ANTHROPIC_API_KEY 存在,Claude Code 就会拿着它去连 ANTHROPIC_BASE_URL 指向的地址。所以我们后面设置环境变量时,一定要确认它没有被设置。
3. 安装配置路由层:claude-code-router 独立部署
这是整套方案里最核心的一步,也是标题里“集成”两个字的真正含义所在。我会先把 CCR 是什么说清楚,再一步步配置。
3.1 claude-code-router 是什么,和 cc-switch 有什么区别
claude-code-router 是 GitHub 上社区维护的开源项目(musistudio/claude-code-router),它实际上是一个本地代理服务。安装之后,它会监听你电脑上的一个端口,比如 3456。Claude Code 的所有请求都会发送到这个端口,CCR 再根据你配置文件里的规则,把请求转发给 DeepSeek、Kimi 或者其他模型。
社区里还有一个工具叫 cc-switch(CC Switch),它的定位更偏向于“切换器”:把官方 API 和各个国产模型的 API 配置提前存好,需要哪个一键切换。CC Switch 有图形界面,操作直观,但它的实现本质是帮你修改 Claude Code 的环境配置和认证信息,适合只想快速换模型、不想关心底层协议的人。
而 CCR 走的是“本地代理 + 协议翻译”路线,好处是配置一次之后非常稳定,不依赖官方登录态,而且支持更复杂的模型映射,比如把 Claude 的不同模型分别映射到不同的国产模型上。这篇教程我以 CCR 为主方案,因为它才是“集成”玩法的核心,同时也是社区里讨论最多、坑也最清楚的一条路。
3.2 安装 CCR
继续在终端执行:
npm install -g @musistudio/claude-code-router安装完,你会多一个claude-code-router命令,有些版本也提供ccr缩写命令。你可以先看一下它的帮助信息:
claude-code-router --help如果你的版本比较新,输出的命令名可能略有差异,不影响使用。如果发现运行不了,多半是安装源的问题,回到第 2.2 步检查一下 npm 源,重新装一遍。
3.3 编辑 config.json:以 DeepSeek 为例的完整配置
CCR 启动时会读取一个配置文件,路径在用户主目录下的~/.claude-code-router/config.json。第一次运行它可能不会自动创建这个文件,需要手动建目录、建文件。
最稳妥的方式是在你的用户主目录下新建.claude-code-router文件夹,然后在里面新建config.json。我直接把一份可运行的 DeepSeek 配置贴出来,你可以先复制过去,再逐项理解:
{ "provider": { "default": "deepseek", "deepseek": { "base_url": "https://api.deepseek.com", "api_key": "sk-你的DeepSeek密钥", "models": [ "deepseek-chat", "deepseek-reasoner" ] } }, "model_mapping": { "claude-sonnet-4-20250514": "deepseek-chat", "claude-opus-4-20250514": "deepseek-chat" }, "env": { "LITELLM_MODEL": "deepseek-chat", "ANTHROPIC_SMALL_FAST_MODEL": "deepseek-chat" } }这个配置里只有三块内容,理解它你就能举一反三:
provider:模型提供方。default表示默认走哪个提供方,这里填的是 deepseek,代表默认所有请求都发给 DeepSeek。然后定义了一个名为deepseek的提供方,base_url填 DeepSeek 的 OpenAI 兼容接口地址,api_key填你在 DeepSeek 开放平台申请的密钥,models列的是可用的模型名。model_mapping:模型映射。Claude Code 会按原始的 Claude 模型名请求,比如 claude-sonnet-4-20250514,但 DeepSeek 不认识这个名字,所以这里把它映射成 deepseek-chat。如果你常用的是 Claude 的 opus 模型,也一并映射过去。env:环境覆盖。LITELLM_MODEL让 CCR 在转发时统一使用 deepseek-chat,ANTHROPIC_SMALL_FAST_MODEL是 Claude Code 内部用于快速任务的“小模型”参数,也一并指向 deepseek-chat。
DeepSeek 的 API Key 需要去 DeepSeek 开放平台注册并创建,创建之后复制以sk-开头的字符串,替换掉上面配置里的占位文字。不用纠结选哪种模型,新用户直接选 deepseek-chat 就行,它就是官方主推的对话/编程模型,deepseek-reasoner 是推理模型,后面我会说要慎用。
3.4 启动路由服务,让 Claude Code 走本地代理
配置文件保存好之后,先在终端启动 CCR:
claude-code-router启动成功的话,终端会显示监听在某个端口,通常默认是 3456。保持这个终端不要关,它就是你的本地“翻译官”。
然后新开一个终端,设置环境变量。Windows PowerShell 用户执行:
$env:ANTHROPIC_BASE_URL="http://127.0.0.1:3456" $env:ANTHROPIC_AUTH_TOKEN="local-test-token"macOS / Linux 用户执行:
export ANTHROPIC_BASE_URL=http://127.0.0.1:3456 export ANTHROPIC_AUTH_TOKEN=local-test-token如果你刚才检查发现存在ANTHROPIC_API_KEY,先删掉它:
unset ANTHROPIC_API_KEYWindows PowerShell 则是:
Remove-Item Env:ANTHROPIC_API_KEY环境变量设置好之后,在同一个终端启动 Claude Code:
claude此时它不会再走官方登录流程,而是老老实实把请求发到 CCR 的本地地址。你可以直接给它一句最简单的话:“你好,请回复收到”。如果 CCR 那边日志显示转发到了 deepseek,并且 Claude Code 里正常回复了,就说明集成已经打通。
注意:CCR 的终端窗口不要关,关了 Claude Code 就找不到翻译官了。如果你用的是 VS Code 这类集成终端,建议拆两个终端,一个跑 CCR,一个跑 Claude Code。
3.5 扩展:一个配置接入 Kimi、GLM、Qwen 甚至本地模型
配置文件的写法一旦理解,接其他国产模型就是复制粘贴的事。以 Kimi 为例,你只需要在provider里加上一个 moonshot 的提供方,然后修改default指向它:
{ "provider": { "default": "moonshot", "moonshot": { "base_url": "https://api.moonshot.cn/v1", "api_key": "sk-你的Kimi密钥", "models": [ "kimi-k2-0711-preview", "moonshot-v1-32k" ] } }, "model_mapping": { "claude-sonnet-4-20250514": "kimi-k2-0711-preview" }, "env": { "LITELLM_MODEL": "kimi-k2-0711-preview", "ANTHROPIC_SMALL_FAST_MODEL": "moonshot-v1-32k" } }GLM 和通义千问同理,GLM 的接口地址是https://open.bigmodel.cn/api/paas/v4,通义千问的兼容接口是https://dashscope.aliyuncs.com/compatible-mode/v1。你只需要注意两点:一是模型名必须填平台真实存在的模型名,二是base_url结尾要不要带/v1要看平台文档,填错了就会报 404 或者连接错误。
如果你想接本地跑的 Ollama 模型,CCR 同样支持。因为 Ollama 本身也会暴露一个 OpenAI 兼容接口http://localhost:11434/v1。你只要把 base_url 指过去,模型名填成你本地拉取的模型就行,比如qwen2.5-coder:14b。本地模型的好处是完全免费、数据不出机器,坏处是模型太小的话代码理解能力明显不如云端大模型,适合拿来做简单任务、离线环境或者隐私敏感场景。对新手来说,我建议先别碰 Ollama,把云端模型跑通了再说,不然你分不清是配置问题还是模型能力问题。
4. 实操验证:从“能回话”到“能干活”
很多新手走到“能回话”这一步就觉得成功了,但你用 Claude Code 不是来聊天的,是让它帮你干活的。所以验证要分三步走:能不能读文件、能不能改文件、能不能执行命令。
4.1 在真实项目里测试文件读取
随便找一个你本地的代码项目,进入目录后启动 Claude Code:
cd /path/to/your/project claude然后输入:
先看一下这个项目的目录结构,告诉我用了什么技术栈如果它能够列出目录、指出关键文件、说出技术栈,说明“读文件”这个链路是通的。你可以继续追问某个文件的内容,看它能不能准确引用。
4.2 测试代码修改与生成
让它在项目里新建一个文件:
在 utils 目录下创建一个 format.js,里面导出一个格式化日期时间的函数,输入时间戳,输出 YYYY-MM-DD HH:mm:ss这一步如果顺利,你会看到它自动创建目录、创建文件、写入内容。如果模型能力够强,它还会顺手补上注释。
这里要注意观察两端:一是在你运行 Claude Code 的终端里,它会实时展示“将要执行什么操作”,比如创建文件前会展示文件路径,执行命令前会展示完整命令,并等待你确认。二是在 CCR 的终端里,你会看到一次请求里的工具调用数量和耗时,这些信息对判断模型质量很有用。
4.3 检查 CCR 日志:流量是否真的走了国产模型
集成成功不代表每一步都对。判断请求到底去了哪里,最直接的办法就是看 CCR 终端里的日志。
正常情况,日志里会记录每次请求转发的目标模型,比如显示deepseek/deepseek-chat。如果日志显示你在请求anthropic/xxx,说明 Claude Code 绕过了 CCR,直接连到了官方地址,回去检查环境变量。
另一种常见情况是,Claude Code 能正常回复,但 CCR 日志里只有少量转发记录,你觉得很奇怪。这是因为 Claude Code 内部有上下文缓存机制,会在同一个会话里复用一部分缓存结果,所以不是每一步操作都会触发新的模型请求,这是正常的。
4.4 确认工具调用链路完整
国产模型接进 Claude Code 之后,最大的差异点在于“工具调用”的稳定性。Claude Code 本质是靠模型的工具调用来干活的,模型必须能输出“我要调用 read_file 工具、参数是 xxx”的结构化指令。
你可以在测试时特别要求它执行一个稍微复杂点的任务,比如:
把当前目录下所有 .js 文件的行数统计出来,并生成一个 report.md如果它能分多次读文件、多次执行统计命令,最后写出报告,说明工具调用链路是完整的。如果它只回答你一段话但没有实际执行,说明模型可能没把工具调用当回事,这种时候换模型或者调模型参数往往比折腾 Claude Code 配置更有效。
5. 国产模型选型对比:做编程 Agent 哪个更顺手
这一节直接给结论:不同模型在 Claude Code 里的体验差距很大,不是“能接就能用”。
5.1 主流国产模型接入参数速查表
| 模型 | API 地址 | 推荐模型名 | 优势 | 注意点 |
|---|---|---|---|---|
| DeepSeek | https://api.deepseek.com | deepseek-chat | 编程能力强、便宜、工具调用稳定 | 别用 deepseek-reasoner 做 Agent,耗时太长 |
| Kimi(月之暗面) | https://api.moonshot.cn/v1 | kimi-k2-0711-preview | 长上下文、中文理解好 | 长任务偶尔会“话多”,需要你把任务拆细 |
| 智谱 GLM | https://open.bigmodel.cn/api/paas/v4 | glm-4-plus / glm-4-air | 中文灵活、性价比高 | 海外生态兼容细节偶尔有小坑 |
| 通义千问 | https://dashscope.aliyuncs.com/compatible-mode/v1 | qwen-plus / qwen-max | 阿里云生态、工具调用规范 | 需要开通对应模型服务权限 |
| Ollama 本地模型 | http://localhost:11434/v1 | qwen2.5-coder:14b 等 | 完全免费、数据不出机器 | 对硬件要求高,小模型干活能力有限 |
5.2 为什么我不推荐 DeepSeek 的 reasoner 模型
很多人看 DeepSeek 的 deepseek-reasoner 很火,就顺手把它配进 Claude Code。实际跑起来你会发现,它确实能输出很长的思考过程,但在 Claude Code 这种“一步一工具”的场景里,推理模型每一次都要想很久,一个简单的读文件操作可能要等十几秒,体验非常割裂。
更关键的是,reasoner 在长 Agent 流程里容易产生“过度思考”,经常该执行工具的时候还在分析,导致整个任务节奏拖得很慢。我的建议很直接:日常编程任务统一用 deepseek-chat,把 deepseek-reasoner 留给你需要深度解题、单独提问的场合,而不是塞进 Agent 工作流。
5.3 不同预算和使用场景的选型建议
如果你是个人开发者,想体验“Claude Code 工作流 + 国产模型性价比”,首选 DeepSeek。它现在是国内编程类模型里对工具调用支持得最顺的一档,而且每百万 token 的成本低到可以忽略,适合长期挂着跑。
如果你经常要处理超长上下文项目,比如让 Claude Code 读一个大型 monorepo,Kimi 的优势就出来了,长文本不容易“忘事”,但你要接受它在个别复杂任务里多话、效率略低的问题。
如果你已经在用阿里云,那直接上通义千问最省事,权限管理、账单都跟自家账号打通,工具调用也很稳。
如果你有隐私需求或者经常在无网环境干活,再考虑 Ollama 本地模型。本地模型建议直接上 14B 以上的参数规模,7B 的模型拿来写代码基本属于折磨自己。
6. 常见问题与排查技巧实录
这套方案我折腾过好几轮,下面这些坑基本都是新手必经之路。我把现象和解决办法列成一张速查表,你遇到问题直接对应着查。
| 现象 | 可能原因 | 解决办法 |
|---|---|---|
| 启动 Claude Code 后报 401 Unauthorized | 设置了 ANTHROPIC_API_KEY,请求带着官方 Key 走到了错误地址 | unset ANTHROPIC_API_KEY或清掉系统环境变量里的对应项 |
| 请求卡住,CCR 日志没有动静 | CCR 没启动,或者 ANTHROPIC_BASE_URL 设置错误 | 确认 CCR 终端还开着,确认地址是 http://127.0.0.1:3456 而不是 https |
| 模型能回话,但就是不执行工具 | 模型本身工具调用能力弱,或误用了推理模型 | 换 deepseek-chat 这类非推理模型;确认 model_mapping 的模型名正确 |
| 回答到一半突然截断 | 模型输出的 max_tokens 不够,Claude Code 一次请求希望模型输出很长的工具调用序列 | 在 CCR 的转发参数里调大 max_tokens,比如设置到 4096 以上 |
| 每次启动都要重新设置环境变量 | 你设置的是临时环境变量,新终端就失效了 | 把 export 命令写进 shell 配置文件(~/.zshrc 或 ~/.bashrc),或用系统环境变量面板持久化 |
| 请求偶尔打到官方 API 的感觉 | 模型名默认走 Claude 官方映射,被 Claude Code 内置逻辑绕过了代理 | 把 model_mapping 配全,确保所有 Claude 模型名都有对应的国产模型 |
| Westminster 模式下报网络错误 | 本地代理端口被占用 | 换一个端口,比如 CCR 启动参数指定端口,再同步修改 ANTHROPIC_BASE_URL |
| CCR 启动报配置文件错误 | JSON 格式写错了,或者缺少必填字段 | 到 JSON 在线校验工具里粘贴验证,注意最后一个字段后面不要有多余逗号 |
6.1 关于 401 的深度排查
上面表格里的 401 值得单独展开说。很多人第一次配完,明明 ANTHROPIC_BASE_URL 和 ANTHROPIC_AUTH_TOKEN 都设置了,仍然报 401。
第一反应换个思路:先打印当前环境变量,看看是不是残留了 ANTHROPIC_API_KEY。Windows 上可以用:
Get-ChildItem Env: | Where-Object { $_.Name -like "ANTHROPIC*" }macOS / Linux 上:
env | grep ANTHROPIC如果有 ANTHROPIC_API_KEY 存在,直接删掉再试。如果只有一个 ANTHROPIC_BASE_URL 但指向的是官方地址,也是同样的问题逻辑:Claude Code 在某些版本里会优先读取内置的官方路由,只有当 ANTHROPIC_BASE_URL 明确设置为非官方地址时才走自定义路由。
6.2 关于“模型不干活只聊天”的深度解析
这个现象在 DeepSeek 上其实不常见,但在某些中文模型的早期兼容版本里很典型。原因多半不是 Claude Code 配置问题,而是模型在“该输出工具调用”的时候,输出了一段自然语言。
解决办法依次尝试:第一,换一个更稳的模型,比如从 deepseek-reasoner 换成 deepseek-chat;第二,把任务描述得更简洁,避免长段落指令干扰模型的输出判断;第三,检查 CCR 的底层 LiteLLM 版本,npm update -g @musistudio/claude-code-router升级到最新版,很多兼容性问题都是靠版本迭代修掉的。
6.3 关于输出截断的补充
Claude Code 在复杂任务里,一次请求会期望模型输出一系列工具调用。国产模型默认的 max_tokens 上限往往低于 Claude 官方模型,这就会导致模型还没说完整套工具调用计划,输出就被掐断了,表现出来就是“回答到一半戛然而止”。
如果你用的模型在平台上支持调高 max_tokens,可以在 CCR 的 provider 配置里加上请求体重写参数。具体字段名以你安装的 CCR 版本 README 为准,但思路就是把 max_tokens 调大,最好不低于 4096。这一条在接 Kimi 和 GLM 时尤其重要,它们默认值普遍偏保守。
6.4 关于日志和调试的独家技巧
Claude Code 自身也有日志,遇到疑难问题不要只盯 CCR。进入 Claude Code 后输入/status可以查看当前会话的 API 状态和模型信息,输入/cost可以看到 token 消耗估算。这两条命令是排查“到底有没有走国产模型”的终极证据。
另外我建议新手全程用两个终端观察,一个跑 CCR、一个跑 Claude Code。一旦发现异常,先在 CCR 日志里找有没有转发记录。如果 CCR 日志干干净净,说明请求根本没到 CCR,往环境变量方向查;如果 CCR 日志里有请求但报错了,把报错信息复制下来搜索,绝大多数都是模型名写错或 Key 没填对。
最后分享点个人经验
这套配置我用了小半年,日常主力就是 DeepSeek,备一个 Kimi 处理超长文档。实际体验下来,国产模型跟 Claude Code 结合最舒服的场景不是让它一口气写几百行代码,而是让它做代码审查、写测试、改 bug,这种“小步快跑”的任务国产模型完成度很高,成本几乎可以忽略。
我个人的习惯是:新项目第一次整体架构设计、或者涉及大范围重构时,我还会切回官方模型认真讨论;平时迭代开发、补测试、查 bug,全部挂在 DeepSeek 上。这样既保住了关键时刻的质量,又不用一直为日常琐碎任务烧钱。
最后再提醒一件事:Claude Code 迭代速度很快,模型名也会随官方更新而变化,如果你哪天发现之前能用的配置突然失效,先去搜一下最新的模型映射名称,多半是模型名过期而不是配置被破坏。这个工具链的价值在于“接口是标准的,模型可以随便换”,只要把这个思路理解透,未来不管出什么新国产模型,你都能在 5 分钟内接上去。