
把 DeepSeek 接入 Claude Code是最近 AI 编程工具链里讨论度非常高的话题。Claude Code 是 Anthropic 提供的命令行编程助手默认调用 Claude 模型但它的接口层可以通过环境变量重定向到其他兼容 Anthropic Messages API 的服务。很多人以为把 API Key 换掉就能用 DeepSeek真实落地时却会遇到协议格式不一致、模型名不存在、SSE 流式解析失败、上下文被截断等一系列问题。这篇文章从模型接入原理讲起给出一套最小可运行方案再对比 DeepSeek 与 GPT 系列模型在 Claude Code 里的成本与表现最后整理常见报错的排查路径。先说明一点标题里的“DeepSeek Flash”和“GPT 5.6 luna”都属于视频化表达不一定是官方模型名。DeepSeek 官方 API 里更常见的模型名是deepseek-chat和deepseek-reasoner。配置前先确认 API 文档否则会在模型名和协议上浪费大量时间。1. 为什么 Claude Code 能接入 DeepSeek而不是被 Claude 绑定1.1 Claude Code 的默认调用链路Claude Code 启动后会读取环境变量把请求发送到 Anthropic Messages API。默认情况下模型是 Claude 系列鉴权使用 Anthropic API Key。这个设计决定了它并不是一个只能连接 Anthropic 的封闭工具而是允许开发者通过环境变量把请求地址迁到其他服务。核心环境变量有三个export ANTHROPIC_BASE_URLhttp://127.0.0.1:3456 export ANTHROPIC_AUTH_TOKENyour-token export ANTHROPIC_MODELdeepseek-chat设置之后Claude Code 会把原本发给 Anthropic 的请求发到ANTHROPIC_BASE_URL指向的地址。这就为接入 DeepSeek 提供了入口。但只改 URL 不够。Claude Code 发送的是 Anthropic 结构而 DeepSeek 官方 API 接收的是 OpenAI 结构。两者在端点路径、请求体、消息内容格式、流式事件类型上都不一样。中间必须有一层协议转换否则会看到 404、400或者“看起来有响应但客户端解析不了”的问题。1.2 Anthropic Messages API 与 OpenAI Chat Completions 的差异把两个协议放在一起看最容易理解为什么不能直接替换维度Anthropic Messages APIOpenAI Chat Completions端点路径/v1/messages/chat/completions请求结构system数组 messages数组messages数组system 也放进 messages消息内容格式content是数组支持text、image、tool_use、tool_resultcontent通常是字符串或 OpenAI 风格 multimodal 数组流式事件message_start、content_block_delta、message_stopchat.completion.chunk增量在delta.content中鉴权方式x-api-key或AuthorizationBearerAuthorizationBearer如果中间没有协议转换层直接请求 DeepSeek最容易出现的错误是接口 404或者收到 OpenAI 格式的流式数据后Claude Code 无法识别。1.3 DeepSeek 模型命名和兼容边界DeepSeek 官方 API 常用模型名是deepseek-chat和deepseek-reasoner。deepseek-chat适合代码生成、重构、解释和批量处理deepseek-reasoner适合需要复杂推理链的任务。配置时不要照抄视频标题里的deepseek-flash。如果平台确实提供了 Flash 别名以平台文档为准如果文档找不到就不要在配置文件里写这个模型名。DeepSeek API 本身是 OpenAI 兼容协议。因此要把 DeepSeek 接入 Claude Code不是简单“换个 Key”而是要在 Claude Code 和 DeepSeek 之间增加一个能完成协议转换的网关。2. 环境准备先把依赖和密钥确认好2.1 准备清单项目要求说明Node.js18 及以上Claude Code 依赖 npm 安装低版本会报错npm与 Node 配套也可以使用 pnpm 或 yarn以官方安装说明为准Claude Code CLI最新版使用npm install -g anthropic-ai/claude-code安装DeepSeek API KeyDeepSeek 平台创建创建后立即保存部分平台只显示一次本地网关二选一使用社区路由器或者自建协议转换服务学习环境只需要跑通一条链路。生产环境还要额外考虑日志、监控、限流、多 Key 管理和成本统计不能只满足于“能生成结果”。2.2 安装 Claude Codenpm install -g anthropic-ai/claude-code claude --version如果claude命令找不到检查 npm 全局 bin 目录是否在 PATH 中。在 Windows 上注意使用管理员权限的 PowerShell或者用 nvm 统一管理 Node 版本避免权限混乱。2.3 获取并测试 DeepSeek API Key在 DeepSeek 开放平台创建 API Key记好sk-开头的密钥。先不要直接进入 Claude Code先用 curl 验证 Key这样能快速区分问题出在 API Key 还是网关。export DEEPSEEK_API_KEYsk-xxxx curl https://api.deepseek.com/chat/completions \ -H Content-Type: application/json \ -H Authorization: Bearer $DEEPSEEK_API_KEY \ -d { model: deepseek-chat, messages: [ {role: user, content: 只回复 ok} ], stream: false }正常情况下返回 JSON 里有choices[0].message.content和usage说明 Key 有效。如果返回Invalid API key先检查环境变量是否真的被 shell 导出再检查 Key 是否复制完整。3. 最小接入方案用一个本地网关把协议转换掉3.1 选哪种网关接入方案取决于你的 API 网关能力。方案 A如果 API 网关服务已经提供 Anthropic 兼容端点直接设置ANTHROPIC_BASE_URL到该端点再用对应的鉴权 token。这种方式最简单不需要自己搭网关。方案 B如果只有 OpenAI 兼容端点例如 DeepSeek 官方 API那么需要在本地启动一个协议转换网关。下面以社区常用的 claude-code-router 为例说明完整流程。3.2 安装并启动 claude-code-router这里以社区项目 claude-code-router 为例具体命令和配置字段以你安装版本的 README 为准。npm install -g claude-code-router claude-code-router启动后它默认监听本地的127.0.0.1:3456。然后需要把 DeepSeek 模型映射到网关配置中。配置示例{ port: 3456, model: deepseek-chat, providers: [ { name: deepseek, baseUrl: https://api.deepseek.com/v1, apiKey: sk-xxxx, models: [deepseek-chat, deepseek-reasoner] } ] }字段名称会因为工具版本不同而变化。核心要确认三件事模型名、DeepSeek 的 BaseURL、API Key 注入方式。网关的作用是把 Claude Code 发来的/v1/messages请求转换成 DeepSeek 能识别的 OpenAI 格式再把 OpenAI 格式的流式响应转换回 Anthropic SSE 格式。3.3 设置 Claude Code 环境变量并启动export ANTHROPIC_BASE_URLhttp://127.0.0.1:3456 export ANTHROPIC_AUTH_TOKENsk-xxxx export ANTHROPIC_MODELdeepseek-chat cd ~/deepseek-claude-demo claude --debug这里的ANTHROPIC_AUTH_TOKEN不是 Claude 订阅 token而是自定义网关接受的 token。不同版本的 Claude Code 可能使用ANTHROPIC_API_KEY而不是ANTHROPIC_AUTH_TOKEN可以在claude --help或官方文档中确认。如果版本支持也可以在 Claude Code 会话中用/model切换模型。3.4 不依赖现成网关时理解最小协议映射如果你不想引入现成工具想自己写一个协议转换服务核心映射逻辑可以简化为下面的思路把 Anthropic 的system数组合并成 OpenAI 的 system 消息把messages[].content数组提取成纯文本然后转发到 DeepSeek。function extractText(content) { if (typeof content string) return content; if (Array.isArray(content)) { return content .filter((block) block.type text) .map((block) block.text || ) .join(\n); } return ; } function toOpenAIMessages(body) { const messages []; if (Array.isArray(body.system)) { messages.push({ role: system, content: body.system.map((s) s.text || ).join(\n) }); } for (const item of body.messages || []) { if (item.role user) { messages.push({ role: user, content: extractText(item.content) }); } else if (item.role assistant) { messages.push({ role: assistant, content: extractText(item.content) }); } } return messages; }流式响应转换更复杂。OpenAI 的data: {choices:[{delta:{content:...}}]}要转换成 Anthropic 的content_block_delta并且补上message_start、message_delta和message_stop事件。如果 Claude Code 使用工具调用自建网关还要处理tool_use和tool_result工作量会明显上升。生产环境不建议自己维护这种转换层除非你的需求非常固定。4. 二番战在真实任务里验证接入和性价比4.1 用一个小任务验证链路进入项目目录后给 Claude Code 一个明确任务写一个 debounce 函数支持立即执行参数然后用 Node 的 assert 写 3 个测试用例。预期结果是 Claude Code 能创建或修改文件并分块返回文本。如果只能输出普通文本但不能写文件重点检查网关是否完整支持工具调用。先跑通这个最小任务再进入复杂项目。最小任务能一次性验证模型名、鉴权、协议转换、流式输出和文件写入五条链路。4.2 继续追问验证上下文保持输入继续给这个函数补充 TypeScript 类型并说明使用场景。如果回答仍然记得刚才的 debounce说明多轮上下文在网关里被正确保留。如果回答变成了无关内容说明网关在转换assistant消息时丢失了历史记录。上下文问题是接入第三方模型时最容易被忽略的地方。很多网关只处理了第一次请求没有把上一轮assistant的完整消息回传给下游模型导致第二轮开始“失忆”。4.3 记录 token 和成本成本计算公式总成本 输入 token 数 × 输入单价 输出 token 数 × 输出单价指标读取位置prompt_tokensDeepSeek 控制台或网关日志completion_tokensDeepSeek 控制台或网关日志会话总成本按公式计算建议每次实验都记录模型名、任务类型、token 数、耗时和结果。不要只看“看起来能用”就下结论性价比要有数据支撑。5. DeepSeek 与 GPT 系列选型不要被模型名带偏5.1 “GPT 5.6 luna”先不要写进配置标题里出现 GPT 5.6 luna 时我建议先查 OpenAI 官方模型列表而不是直接把这个名字填进ANTHROPIC_MODEL。公开资料中这个名称存在多种理解第三方网关别名、视频标题里的概念或者社群自造称呼。在没有经过验证之前把它当配置项会得到 404 或 model not found。真正做选型要看官方文档给出的模型 ID 和接口兼容性。类似地搜索里常见的 DeepSeek Harness 这类名称也要先确认它是什么工具、是否提供官方支持的 API再决定是否接入。5.2 能力、成本与接入方式对比下表是常规场景下的经验判断。模型价格和能力会随官方更新变化落地前要以当前定价页和实测为准。维度DeepSeek-Chat / DeepSeek-ReasonerGPT 系列API 协议OpenAI 兼容OpenAI 兼容接入 Claude Code需要协议转换网关需要 Anthropic 兼容网关或官方能力长文本处理上下文较长成本通常更低上下文和成本要看具体模型推理型任务DeepSeek-Reasoner 可选部分模型自带推理能力工具调用成熟度需要实测生态较成熟适合场景批量重构、代码解释、长文档总结复杂架构设计、重点难点攻坚这不是“谁最强”的问题。对同一个任务成本、