1. 为什么我要折腾这套低成本编码工作流
先说结论:Claude Code 是目前我用过最顺手的终端级 AI 编码工具之一,但它的官方订阅价格对个人开发者和小团队来说并不便宜。而 DeepSeek V4 Pro 的 API 定价,大概是同级别模型里最友好的那一档。把这两者接起来,本质上就是让 Claude Code 这个"壳"去调用 DeepSeek 的"芯",用 OpenAI 兼容接口做桥接,成本能压到原来的零头。
这套方案解决的核心问题是:你想用 Claude Code 的交互体验和工程能力,但不想承担它的订阅费用。适合的人群很明确——独立开发者、学生、小团队里想给每个人都配一个 AI 编码助手的负责人,以及那些已经在用 DeepSeek API 做其他事情、想顺手把编码环节也接进来的人。
我前后折腾了大概三个晚上,踩了不少坑,从环境变量配错到接口地址写反,从模型名对不上到终端权限问题,基本把能犯的错都犯了一遍。这篇文章就是把这些经验完整地摊开讲,包括每一步为什么这么做、参数怎么算、出问题怎么查。你照着走,顺利的话半小时能跑通。
需要提前说明的是,这套方案依赖的是OpenAI 兼容接口这个通用协议。DeepSeek 提供了兼容 OpenAI 格式的 API 端点,而 Claude Code 支持通过环境变量指定自定义的 API 地址和密钥,两者正好能对上。理解这一点,后面所有配置就都顺了。
2. 核心原理拆解:Claude Code 到底怎么被"接管"的
2.1 Claude Code 的请求链路长什么样
Claude Code 本质上是一个跑在终端里的客户端程序。你在终端输入自然语言指令,它把指令、当前项目上下文、文件内容等打包成一个请求,发到后端模型服务,拿到回复后再决定是直接回答你还是执行某个操作(比如改文件、跑命令)。
默认情况下,这个请求发往 Anthropic 官方的服务端点。但 Claude Code 留了一个口子:它支持通过环境变量覆盖 API 的基础地址(base URL)和认证密钥。这就意味着,只要有一个"说同样语言"的服务端,Claude Code 就愿意跟它对话。
这里的"同样语言"指的就是Anthropic Messages API 格式或者OpenAI Chat Completions 格式的兼容层。DeepSeek 提供的是 OpenAI 兼容接口,所以中间需要一个转换,或者直接利用 Claude Code 对 OpenAI 格式的支持能力。
2.2 为什么选 DeepSeek V4 Pro 而不是别的
我对比过几个选项,最后选 DeepSeek 的理由很实在:
| 对比维度 | DeepSeek V4 Pro | 其他同级方案 |
|---|---|---|
| 代码能力 | 强,尤其擅长中英文混合场景 | 部分模型中文注释理解偏弱 |
| 接口兼容性 | 原生 OpenAI 兼容 | 有的需要额外适配层 |
| 定价 | 极低,按 token 计费 | 普遍高出一到两个数量级 |
| 上下文长度 | 足够覆盖常规项目文件 | 部分模型偏短 |
| 稳定性 | 实测连续调用无明显抖动 | 有的高峰期响应慢 |
最关键的是成本可控。Claude Code 的工作模式是频繁读写文件、反复确认,token 消耗比普通对话高得多。如果用高价模型,一天下来账单会很吓人。DeepSeek 的定价让这种高频调用变得可以接受。
2.3 环境变量是整个方案的"总开关"
很多人卡住的地方就在这。Claude Code 读取的配置全部来自环境变量,而不是某个配置文件。这意味着:
- 你改完环境变量,必须重启终端或者重新加载配置,否则不生效
- 不同操作系统设置方式不一样,Windows 用
set或系统设置面板,macOS/Linux 用export - 变量名写错一个字母,程序就找不到,而且报错信息往往很含糊
我建议你先在脑子里建立一个模型:环境变量就是给程序看的"便签",程序启动时扫一眼这些便签,知道该去哪里、用什么身份说话。便签贴错了地方,程序自然就懵了。
3. 动手前的环境准备与依赖检查
3.1 确认你的系统底子
这套方案对系统要求不高,但有几个前提必须满足:
- Node.js 环境:Claude Code 通过 npm 分发,需要 Node.js 18 以上版本。用
node -v检查,低于 18 的先升级。 - npm 可用:
npm -v能输出版本号即可。如果 npm 环境变量 path 没配好,会提示命令找不到,这时候要先把 npm 的全局路径加进 PATH。 - 终端工具:Windows 建议用 PowerShell 或 Windows Terminal,macOS/Linux 用系统自带终端就行。不推荐用老旧的 cmd,它对环境变量的处理比较别扭。
- 网络能正常访问 DeepSeek 的 API 端点:这个自己测一下,能 ping 通或者能发请求即可。
如果你之前配过 Java 环境变量、Python 环境变量、Anaconda 环境变量这些,说明你对 PATH 机制已经有概念,那这部分对你就是小菜。如果没配过,也别慌,下面会讲清楚。
3.2 安装 Claude Code 的两种方式
方式一:全局 npm 安装(推荐)
npm install -g @anthropic-ai/claude-code装完之后,在终端输入claude应该能看到欢迎界面。如果提示命令不存在,八成是 npm 全局 bin 目录没进 PATH。查一下:
npm config get prefix把这个路径下的bin目录(Windows 是根目录本身)加到系统 PATH 里,重启终端再试。
方式二:通过 VS Code 插件
如果你习惯在 VS Code 里干活,也可以装 Claude Code 的 VS Code 插件。装完后在插件设置里同样需要配置 API 地址和密钥。这种方式的好处是能和编辑器深度集成,坏处是配置项藏得比较深,出问题不好排查。我个人的建议是先用命令行版本跑通,再考虑插件,这样出问题能快速定位是配置问题还是插件问题。
3.3 拿到 DeepSeek 的 API Key
去 DeepSeek 的开发者平台注册账号,在控制台里创建一个 API Key。这个 Key 是一串以sk-开头的字符串,只显示一次,务必当场复制保存。丢了只能重新生成。
创建 Key 的时候注意两点:
- 给它起个能认出来的名字,比如
claude-code-workflow,方便以后管理 - 如果平台支持设置额度上限,建议设一个,防止意外跑飞
提示:API Key 等同于你的账户凭证,不要提交到 Git 仓库,不要贴在公开的地方。建议放在环境变量里,而不是硬编码在脚本中。
4. 关键配置:把环境变量配对、配对、再配对
4.1 需要设置的变量清单
Claude Code 接入第三方模型,核心就是这几个变量。不同版本的 Claude Code 变量名可能略有差异,但逻辑一致:
| 变量名 | 作用 | 示例值 |
|---|---|---|
ANTHROPIC_BASE_URL | 指定 API 基础地址 | https://api.deepseek.com |
ANTHROPIC_API_KEY | 认证密钥 | 你的sk-开头的 Key |
ANTHROPIC_MODEL | 指定使用的模型名 | deepseek-chat或对应模型标识 |
ANTHROPIC_SMALL_FAST_MODEL | 处理轻量任务的小模型 | 可设为同一个模型 |
这里有个容易搞混的点:变量名带ANTHROPIC前缀,但值填的是 DeepSeek 的地址和 Key。这不是矛盾,而是因为 Claude Code 沿用了它自己的变量命名习惯,你只是把"目的地"改了。
4.2 各系统设置方法详解
macOS / Linux(bash 或 zsh)
临时生效(当前终端窗口):
export ANTHROPIC_BASE_URL="https://api.deepseek.com" export ANTHROPIC_API_KEY="sk-你的密钥" export ANTHROPIC_MODEL="deepseek-chat"永久生效,写进 shell 配置文件:
echo 'export ANTHROPIC_BASE_URL="https://api.deepseek.com"' >> ~/.zshrc echo 'export ANTHROPIC_API_KEY="sk-你的密钥"' >> ~/.zshrc echo 'export ANTHROPIC_MODEL="deepseek-chat"' >> ~/.zshrc source ~/.zshrc注意:如果你用的是 bash,配置文件是~/.bashrc或~/.bash_profile;zsh 是~/.zshrc。写错文件,重启终端后不生效,这是新手最常踩的坑之一。
Windows(PowerShell)
临时生效:
$env:ANTHROPIC_BASE_URL="https://api.deepseek.com" $env:ANTHROPIC_API_KEY="sk-你的密钥" $env:ANTHROPIC_MODEL="deepseek-chat"永久生效,用系统设置面板:搜索"环境变量",打开"编辑系统环境变量",在"用户变量"里逐个新建。改完必须关掉所有终端窗口重新打开,否则读的还是旧值。
Windows(cmd)
set ANTHROPIC_BASE_URL=https://api.deepseek.com set ANTHROPIC_API_KEY=sk-你的密钥 set ANTHROPIC_MODEL=deepseek-chatcmd 的set只在当前窗口有效,关掉就没了。要永久生效还是得走系统设置面板。
4.3 验证配置是否生效
设置完别急着跑 Claude Code,先验证一下变量有没有读进去:
macOS/Linux:
echo $ANTHROPIC_BASE_URL echo $ANTHROPIC_MODELWindows PowerShell:
echo $env:ANTHROPIC_BASE_URL echo $env:ANTHROPIC_MODEL能正确输出你设置的值,说明环境变量这关过了。如果输出为空,回去检查是不是写错了文件、或者没重启终端。
注意:API Key 不要用 echo 打印出来验证,避免密钥泄露到终端历史记录里。验证前两个变量就够了。
5. 跑通第一个请求:从报错到成功
5.1 首次启动与预期现象
配置好之后,进入你的项目目录,输入:
claude正常情况下会看到 Claude Code 的交互界面。第一次运行可能会让你确认一些条款,或者提示你选择工作目录。跟着走就行。
然后输入一个简单指令测试,比如:
帮我看看当前目录下有哪些文件,并解释这个项目的结构如果配置正确,它会调用 DeepSeek 的接口,返回结果。这时候你观察一下响应速度——DeepSeek 的响应通常很快,如果卡很久,可能是网络问题或者地址配错了。
5.2 常见报错与对应排查
我把踩过的坑整理成一张速查表:
| 报错现象 | 可能原因 | 解决办法 |
|---|---|---|
401 Unauthorized | API Key 错误或未生效 | 检查 Key 是否完整、环境变量是否读入 |
404 Not Found | base URL 写错 | 确认地址没有多余路径,如结尾不要多加/v1 |
model not found | 模型名不对 | 换成平台文档里标注的正确模型标识 |
命令找不到claude | npm 全局路径没进 PATH | 把 npm prefix 下的 bin 加入 PATH |
| 一直转圈无响应 | 网络不通或地址错误 | 用 curl 直接测 API 端点连通性 |
| 环境变量改了没反应 | 终端没重启 | 关掉所有终端窗口重新打开 |
关于 base URL 有个细节:DeepSeek 的 OpenAI 兼容端点通常是https://api.deepseek.com,但有些工具需要你带上/v1。Claude Code 这边实测不带/v1更稳,如果报 404,可以两种都试试。这个没有绝对标准,取决于具体版本。
5.3 用 curl 单独验证接口
如果 Claude Code 报错但你看不出原因,最有效的办法是绕开它,直接用 curl 测接口:
curl https://api.deepseek.com/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer sk-你的密钥" \ -d '{ "model": "deepseek-chat", "messages": [{"role": "user", "content": "你好"}] }'如果这个能返回正常结果,说明 Key 和地址都没问题,问题出在 Claude Code 的配置上。如果这个也报错,那就是 Key 或地址本身的问题,跟 Claude Code 无关。分而治之是排查这类问题的核心思路。
6. 实操心得:让这套工作流真正好用
6.1 模型选择与任务匹配
DeepSeek 提供不同定位的模型。我的经验是:
- 日常编码、改 bug、写注释:用标准对话模型就够,速度快、成本低
- 复杂重构、架构设计:如果平台有更强的推理模型,切过去用,虽然贵一点但值得
- 批量处理、格式化:用最便宜的模型,这类任务不需要多聪明
Claude Code 里可以通过切换ANTHROPIC_MODEL变量来换模型,或者有些版本支持在会话内切换。建议根据任务类型灵活调整,别一个模型用到底。
6.2 控制 token 消耗的实用技巧
Claude Code 的工作方式决定了它很"能吃"token。几个省钱的习惯:
- 项目目录要干净:它会读取上下文,如果目录里塞了一堆无关的大文件,token 哗哗地烧。把
node_modules、日志、构建产物这些排除掉。 - 指令要具体:模糊的指令会让它反复试探,消耗更多 token。直接说"把 utils.js 里的 formatDate 函数改成支持时区参数"比"优化一下这个文件"高效得多。
- 善用
.gitignore类似的忽略机制:有些版本支持配置忽略文件,把不需要它看的目录排除。 - 长会话及时清理:聊得太久上下文会越来越长,适时开新会话。
6.3 权限与安全设置
Claude Code 能执行终端命令、修改文件,这很强大但也有风险。我的做法:
- 首次在重要项目上使用时,先备份或者用 Git 保证可回滚
- 不要给它过高的系统权限,普通用户权限足够
- 敏感文件(密钥、配置)不要放在它会扫描的目录里
- 执行删除、覆盖类命令前,它会请求确认,别习惯性一路回车
提示:如果你在团队环境里用,注意 API Key 的共享问题。建议每个人用自己的 Key,方便追踪用量和出问题时定位。
6.4 和其他工具的配合
这套工作流不是孤立的。我通常这样组合:
- VS Code 负责写代码和看 diff:Claude Code 改完文件,在 VS Code 里 review 变更
- Git 负责版本控制:每次让 AI 大改之前先 commit,改完对比,不满意直接回滚
- 终端负责跑测试:Claude Code 改完,手动跑一遍测试确认没破坏功能
有朋友问能不能接本地模型,比如通过 LM Studio 跑本地模型再接到 Claude Code。技术上可行,思路一样——把 base URL 指向本地的 OpenAI 兼容端点即可。但本地模型的能力和 DeepSeek 这种云端模型差距明显,除非你有特殊的数据隐私要求,否则不推荐。
7. 常见问题速查与避坑清单
7.1 配置类问题
问题:改了环境变量,Claude Code 还是用旧的配置。
这是最高频的问题。原因几乎都是终端没重启。环境变量在进程启动时读取,改完之后已经运行的终端读的还是旧值。解决办法:关掉所有终端窗口,重新打开。Windows 上尤其要注意,系统设置面板改完变量后,已经开着的 PowerShell 不会自动更新。
问题:Windows 上路径里有空格导致出错。
如果 npm 全局路径或者项目路径里有空格,某些命令会解析错误。解决办法是用引号包裹路径,或者干脆把相关目录移到没有空格的路径下。
问题:多个项目需要不同的配置。
可以在项目目录下写一个启动脚本,临时设置环境变量再启动 Claude Code,这样不同项目互不干扰。比如写个start-claude.sh:
#!/bin/bash export ANTHROPIC_BASE_URL="https://api.deepseek.com" export ANTHROPIC_API_KEY="sk-项目专用密钥" export ANTHROPIC_MODEL="deepseek-chat" claude7.2 使用类问题
问题:响应很慢。
先排除网络因素,用 curl 测接口延迟。如果接口本身快,那就是 Claude Code 在处理上下文,项目文件太多会导致它读取慢。精简项目目录。
问题:它改错了代码。
这是 AI 编码的固有风险。我的习惯是:大改动前先 commit,改完用git diff看变更,确认没问题再继续。不要让它一次性改太多文件,分批来,每批确认一次。
问题:某些命令执行失败。
Claude Code 执行终端命令时,用的是当前 shell 环境。如果某个命令依赖特定的环境变量(比如 Java 的JAVA_HOME、Maven 的M2_HOME),要确保这些变量在启动 Claude Code 的终端里已经配好。这跟前面配 Claude Code 自己的变量是两回事,别搞混。
7.3 成本控制清单
- 定期去 DeepSeek 控制台看用量,心里有数
- 给 API Key 设置额度上限
- 简单任务用便宜模型
- 保持项目目录干净,减少无效上下文
- 长会话及时开新的
8. 我个人的几点体会
折腾完这套东西,最大的感受是:AI 编码工具的价值不在于模型多强,而在于工作流顺不顺。Claude Code 的交互设计确实好,它知道什么时候该问你、什么时候该直接动手,这种"分寸感"是很多工具欠缺的。而 DeepSeek 把成本打下来之后,你才敢真正把它当成日常工具用,而不是偶尔尝鲜。
另一个体会是,环境变量这个看似基础的东西,实际上是很多工具链的命门。我见过太多人卡在"配置不生效"上,最后发现就是终端没重启或者文件写错了。把这一块搞明白,以后接任何第三方服务都会顺很多。
最后分享一个小技巧:如果你同时用多个 AI 服务,可以写一个切换脚本,一键在 DeepSeek、其他模型之间切换环境变量。这样测试不同模型对同一任务的表现时特别方便,不用每次手动改一堆变量。我自己就维护了这么一个脚本,用下来省了不少事。