
1. 这个组合到底解决了什么问题过去一个月我基本把 Claude Code 当成了日常主力编码工具但有个问题一直很别扭官方订阅配额有限聊不了几句就提示额度不够换模型又要单独付费。后来我把模型后端整个换成了 DeepSeek用一套本地协议转换层把 DeepSeek V4 Pro标题里的叫法实际控制台里请以当前可用模型 ID 为准接进了 Claude Code跑通了一套不订阅 Claude 官方付费套餐的 AI 编码工作流。这个组合最大的价值不是白嫖而是把 Agent 型编码工具的体验和按量计费的模型成本解耦了。Claude Code 这个工具本身值得先聊清楚。它不是普通的 AI 聊天窗口而是一个真正能落地的编码 Agent它能看到你的项目文件树能读取文件内容能直接修改代码还能在终端里跑命令。你给它一个任务比如给这个模块加上单元测试它会自己规划步骤、读取相关文件、写测试代码、运行测试、根据失败信息再修复。整个过程你只需要在关键节点确认一下。这种会动手的体验和传统问答式 AI 编码工具有本质区别。但 Claude Code 默认绑定的模型订阅成本不低而且对一些开发者来说为偶尔的编码辅助订阅一个付费套餐并不划算。DeepSeek 这边则恰好补上了这个位置API 价格低、中文代码理解能力不错、开放接口标准。两边一结合就形成了一个性价比很高的 AI 编码工作流——你保留 Claude Code 的 Agent 能力同时把大脑换成便宜好用的第三方模型。这篇文章适合谁想用 Claude Code 但不想订阅官方套餐的人手里有 DeepSeek / Qwen / GLM 等第三方 API Key 的人以及单纯想搞明白Claude Code 到底能不能接外部模型的折腾型开发者。我会从原理讲到实操再给你排查列表照着抄就能用。2. 接入方案选型为什么不能直接把地址改成 DeepSeek2.1 协议不通Anthropic 格式与 OpenAI 格式很多人第一个想法是既然 Claude Code 支持配置 API 地址那把地址改成 DeepSeek 不就行了我第一次也是这么干的然后把 Key 填进去启动后直接报格式错误。原因在于两个平台说话用的不是同一种协议。Claude Code 原生只跟 Anthropic 的 Messages API 打交道请求和响应的数据结构是 Anthropic 定义的包括anthropic_version头、消息格式、流式事件类型都带着 Anthropic 的烙印。而 DeepSeek 开放的是 OpenAI 兼容格式字段结构、认证方式、流式返回格式完全另一套。你让 Claude Code 直接拿 Anthropic 格式去请求 DeepSeek 的地址对方根本不知道你在说什么返回的内容它也不认识。这就像是让一个只说英语的人和只说中文的人直接对话中间必须有个翻译。所以正确的思路不是改一个地址而是插一个本地协议转换层把 Anthropic 格式翻译成 OpenAI 格式再转给 DeepSeek返回时再翻译回来。2.2 方案一claude-code-router 本地协议转换层我最常用也最推荐的是 claude-code-router 这个开源项目。它的工作方式是在你本地跑一个轻量 HTTP 服务Claude Code 把请求发给这个本地服务它负责做协议转换然后转发到你配置的模型供应商。选它而不是自己写脚本的原因很朴素第一它已经把 Anthropic 的流式响应转换做完了自己写要处理各种事件类型非常容易漏第二它支持多供应商配置DeepSeek、Qwen、GLM 这些都可以写进去随时切换第三它对 Claude Code 的感知更好可以直接用/router这类内置命令看当前路由状态。安装方式很简单基于 npm 全局安装装完初始化配置就能跑。后面的实操章节我会给完整步骤。2.3 方案二CC Switch 做供应商管理与一键切换如果你手上有好几家模型的 API Key只想有个界面点来点去切换供应商那 CC Switch 是个不错的补充工具。它本质是个 GUI 管理器负责帮你改 Claude Code 的配置文件把 ANTHROPIC_BASE_URL、ANTHROPIC_AUTH_TOKEN、ANTHROPIC_MODEL 这些环境变量一键切换。要理解 CC Switch 的边界它做的是配置管理和供应商切换本身不负责协议转换。如果你的目标供应商不提供 Anthropic 兼容端点光用它是不够的还是需要搭配 claude-code-router 这样的转换层。我实际使用中把两者配合起来了CC Switch 管理多套 Key 和供应商配置claude-code-router 负责把请求翻译成 OpenAI 格式。日常切换模型时我通常直接在 Claude Code 会话里用/model命令比切到桌面应用更快。2.4 方案三本地模型实现真正零成本如果你连 API 按量付费都不想花还有一条完全免费的路本地模型。LM Studio 或 Ollama 都可以在本地起一个 OpenAI 兼容的服务端加载 Qwen、Llama 这类开源模型。然后让 claude-code-router 把请求路由到http://127.0.0.1:1234这样的本地地址Claude Code 照样能工作。我试过用 LM Studio 加载量化后的 Qwen 系列模型跑 Claude Code确实能跑通整个链路是Claude Code → 本地转换层 → LM Studio → 本地模型。好处很明显数据不出机器、没有 token 费用、断网也能用。代价也很现实推理速度取决于你的显卡上下文窗口普遍偏小做大型代码重构时会明显感觉模型脑容量不够。我的建议是本地模型适合文档总结、代码解释、写测试这类轻量任务正经的重构和跨文件修改还是用 DeepSeek API 更靠谱。3. 完整实操从零把 Claude Code 接到 DeepSeek3.1 环境准备Node.js、Claude Code、转换层第一步先检查基础环境。Claude Code 和 claude-code-router 都依赖 Node.js建议版本 18 以上。打开终端先看版本node -v npm -v版本太低的话去 Node 官网装最新的 LTS 版本避免后面装包时踩权限坑。然后安装两个核心工具npm install -g anthropic-ai/claude-code npm install -g musistudio/claude-code-router第二个包的安装命令可能因版本更新而变化装完跑一下claude-code-router --help确认命令名和可用参数。如果因为网络原因 npm 装不动可以换国内镜像源但注意镜像源的环境变量只影响 npm 下载不影响后续 Claude Code 连接 DeepSeek。Windows 用户这里有个常见坑npm 全局安装路径如果没加入 PATH装完会提示不是内部或外部命令。解决方案是用管理员身份打开 PowerShell执行npm config get prefix看全局路径然后把它加进系统 PATH。另外 PowerShell 执行脚本策略如果锁死装完原生安装器也会报错建议直接用 npm 方式问题最少。3.2 配置 DeepSeek 供应商与模型映射转换层安装好后需要初始化配置。不同版本的初始化方式略有差异有的装完会自动生成一个配置模板有的需要手动创建。以我常用的版本为例配置文件在用户目录下的.claude-code-router/config.json最小配置长这样{ provider: deepseek, providers: { deepseek: { baseUrl: https://api.deepseek.com, apiKey: sk-你的key, models: { deepseek-chat: { name: DeepSeek Chat, maxTokens: 8192 } } } } }几个关键字段说明一下。baseUrl是 DeepSeek 官方接口地址按官方文档填即可如果请求时碰到 404 再尝试补/v1后缀。apiKey去 DeepSeek 控制台申请注意不要泄露到代码仓库里。models下面的deepseek-chat是模型 IDname是显示名称maxTokens控制单次生成的最大长度。这里有个需要留意的细节Claude Code 默认会请求像claude-sonnet-4-xxxx这样的模型名你的转换层必须能把这些请求映射到你配置的deepseek-chat上。上面这个配置里我把 provider 设为 deepseek并给了明确的 models 映射转换层收到 Claude Code 发来的模型名后就知道该往 DeepSeek 的哪个模型转发。配置完先启动转换层服务确认它正常监听本地端口后再启动 Claude Code。我用的时候端口默认是 3456具体以工具启动日志为准。3.3 让 Claude Code 走转换层的三种方式场景不同配置环境变量的方式也不同。最简单粗暴的方式是直接写在 shell 配置里export ANTHROPIC_BASE_URLhttp://127.0.0.1:3456 export ANTHROPIC_AUTH_TOKENlocal-token export ANTHROPIC_MODELdeepseek-chat export ANTHROPIC_SMALL_FAST_MODELdeepseek-chatWindows PowerShell 对应写成$env:ANTHROPIC_BASE_URLhttp://127.0.0.1:3456 $env:ANTHROPIC_AUTH_TOKENlocal-token $env:ANTHROPIC_MODELdeepseek-chat $env:ANTHROPIC_SMALL_FAST_MODELdeepseek-chat第二种方式是把环境变量写进 Claude Code 的项目级配置文件.claude/settings.json好处是跟着项目走换机器不丢配置{ env: { ANTHROPIC_BASE_URL: http://127.0.0.1:3456, ANTHROPIC_AUTH_TOKEN: local-token, ANTHROPIC_MODEL: deepseek-chat, ANTHROPIC_SMALL_FAST_MODEL: deepseek-chat } }第三种方式是让 claude-code-router 自己接管它会自动写入或修改 Claude Code 的配置。这种方式最省心适合不想手动改配置的人。这里有个环境变量优先级的问题必须提醒shell 里 export 的变量会覆盖settings.json里的配置。你排查问题的时候如果发现改了配置文件不起作用先检查是不是 shell 里已经 export 了同名变量。另外ANTHROPIC_AUTH_TOKEN和ANTHROPIC_API_KEY是两个不同的东西。走本地转换层时ANTHROPIC_AUTH_TOKEN填一个非空字符串即可转换层不做真实校验但如果你同时保留了官方登录的凭据和自定义 tokenClaude Code 可能会优先尝试官方认证导致一系列权限报错。最干净的办法是备份并删除~/.claude下的官方凭据文件只保留第三方配置。3.4 启动验证与第一轮真实对话全部配置完成后就可以启动验证了。先确保转换层服务在运行然后终端里执行claude进入交互界面后先敲/status或工具内置的路由状态命令确认当前连接的 base URL 是不是本地转换层地址。然后敲/model查看当前模型是不是已经切到了 DeepSeek。验证成功的标准不是界面显示什么而是实际对话能不能得到回复。我建议第一轮不要问复杂问题就让它做一件最简单的事在项目根目录执行ls或者让它总结当前目录结构。如果它能正常列出文件并给出中文分析说明整条链路已经通了。我自己的第一轮测试是让它看一个 Python 项目的 README 并总结项目架构。正常情况下它会先读文件然后用 DeepSeek 的模型能力给出结构化总结。如果你能看到输出内容里有明显的 DeepSeek 风格推理痕迹说明请求确实走到了 DeepSeek而不是还在走官方模型。如果这一步报 401 或 404先别慌大概率是 Key 填错了或者模型 ID 不匹配后面第五章有完整排查表。3.5 VS Code 里的使用姿势日常写代码不可能一直泡在终端里所以我强烈建议把 Claude Code 装进 VS Code。官方为 VS Code 提供了 Claude Code 扩展安装后在侧边栏就能直接呼出编码 Agent 面板。扩展的使用逻辑和命令行完全一致它会复用你已经配置好的环境变量和登录态。也就是说你在终端里配置好 DeepSeek 接入后VS Code 里打开扩展就是同样的配置不需要二次设置。快捷键方面macOS 是CtrlCmdC呼出面板Windows 对应的是CtrlAltC。在 VS Code 里我常用的工作流是选中一段代码 → 呼出面板 → 直接输入给这段代码补充类型标注或重构成函数式风格。模型会基于当前选中的代码和项目上下文操作而不是像聊天窗口那样脱离项目空谈。这种选代码再提问的模式比手动在提示词里贴代码体验好得多。4. 配置细节与工作流调优4.1 maxTokens 与上下文窗口的取舍接第三方模型后最容易遇到的问题就是输出被截断。Claude Code 默认按 Anthropic 模型的能力请求输出长度但 DeepSeek 的最大输出长度参数不一样如果转换层没做映射或者映射的值偏大就会看到模型回答到一半突然断掉。解决方法是在 config.json 的模型配置里明确设置maxTokens。我实际用的值是 8192覆盖大多数代码生成场景。如果你经常让它写大文件或长文档可以按当前 DeepSeek 官方支持的输出上限往上调但要注意设置得过高时部分模型会忽略这个值并回退到自己的上限。上下文窗口方面DeepSeek 官方 API 的上下文长度以文档为准一般足够容纳中小型项目的多个文件。需要注意的是Claude Code 会把你的项目文件内容、终端输出、历史对话都塞进上下文项目大了之后会达到模型上限。表现就是它开始忘记前面读过的文件内容或者在总结时遗漏关键信息。我的应对方法是大项目拆成小任务每次聚焦一个模块把无关文件从工作目录排除减少上下文污染。4.2 模型映射与 API Key 的优先级陷阱Claude Code 与转换层的模型映射关系是这套工作流里最值得理解的部分。你在 Claude Code 里看到的模型名可能仍然是claude-sonnet-4-xxx这类名字但实际后端已经被转换层转发到了 DeepSeek。这不代表你在白嫖官方模型只是转换层把名字翻译了一遍真正的推理发生在你的第三方 API 账户上。所以排查问题时不要看界面显示要看路由状态。claude-code-router 会输出当前路由到哪个供应商哪个模型这个信息最可靠。API Key 优先级的坑也要说清楚。Claude Code 读取认证信息的顺序ANTHROPIC_AUTH_TOKEN优先于ANTHROPIC_API_KEY。如果你同时设置了两个会优先用前者。在第三方模型接入场景里这个优先级是好事因为转换层只认AUTH_TOKEN这个字段。但如果你某天想切回官方模型忘了删掉这个 token就会发现一直连接不上官方账户因为请求全被转发到本地转换层了。4.3 不同任务下的模型选择DeepSeek / Qwen / GLM转换层最大的优势是模型供应商可切换。我实际常驻 DeepSeek但会根据任务类型换用不同模型这里给一份我的参考表任务类型推荐模型理由大型重构、跨文件改动DeepSeek推理能力强、上下文大、代码理解稳定写单元测试、脚本Qwen速度快、中文理解好、成本更低代码解释、文档生成GLM中文文档能力强、风格更符合中文团队习惯离线轻量任务本地 Qwen 量化版免费、私密、断网可用切换方式在 Claude Code 会话内执行/model命令输入目标模型 ID 即可。注意切换后最好重新开始一个会话因为之前的上下文是按上一个模型的格式组织的强行续聊偶尔会出现格式错乱。4.4 安全使用习惯这套工作流让你绕过了官方订阅但也意味着代码数据会发往第三方 API。我的建议是公司项目或涉及敏感数据的代码优先用本地模型方案或官方企业版个人开源项目可以用第三方 API。不要在配置里硬编码 API Key统一走环境变量.claude/settings.json如果会提交到仓库记得把含 Key 的字段用环境变量引用替代。另外Claude Code 有自动执行终端命令的能力权限控制默认是会逐条询问你。不要为了省事直接开--dangerously-skip-permissions尤其是在接第三方模型时模型的输出不可控性比官方模型更高。我看过一些翻车案例模型建议执行rm -rf类危险命令时有人直接点了允许后果很严重。正确的做法是让它提交改动前先展示 diff你人工 review 后再确认执行。5. 常见问题与排查实录5.1 登录与权限类报错那是我第一次接入第三方模型时最头疼的报错。your organization has disabled claude subscription access for claude code这种提示表面看是组织策略限制实际原因往往是你残留了官方登录凭据Claude Code 优先走了官方认证路径然后被官方拦截。排查顺序先删掉~/.claude目录下的.credentials.json等凭据文件再确认环境变量里只有ANTHROPIC_AUTH_TOKEN而没有ANTHROPIC_API_KEY最后重启 Claude Code 重新进入会话。记住第三方模型接入场景下官方登录态是多余且有害的。还有一类报错是claude subscription access相关处理思路同上。只要确认请求是发给本地转换层的这类权限报错基本不会再出现。5.2 网络与连接类报错Windows 上常见的internetopenurl() failed 0x800xxxxx报错出现在 Claude Code 尝试调用系统 URL 协议启动器的时候通常和系统代理配置或默认浏览器关联异常有关。解决办法是重置系统默认浏览器关联或者在系统代理设置里把127.0.0.1:3456加入绕过列表确保本地转换层不会被系统代理截走。连接超时和connection refused的问题更常见本地转换层服务没启动或者端口不对。先确认转换层进程还在再看它监听的端口和你环境变量里的ANTHROPIC_BASE_URL是否一致。本地服务多开时会抢占端口如果同时起了多个转换层实例后面的会报端口占用其实不影响使用但容易混淆你连的是哪个。5.3 Windows 环境专项问题搜索里很多人遇到Claude Code 与 64 位 Windows 不兼容的报错这类问题大多出在安装包阶段。优先用 npm 安装方式而不是 exe 安装包npm 方式不依赖安装架构匹配。如果一定要用安装包下载时确认是 x64 版本而不是 ARM 版本。npm 全局路径问题在 Windows 上也很常见。装完命令找不到大概率是 npm 全局 bin 目录没在系统 PATH 里。设置一下全局路径并重开终端即可。PowerShell 执行策略限制时改用管理员身份运行一次Set-ExecutionPolicy RemoteSigned再执行安装命令。5.4 模型响应异常类问题响应截断在前面聊过核心是maxTokens映射。如果模型经常答一半就停去 config.json 里把对应模型的maxTokens调大并确认转换层版本支持这个字段。404 或model not found报错说明模型 ID 没匹配上。DeepSeek 官方模型 ID 以控制台为准常见的是deepseek-chat和deepseek-reasoner系列。确认你配置里的模型 ID 和官方文档一致。还有一种情况是两个不同的模型供应商都写了name: default转换层分不清该路由到谁。给每个模型的name起唯一的名字并在 config 里显式指定provider字段。最后补充一个排查技巧遇到任何看不懂的报错先去转换层的终端看日志。它会打印收到的请求和转发到上游的响应状态码比 Claude Code 的报错信息有用得多。我遇到过几次 Claude Code 侧只显示请求失败实际上是上游 DeepSeek 返回了 402 余额不足日志里一眼就能看出来。6. 最后我对这套工作流的几点真实体会折腾完这套接入后我自己日常的编码习惯发生了一些变化。以前碰到不熟悉的库或框架第一反应是去翻文档、查示例、跑 demo现在更多是直接打开 Claude Code让它先读项目依赖和现有代码再给我一个改造方案。模型能力不是万能的但在这个工作流里它确实承担了大量体力活——写重复代码、补测试、解释历史遗留模块的逻辑这些都干得有模有样。有一点需要诚实地说DeepSeek 的模型跟 Claude 官方最新模型的巅峰水平还是有差距尤其在极其复杂的多文件架构调整上偶尔会给出不够优雅的方案。但对我个人而言这个成本方案的优势太明显了不需要固定订阅费按实际使用量付费高峰期也不用心疼额度。预算敏感型开发者这套组合拳值得一试。最后再提一个我踩过几次坑后总结的小技巧接入第三方模型后把.claude/settings.json里的配置视为纯净的项目环境变量不要在仓库里提交含敏感 Key 的版本同时给ANTHROPIC_BASE_URL写死本地地址防止某天环境变量被全局配置覆盖后Claude Code 偷偷去请求官方服务然后给你弹一堆看不懂的订阅提示。工作流这东西跑通是一回事跑稳是另一回事希望这篇文章能帮你少走点弯路。