终端里的 AI 编程助手这两年冒出来一大堆,其中最能打的两个大概是 Anthropic 的 Claude Code 和 OpenAI 的 Codex CLI。它们的形态很朴素:一个跑在终端里的对话框,能读你的代码、改你的文件、跑你的命令。

问题是这两位的官方订阅对国内用户不太友好——网络要折腾,价格也不便宜。好消息是 DeepSeek 的 API 同时原生兼容了 Anthropic API 格式(喂给 Claude Code)和 Responses API 格式(喂给 Codex),也就是说,我们可以只用一个 DeepSeek API Key,把这两个工具都盘活。

这篇是我自己踩完坑之后的流水账,从装 Node 开始一路到跑通,顺便记下遇到的报错。

准备工作:安装 Node.js 环境

Claude Code 和 Codex CLI 都是通过 npm 分发的,所以第一步是把 Node.js 装上。

版本要求:Node.js 18 或更高。建议直接装 20 LTS 或 22 LTS,省心。

Node.js 官网 下载对应系统的安装包,一路下一步即可。装完打开终端验证:

1
2
node -v
npm -v

能打印出版本号就说明装好了。

Windows 用户注意:还需要额外安装 Git for Windows。Claude Code 依赖它提供的类 Unix 环境(比如 bashgrep 这些),不装的话启动时会报错。

如果 npm 下载速度感人,可以换个国内镜像源:

1
npm config set registry https://registry.npmmirror.com

安装 Claude Code

一条命令的事:

1
npm install -g @anthropic-ai/claude-code

装完验证一下,能打印版本号就算成功:

1
claude --version

如果这里报 EACCES 权限错误(macOS / Linux 常见),不要急着上 sudo。更好的做法是给 npm 换一个用户目录下的全局安装路径,或者干脆用 nvm 管理 Node,从根上避免权限问题。

安装 Codex CLI

同样是 npm 全局安装:

1
npm install -g @openai/codex

验证:

1
codex --version

这里有个坑:接下来要用的 DeepSeek 配置方案依赖 Codex 的模型目录(model catalog)特性,要求 Codex CLI 版本 ≥ 0.144.0。版本太旧的话后面配置会不生效,先 npm update -g @openai/codex 升到最新。

装完之后**先随便运行一次 codex**(进去之后按 Ctrl+C 退出也行)。这一步是为了让它生成 ~/.codex 配置目录——后面的一键脚本会检查这个目录是否存在。

