最近我把主力编码工具切到了 Claude Code,但并没有用 Anthropic 的官方模型,而是把底层模型换成了 DeepSeek V4 Pro。一句话说清楚这套方案:利用 Anthropic 官方的 Claude Code 命令行工具作为 Agent 外壳,通过它支持的兼容 API 端点接入 DeepSeek V4 Pro,从而同时保留 Claude Code 的多文件编辑、终端命令执行、上下文管理能力,以及 DeepSeek 在编码场景下的长上下文和低成本优势。文章里所有内容都是我完整体验后整理出来的,从环境准备、安装配置、模型切换到日常使用中的各种坑都会覆盖,适合想搭一套低成本 AI 编码工作流、又不想被单一模型绑定的人参考。
1. 方案拆解:为什么是“Claude Code 外壳 + DeepSeek 内芯”
1.1 这个组合解决了什么问题
Claude Code 是 Anthropic 出品的 Agent 式编码工具,跑在终端里,能读项目目录、改代码、执行命令、跑测试,甚至跨文件做大规模重构。和 IDE 里的代码补全完全不是一回事:它是一个“任务型 agent”,你给它一个目标,它自己规划步骤、调用工具、完成修改并验证结果。这种工作方式确实爽,但问题也很直接——官方模型是按订阅或者按 token 计费的,日常高频使用下来的成本并不低,而且很多老项目代码量大,随便一次重构消耗的 token 就非常可观。
这时候把模型层换掉就成了最自然的想法。DeepSeek V4 Pro 在编码任务上的表现足够好,上下文又给得很大,API 单价明显比 Claude 系列便宜一个量级。更大的优势在于,DeepSeek 开放平台提供了 Anthropic API 兼容端点,也就是说 Claude Code 不需要任何改动,只要把请求地址和密钥指过去,就能把一个原本为 Claude 模型设计的工具链,无缝跑在 DeepSeek 模型上。Claude Code 依然是那台车,官方模型是 95 号汽油,DeepSeek 的兼容端点相当于把发动机调校成能吃 92 号油,车还是同一辆,但每公里油费直接降下来了。
当然,这个方案并不是零代价。兼容端点毕竟不是原生协议,个别情况下工具调用格式、超时行为会有细微差异,这也是我后面要重点讲的部分。但整体来说,只要配置正确,Claude Code 的核心体验能保留百分之九十以上。
1.2 成本账:一次真实重构能差多少
我把成本对比放在前面说,是因为这是大多数人决定是否要折腾这套方案的第一理由。下面的价格是 DeepSeek V4 Pro 官方 API 的公开定价,Claude 系列则按 Anthropic 官网标准价格计算,为了便于对比,我以美元计价。
| 项目 | 输入价格(每百万 tokens) | 输出价格(每百万 tokens) |
|---|---|---|
| DeepSeek V4 Pro | 0.14 | 0.28 |
| DeepSeek V4 Pro(缓存命中) | 0.014 | 0.28 |
| Claude Sonnet 4.5 | 3 | 15 |
| Claude Opus 4 | 15 | 75 |
我手头有一个中等规模的 Flask 项目,日志系统散落在二十多个路由文件里,到处都是 print。我让 Claude Code 把日志统一成标准库 logging,日志级别从环境变量读取,同时新建一个配置模块,最后跑通全部测试。整个过程中,模型读取项目文件大约消耗了 120 万输入 tokens,生成了约 18 万 tokens 的输出。套到价格表里算一笔账:
- DeepSeek V4 Pro:1.2 × 0.14 + 0.18 × 0.28 = 0.168 + 0.0504 = 0.2184 美元,换算下来也就一块多人民币。
- Claude Sonnet:1.2 × 3 + 0.18 × 15 = 3.6 + 2.7 = 6.3 美元,人民币四十多元。
- Claude Opus:1.2 × 15 + 0.18 × 75 = 31.5 美元,这就完全不是一个量级了。
一天如果跑二十个类似的小任务,DeepSeek 方案的成本大概是每天几美元,一个月下来维持在一百元人民币以内;同样负载切到 Claude Sonnet,光模型费用一个月就是大几千。所以这套方案在成本上的优势不是百分比,而是十几倍乃至几十倍的差距。这里也解释一下标题里的“免费”到底指什么:Claude Code 本身的安装和使用是免费的,DeepSeek 开放平台新用户有免费额度,拿到额度后一分钱不花就能把整条链路跑通;后续日常使用则是按量计费,但单价足够低,个人开发者和独立接单场景基本没有压力。
2. 接入前准备:安装、密钥与账号模式
2.1 安装 Claude Code:Mac 和 Ubuntu 两条路径
Claude Code 的安装入口是 Anthropic 官方文档,最主流的安装方式是 npm 全局安装,前提是机器上有 Node.js,建议版本不低于 18。老版本 Node 在安装和运行阶段会遇到各种兼容性问题,所以第一步先把 Node 环境搞定。我个人习惯用 nvm 管理 Node 版本,这样项目需要不同 Node 版本时可以随时切换,Claude Code 需要升级时也不用担心系统级权限问题。
Mac 上的安装流程相对省心,执行npm install -g @anthropic-ai/claude-code,装完命令行验证一下,运行claude --version能看到版本号就说明成功了。需要注意的是 Mac 在某些情况下会要求先安装 Xcode Command Line Tools,如果 npm 安装时提示缺少 Python 或 make,多半是 Xcode 工具链没补齐。
Ubuntu 服务器或开发机上,流程一样,但需要先把基础工具链装好。我的做法是:
sudo apt update sudo apt install -y build-essential curl curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash source ~/.bashrc nvm install 20 npm install -g @anthropic-ai/claude-code装完之后claude命令能不能直接用,取决于 npm 全局安装路径是否在 PATH 里。如果遇到找不到命令的情况,多半是 nvm 的软链路径没有生效,重新 source 一下或者检查~/.bashrc就能解决。Ubuntu 上如果走系统自带 Node,建议装npm配套包,然后根据需要切换 npm 镜像源,否则下载速度会让人怀疑人生。
官方还有一个桌面端产品,底层其实复用了同一份配置文件,所以这篇内容以命令行为主线,桌面端和 VS Code 插件只要能跑通 CLI,其余自然就通了。
2.2 准备 DeepSeek V4 Pro 的 API Key 与兼容端点
DeepSeek 开放平台注册后,在控制台里创建 API Key,创建时 Key 只会完整显示一次,一定要立刻保存到本地密码管理器里,丢了我只能重新创建一个。平台提供的 Key 可以用来调用官方 API,也支持 Anthropic 兼容端点,这个兼容地址很关键,它是 Claude Code 和 DeepSeek 之间的桥。
从避免密钥泄露的角度,我不建议把 Key 写死在项目代码里,更不要单纯放在settings.json里然后整个目录提交到 Git 仓库。推荐的做法是放在 shell 环境变量或者密钥管理工具里,Claude Code 运行时自动读取。搭建这套工作流的时候,顺手在项目根目录加一份.gitignore,显式排除包含 Key 的配置文件,这个习惯能避免很多不必要的麻烦。
2.3 注册账号与不注册账号的实际区别
这里有一个不少新手会绕晕的点:Claude Code 支持两种使用模式,一种是登录 Claude 官方账号,用订阅额度调用官方模型;另一种是纯 API 模式,通过环境变量指定 API Key 和 Base URL。如果你准备接入 DeepSeek V4 Pro,走的就是第二种模式,不需要注册 Anthropic 账号,也不需要订阅 Claude,启动时只需要让 Claude Code 读到 DeepSeek 的 Key 和端点即可。
不注册账号最直接的好处是没有订阅成本,也不用关心官方账号的风控逻辑,所有请求都指向 DeepSeek 开放平台,数据流向是清晰可预期的。缺点也存在:使用第三方模型时,官方控制台里看不到你的用量和对话历史,会话记录只保存在本地,后续我单独说这块怎么管理。如果你原本就有 Claude 订阅,可以在保留官方账号的同时配置 cc switch 这类工具做模型切换,用官方模型处理高难任务、用 DeepSeek 处理日常高频任务,算是一种性价比更高的组合玩法。
3. 核心配置:用 cc switch 统一管理多模型
3.1 cc switch 是什么,为什么需要它
直接通过环境变量配置 DeepSeek 其实很简单,但真正用起来就会发现另一个需求:今天想用 DeepSeek V4 Pro 写业务代码,明天想切回官方 Claude 做架构评审,后天朋友推荐 qwen 或 glm 也想试试。如果每次都用 export 手动改环境变量,不仅繁琐,而且很容易因为某个变量漏改导致请求失败。
cc switch 是社区里专门为解决这个问题而做的开源小工具,它把不同模型服务商的配置保存成 profile,切换时一键生效。工具做的事情说白了也不复杂,它会维护一份配置文件,里面记录每个 provider 的 base URL、API Key、模型名称,切换时把这些内容导出到 Claude Code 能读到的环境变量或配置项里。之所以推荐它,是因为它能帮人养成一个良好的工作习惯:所有模型接入信息集中管理,而不是散落在 shell 脚本和笔记里。
3.2 安装并配置 DeepSeek V4 Pro 的 provider
cc switch 的安装方式类似 Claude Code,通过 npm 全局安装即可,安装完成后输入cc-switch进入交互界面。首次使用会让你选择要管理的服务,这里直接选择 Claude Code,然后添加一个新的 provider。名称可以写成 DeepSeek V4 Pro,Base URL 填 DeepSeek 的 Anthropic 兼容地址,API Key 填平台创建的密钥,模型名称填 DeepSeek V4 Pro 对应的模型 ID,如果是官方兼容模式,通常还需要在模型名称后带上上下文窗口配置。
配置完成后,切换回主界面,选中 DeepSeek 这个 profile 并激活,工具会把它写入 Claude Code 的配置目录。验证是否生效很简单,先运行claude --version确认命令正常,然后启动一个空会话,输入任意问题,如果模型回复能正常显示,说明端点已经生效。如果没有生效,优先检查模型名称是否写错,多数兼容端点在返回报错时会把可用的模型 ID 列出来,照着抄一遍就行。
3.3 手工配置方式:不想装工具时直接改环境变量
如果你不喜欢额外装工具,手工配置也完全可行。原理不复杂:Claude Code 在启动时会读取几个关键环境变量,只要在 shell 配置文件里把它们写好,就能把模型的输出指向 DeepSeek。以下是我在~/.bashrc或~/.zshrc里使用的一套配置:
export ANTHROPIC_BASE_URL="https://api.deepseek.com/anthropic" export ANTHROPIC_AUTH_TOKEN="sk-你的DeepSeek密钥" export ANTHROPIC_MODEL="deepseek-v4-pro" export ANTHROPIC_SMALL_FAST_MODEL="deepseek-v4-lite"简单解释一下这几个变量:ANTHROPIC_BASE_URL指定请求发往的地址,改成 DeepSeek 的兼容端点后,Claude Code 就会把所有 API 请求发送到这里;ANTHROPIC_AUTH_TOKEN是鉴权凭证;ANTHROPIC_MODEL是主模型名;ANTHROPIC_SMALL_FAST_MODEL比较容易被忽略,它负责后台轻量任务,比如生成提交信息、任务摘要这类低难度场景,给它配一个更便宜更快的模型可以明显降低成本。
手工配置最大的问题在于多模型切换不方便,而且不同 shell 之间的配置还可能互相覆盖。zsh 用户如果发现环境变量一直不生效,先检查是不是写到了 bashrc 里而当前终端用的是 zsh。我的建议是:如果只是自用、不打算频繁切换,手工配置足够了;如果准备把 DeepSeek、qwen、glm 都纳入日常工具箱,老老实实用 cc switch。
3.4 VS Code 插件接入与终端命令放行
Claude Code 在 VS Code 里的接入方式有两种:官方插件和终端集成。官方插件安装后会自动探测本机的 Claude Code CLI,所以插件是否能正常工作,完全取决于前两步 CLI 和环境变量有没有配置对。打开插件面板时,左侧会出现一个对话界面,可以在 VS Code 里直接对话、查看 diff,适合代码审查和小步修改。
但我自己的实际使用习惯是:插件面板用来做轻量问答,真正的大改动在终端里跑claude。因为终端模式对工具调用的日志展示更直观,模型每执行一个 Bash 命令、每编辑一个文件,都能清楚地看到过程。要特别注意的是,Claude Code 默认在执行终端命令前需要人工确认,这既是一种安全保护,也可以视为一种审批机制。如果你希望模型能够直接执行命令提高效率,可以使用--allowedTools参数放行特定工具,比如claude --allowedTools "Bash(git:*)",表示只允许执行 git 开头的命令。千万不要图省事放行所有 Bash 工具,模型写命令偶尔会有低级失误,一旦匹配了危险操作,后果很难逆转。
4. 完整实操:用 DeepSeek V4 Pro 跑通一次多文件重构
4.1 设计一个可复现的测试任务
讲再多理论都不如一次真实任务有说服力。我特意设计了一个适合复现的编码任务:手头那个 Flask 项目里,日志到处是 print,我需要把整个项目的日志系统升级为标准库 logging。具体要求是:日志级别从环境变量LOG_LEVEL读取,默认 INFO;输出格式统一为带时间戳、模块名、行号的形式;新增一个logging_config.py模块负责统一初始化;所有路由文件的 print 全部替换成 logger 调用;最后运行测试套件确认没有破坏现有功能。
选择这个任务是有原因的。它涉及多个文件的读取和修改,需要模型理解全局结构而不是局部补全;它要求模型新建文件和修改已有文件并行操作;它最后还要求模型自己跑测试并修复问题。换句话说,它把 Claude Code 最核心的能力——多文件编辑、工具调用、命令执行、自我验证——全部涵盖了。
4.2 操作过程实录与 token 消耗
启动claude后,我在初始提示词里直接写下需求,并且额外强调了一句:“不要读取超过 2MB 的单个大文件,涉及大文件时用 grep 定位。”之所以加这句,是因为之前吃过亏,模型试图把项目里的一个 3MB 的 JSON 数据文件完整读入上下文,直接浪费了大量 token。
模型的第一步是列出工程内的 Python 文件清单,然后逐个读取路由文件,识别 print 出现的位置。这个阶段它主要用 Read 工具,整个项目的代码量大约两万行,它读了十几个关键文件就开始动手改了。修改过程中,它每改完几个文件就跑一遍测试,第一次测试因为某个模块的导入路径被我之前调整过而失败,模型通过阅读报错堆栈定位到问题,自己把导入语句修正了,然后再次测试,通过。整个过程九分钟左右,期间还穿插了grep、mkdir、pytest这几个命令。
会话结束后的 token 消耗和成本对比,我在前面已经算过:约 120 万输入 tokens、18 万输出 tokens,总成本折合人民币一块多。这就是一个很典型的日常重构任务量级。
4.3 关键参数调优与上下文控制技巧
实际用下来,有四个参数和习惯对体验影响最大。
第一是上下文管理。DeepSeek V4 Pro 的上下文窗口很大,但 Claude Code 的多文件读取仍然要避免把无关文件塞进来。项目里如果有node_modules、dist、.git这类目录,一定要在项目根目录创建.claudeignore,把这些目录排除掉。这个文件的作用类似.gitignore,Claude Code 读取项目时会自动跳过里面的路径,既节省 token 也减少干扰。
第二是单次回复上限。默认情况下,模型生成超长文件或超大 diff 时可能被截断。Claude Code 支持通过配置环境变量调整输出 token 上限,比如export CLAUDE_CODE_MAX_OUTPUT_TOKENS=32000。在生成完整的工具函数库或者大型测试文件时,这个参数很关键。
第三是模型的选择。DeepSeek V4 Pro 如果支持多档推理强度,我会在主模型上开启较高推理强度,用于复杂重构;同时在 cc switch 里把后台轻量模型的推理强度调低,这部分用于生成 git commit message、任务摘要等场景,省下的 token 积少成多。
第四是打断与重定向。模型如果准备读超大文件或者陷入了局部方案的死胡同,直接在对话里打断它并给出更明确的指令,比让它自己继续硬扛要高效得多。比如输入“不要读大文件,先用 grep 统计每个文件中 print 出现的位置”,模型会立刻切换到命令行工具去处理,这算是性价比极高的 token 省钱技巧。
5. 踩坑记录与常见问题速查
5.1 启动时提示 Claude Code might not be available in your country
这个问题我在部分网络环境下遇到过,现象是启动claude时提示当前地区不支持。先说结论:如果你走的是第三方 API 端点,这个提示通常不会阻断流程,因为请求根本不经过 Anthropic 的服务端校验。如果确实弹出来了,优先检查两件事,一是环境变量是否真的被 Claude Code 读到,二是网络出口是否满足官方支持地区的访问条件。
我遇到过一种特殊情况:机器上之前登录过官方账号,残留的登录态让 Claude Code 在启动时走了订阅模式校验,于是触发了区域提示。清理掉旧登录态、把环境变量切换到 DeepSeek 端点后,问题就不再出现。所以这个错误的排查思路是:先确认自己是 API 模式还是订阅模式,再检查环境变量和登录态,不要一上来就怀疑区域问题本身。
5.2 模型应答很快但完全不调用工具
最典型的异常是:你让它改代码,它也答应得很好,但只是在口头发言,没有实际编辑任何文件。原因通常是工具权限配置不对,Claude Code 默认在遇到不认识的工具时会请求确认,有些环境下确认流程又没法正常弹出,结果就是模型继续用纯文本回复兜底。解决方法是把常用工具显式写进~/.claude/settings.json的 permissions 里,参考配置如下:
{ "permissions": { "allow": [ "Read", "Edit", "Write", "Bash(git:*)", "Bash(pytest*)" ], "deny": [ "Bash(rm -rf *)" ] } }把 Edit、Write 这些工具显式放行后,模型就不再需要每次弹窗确认。如果你依旧看到它不调用工具,可以试着在对话里明说“你可以直接修改文件并运行测试”,把工具调用的预期直接告诉它。
5.3 终端命令执行失败,提示找不到某个命令
Claude Code 执行 Bash 工具时,依赖的是它启动时的 shell 环境。如果你在 VS Code 的 GUI 终端里启动 Claude Code,而环境变量只写在了~/.zshrc里,就有可能出现命令找不到或环境变量为空的情况。排查方法很简单,在同一个终端里先执行echo $ANTHROPIC_BASE_URL看看有没有输出,再看claude命令是从哪个路径加载的。如果环境变量没问题,最稳妥的方式是统一写入~/.profile,并且在启动工具时显式运行bash -l,让它加载登录级环境。
5.4 如何升级到最新版本且不丢配置
Claude Code 迭代速度很快,几乎每个月都有功能更新,模型厂商的兼容端点也会随着协议演进调整。升级命令不复杂:npm update -g @anthropic-ai/claude-code。如果在 Claude Code 交互窗口里,部分版本支持直接输入/upgrade命令在线升级。升级后如果你的配置是通过 cc switch 管理的,一般不会丢失,因为 cc switch 的 provider 信息存在独立配置文件里;但如果你用旧版 cc switch 升级了 Claude Code,建议重新运行一次 cc-switch 的同步逻辑,让两边的版本信息对齐。
5.5 官方控制台看不到用量和对话记录
这是第三方 API 模式下最容易让人困惑的点。由于请求发往 DeepSeek,而对话历史存在本地,Claude Code 官方界面自然看不到任何数据。实际使用中,我主要依赖两个地方:DeepSeek 开放平台后台查看 token 用量和费用明细;本地目录~/.claude/projects/里查看每次会话的 jsonl 记录。这个目录按项目路径命名,每个会话单独一个文件,包含完整的消息历史和工具调用日志。我习惯每隔一段时间把整个 projects 目录备份一次,比任何云同步都可靠。
6. 这套工作流还能怎么扩展
接入 DeepSeek V4 Pro 只是第一步,cc switch 的配置结构天然支持接入更多模型。我现在同时维护了三个 profile:DeepSeek V4 Pro 作为主编码模型,通义千问最新版作为备用模型,GLM 作为快速问答和文案生成模型。切换成本几乎为零,遇到某个模型在特定任务上表现不佳时,一分钟内就能换一个重跑。这种多模型共存的工作流,最大的价值不在于哪个模型最强,而在于你不会被单一供应商绑架。市面上永远会有新模型发布,也永远会有价格变动,而你已经处于一个随时可以切换的位置。
如果你有较强的本机硬件,也可以把本地模型通过 OpenAI 兼容协议暴露给 Claude Code。一些团队就是这么做的:本地模型负责隐私敏感的代码和低成本协商,云端模型负责更复杂的推理任务。不过本地模型对显存和工程能力的要求更高,日常使用还是以云 API 为主,把本地模型作为补充可能更现实。说到底,Claude Code 这个 Agent 外壳的价值,在于它把模型决策、工具执行、上下文管理这些环节标准化了。模型可以换,工具链不变,这大概才是这套低成本 AI 编码工作流里最值得长期投入的部分。