获取 DeepSeek API Key

  1. 打开 DeepSeek 开放平台,注册并登录。
  2. 进入左侧的 API keys 页面(直达链接:https://platform.deepseek.com/api_keys)。
  3. 点击「创建 API key」,起个名字,创建。
  4. 立刻复制保存——这个 key 只会完整显示这一次,关掉就再也看不到了。

Key 的样子是 sk- 开头的一长串字符。顺便去「充值」页面充点钱,否则调用会直接返回余额不足。

🔐 API Key 等同于你的钱包密码。不要提交到 Git 仓库,不要贴进聊天群,不要写进会被公开的配置文件。

配置 Claude Code 接入 DeepSeek

Claude Code 的接入方式非常优雅——它完全通过环境变量控制后端,所以我们只要把 base_url 指向 DeepSeek 的 Anthropic 兼容端点就行,不需要改任何配置文件。

macOS / Linux

在终端执行(把 <你的 DeepSeek API Key> 换成真实的 key):

1
2
3
4
5
6
7
8
9
export ANTHROPIC_BASE_URL=https://api.deepseek.com/anthropic
export ANTHROPIC_AUTH_TOKEN=<你的 DeepSeek API Key>
export ANTHROPIC_MODEL=deepseek-v4-pro[1m]
export ANTHROPIC_DEFAULT_OPUS_MODEL=deepseek-v4-pro[1m]
export ANTHROPIC_DEFAULT_SONNET_MODEL=deepseek-v4-pro[1m]
export ANTHROPIC_DEFAULT_HAIKU_MODEL=deepseek-v4-flash
export CLAUDE_CODE_SUBAGENT_MODEL=deepseek-v4-flash
export CLAUDE_CODE_EFFORT_LEVEL=max
export CLAUDE_CODE_AUTO_COMPACT_WINDOW=786432

这样设置只在当前终端窗口有效,关掉就没了。要永久生效,把上面这些写进 ~/.bashrc~/.zshrc,然后 source 一下。

Windows(PowerShell)

1
2
3
4
5
6
7
8
9
$env:ANTHROPIC_BASE_URL="https://api.deepseek.com/anthropic"
$env:ANTHROPIC_AUTH_TOKEN="<你的 DeepSeek API Key>"
$env:ANTHROPIC_MODEL="deepseek-v4-pro[1m]"
$env:ANTHROPIC_DEFAULT_OPUS_MODEL="deepseek-v4-pro[1m]"
$env:ANTHROPIC_DEFAULT_SONNET_MODEL="deepseek-v4-pro[1m]"
$env:ANTHROPIC_DEFAULT_HAIKU_MODEL="deepseek-v4-flash"
$env:CLAUDE_CODE_SUBAGENT_MODEL="deepseek-v4-flash"
$env:CLAUDE_CODE_EFFORT_LEVEL="max"
$env:CLAUDE_CODE_AUTO_COMPACT_WINDOW="786432"

同样只对当前 PowerShell 会话有效。想永久写进用户环境变量,用这种写法(以 base_url 为例,其余同理):

1
2
[Environment]::SetEnvironmentVariable("ANTHROPIC_BASE_URL", "https://api.deepseek.com/anthropic", "User")
[Environment]::SetEnvironmentVariable("ANTHROPIC_AUTH_TOKEN", "<你的 DeepSeek API Key>", "User")

设置完要重开一个终端才会生效。

这些变量都在干嘛

变量 作用
ANTHROPIC_BASE_URL 把请求打到 DeepSeek 的 Anthropic 兼容端点,而不是 Anthropic 官方
ANTHROPIC_AUTH_TOKEN 你的 DeepSeek API Key
ANTHROPIC_MODEL 默认使用的模型,[1m] 后缀表示启用 1M 上下文
ANTHROPIC_DEFAULT_OPUS/SONNET/HAIKU_MODEL Claude Code 内部会按档位选模型,这里把三档分别映射到 DeepSeek 的型号
CLAUDE_CODE_SUBAGENT_MODEL 子任务(Subagent)用的模型,用 flash 更省钱更快
CLAUDE_CODE_EFFORT_LEVEL 推理强度,max 是最高档
CLAUDE_CODE_AUTO_COMPACT_WINDOW 自动压缩上下文的触发阈值

顺带一提,DeepSeek 这边还做了模型名映射:只要传进去的是 claude-opus 开头的模型名,会自动映射到 deepseek-v4-proclaude-sonnetclaude-haiku 开头的则映射到 deepseek-v4-flash。传了不认识的模型名,则统一兜底到 deepseek-v4-flash。所以就算某些场景下模型名没配好,也不会直接崩掉。

跑起来

1
2
cd /path/to/my-project
claude

配置 Codex CLI

Codex 走的是 Responses API,DeepSeek 原生支持这个格式。但 Codex 的配置比 Claude Code 麻烦一些——除了 config.toml,还需要一份 models.json 模型目录文件,用来告诉 Codex「这个模型的上下文窗口多大、支持哪些推理档位、用什么工具调用格式」。

那份 models.json 内容非常长(包含完整的 system prompt 模板),手写不现实。所以:

方式一:官方一键脚本(强烈推荐)

DeepSeek 提供了一键配置脚本,会自动备份旧配置、写入 models.json、改好 config.toml

前提:已装好 Codex CLI 并至少运行过一次(~/.codex 目录已存在)。

macOS / Linux:

1
bash <(curl -fsSL https://cdn.deepseek.com/api-docs/codex-deepseek-setup.sh)

Windows(PowerShell):

1
irm https://cdn.deepseek.com/api-docs/codex-deepseek-setup-en.ps1 | iex

运行后会出一个菜单:

  • 1 — 使用 deepseek-v4-flash(快、便宜)
  • 2 — 使用 deepseek-v4-pro(强、贵一点)
  • 3 — 使用 deepseek-v4-flash-vision-exp(额外支持图片输入)
  • 9 — 恢复默认 Codex 配置,删掉所有 deepseek 相关配置

首次运行会让你输入 API Key(sk- 开头)。

这个脚本做事挺讲究的,值得夸一句:

  1. 先备份——把原来的 config.toml 备份到 ~/.codex/backup-deepseek/,随时能还原;
  2. 只改必要字段——你原有的 MCP server、项目信任级别等配置全部保留;
  3. 写入前校验——先验证生成的 config.toml / models.json 语法合法,校验不过就中止,一个字节都不动你的文件;
  4. 删除冲突项时会逐条打印原因,不会闷声改掉你的东西。

想换模型?再跑一次脚本选另一个数字就行。

方式二:手动编辑配置文件

如果你想知道脚本到底改了什么,或者需要自己微调,核心就是 ~/.codex/config.toml 里的这些内容:

1
2
3
4
5
6
7
8
9
10
11
12
model = "deepseek-v4-pro"
model_provider = "deepseek"
preferred_auth_method = "apikey"
forced_login_method = "api"
model_reasoning_effort = "high"
model_catalog_json = "~/.codex/models.json"

[model_providers.deepseek]
name = "deepseek"
base_url = "https://api.deepseek.com/"
wire_api = "responses"
experimental_bearer_token = "<你的 DeepSeek API Key>"

同时还需要一份 ~/.codex/models.json,声明三个 DeepSeek 模型的元数据。这份文件建议直接让上面的一键脚本生成,或者从 DeepSeek 官方文档 里复制完整内容。

⚠️ 最容易踩的坑wire_api 必须是 "responses",**不能是 "chat"**。如果你之前跟着别的教程配过 wire_api = "chat",Codex 会直接启动失败。官方脚本遇到这个值也会强制帮你改成 responses

配置好之后,Codex CLI、ChatGPT 桌面端、VS Code 的 Codex 插件共用同一份配置,配一次三处通用。

跑起来

1
2
cd /path/to/my-project
codex

验证安装与配置

验证 Claude Code

先确认环境变量真的读进去了:

1
2
3
4
5
# macOS / Linux
echo $ANTHROPIC_BASE_URL

# Windows PowerShell
$env:ANTHROPIC_BASE_URL

应该输出 https://api.deepseek.com/anthropic。然后进任意项目目录跑 claude,随便问一句「你是谁,用的什么模型」。能正常回话就说明链路通了。

在 Claude Code 里输入 /status 可以看到当前的模型和端点配置。

验证 Codex

1
codex

启动后界面上应该能看到当前模型是 DeepSeek 系列。同样随便问一句测试。

直接测 API 连通性

如果工具跑不起来,先单独验证 key 和网络是否正常(把 key 换成你自己的):

1
2
3
4
5
6
7
8
curl https://api.deepseek.com/anthropic/v1/messages \
-H "content-type: application/json" \
-H "x-api-key: <你的 DeepSeek API Key>" \
-d '{
"model": "deepseek-v4-pro",
"max_tokens": 100,
"messages": [{"role": "user", "content": "Hi"}]
}'

能返回一段 JSON 就说明 key 和网络都没问题,剩下的就是工具侧的配置问题了。

常见问题排查

claude / codex 提示「不是内部或外部命令」

npm 的全局安装目录不在 PATH 里。先看看全局目录在哪:

1
npm config get prefix

把输出路径(Windows 下再加上 \node_modules\.bin)加进系统 PATH,重开终端。

关掉终端后配置就失效了

export$env: 都只对当前会话有效。参照上文「配置 Claude Code」一节,写进 shell 配置文件或用 SetEnvironmentVariable 持久化。

报 401 / 认证失败

按顺序排查:

  1. API Key 有没有复制全?有没有混进空格或换行?
  2. 用的是 ANTHROPIC_AUTH_TOKEN 吗?如果你机器上还残留着 ANTHROPIC_API_KEY,两者可能打架,建议先清掉旧的。
  3. DeepSeek 账户余额还够吗?
  4. base_url 有没有写对——是 https://api.deepseek.com/anthropic(Claude Code),不是 https://api.deepseek.com

Codex 启动就崩 / 配置不生效

  1. 检查 wire_api 是不是 "responses"
  2. 检查 Codex CLI 版本是否 ≥ 0.144.0,npm update -g @openai/codex
  3. 检查 ~/.codex/models.json 是否存在、model_catalog_json 路径是否指对;
  4. 实在乱了,跑一遍一键脚本选 9 恢复默认,再重新配。

一键脚本报「Codex 配置目录不存在」

说明你装完 Codex 还没运行过。先执行一次 codex 让它生成 ~/.codex,再跑脚本。

Windows 上 Claude Code 启动报错

多半是没装 Git for Windows。装上它,重开终端再试。

npm 安装时 EACCES 权限错误

不要用 sudo npm install -g,那会留下一堆 root 权限的文件后患无穷。正确姿势是用 nvm 管理 Node,或者把 npm 的全局目录改到用户目录下。

请求很慢或超时

如果你挂了代理,注意某些代理会拦截或拖慢 API 请求。可以试着把 api.deepseek.com 加进代理的直连白名单——毕竟 DeepSeek 的服务器在国内,本来就不需要代理。

写在最后

配完之后的体感:Claude Code 的交互设计更成熟,规划任务和多文件改动很稳;Codex 在单文件的精细修改上手感不错,而且 CLI、桌面端、VS Code 插件共用一套配置这点很省心。

两个都装着,换着用,反正 Key 是同一个。

参考资料