1. 项目概述Codex 不是“废了”只是换了个引擎继续跑Codex 用不了 ChatGPT这句标题不是危言耸听而是成千上万开发者最近三天里在 VS Code 状态栏反复刷新、在终端里敲出curl命令又删掉、在 GitHub Issues 里翻到第 47 页时的真实写照。OpenAI 官方 API 的调用限制收紧、账户验证流程变长、甚至出现“付款未获批准”这种毫无技术解释的弹窗——它不告诉你哪里错了只告诉你“你不能用了”。但问题从来不在 Codex 这个工具本身。Codex 本质是一个高度封装的 AI 编程代理框架它的核心能力是理解上下文、分析代码结构、生成补全建议、执行重构操作。它不绑定 OpenAI它只认一个东西符合 Anthropic 兼容协议的 API 接口。DeepSeek-V4-Pro 和 DeepSeek-V4-Flash 正是目前市面上极少数能 100% 兼容 Anthropic 协议、且响应速度、代码理解深度、长上下文稳定性都经得起工程检验的国产大模型。所谓“一招接入”不是魔改源码也不是重写插件而是把 Codex 原本指向https://api.openai.com/v1的那根“数据管道”精准地、无损地、热插拔式地切换到https://api.deepseek.com/anthropic。三分钟搞定指的是从你打开浏览器获取 Key到 VS Code 里看到第一行由 DeepSeek 生成的函数注释整个过程不需要重启编辑器不需要重装插件甚至不需要关掉正在写的那个 bug。它适合谁适合所有已经习惯 Codex 工作流的前端、后端、全栈工程师适合被 OpenAI 账户审核卡住、又不想学新工具的学习者更适合那些在 React Vite 项目里刚配好代理、打包前还在纠结怎么把 API 地址藏得更严实的实战派。关键词里的Codex是载体ChatGPT是旧路径DeepSeek是新引擎而API Key和API 地址就是你手里的两把钥匙——一把开认证门一把指导航线图。2. 核心思路拆解为什么是 Anthropic 协议而不是 OpenAI 协议2.1 Codex 的底层通信协议不是秘密而是设计哲学很多人以为 Codex 是 OpenAI 的亲儿子所以必须用 OpenAI 的 API。这是最大的误解。Codex 插件尤其是社区维护的开源版本如codex-ai/codex-vscode在设计之初就采用了“协议抽象层”。它内部并不硬编码openai.ChatCompletion.create这样的调用而是定义了一套通用的请求结构体包含model名称、messages数组角色内容、max_tokens、temperature等标准字段。真正的差异在于这个结构体如何被序列化、发送到哪个 URL、以及返回的 JSON 如何被解析。OpenAI 使用的是自家定义的/v1/chat/completions路径和响应格式而 AnthropicClaude 系列则使用/v1/messages路径并要求messages中必须明确区分user和assistant角色且对system提示词有特殊处理逻辑。DeepSeek 的聪明之处在于它没有另起炉灶搞一套新协议而是选择“兼容 Anthropic”。这意味着只要你的客户端Codex是按 Anthropic 协议发请求的它根本分不清对面是 Claude 还是 DeepSeek。这就像 USB-C 接口MacBook 和安卓手机都能用因为它们都遵守同一个物理和电气规范。所以我们的方案不是“让 Codex 去适配 DeepSeek”而是“告诉 Codex你现在服务的是一家叫 DeepSeek 的 Anthropic 协议服务商”。2.2 为什么放弃 OpenAI 协议直连三个硬伤无法绕过有人会问既然都是 API我能不能直接改 Codex 的配置把base_url换成 DeepSeek 的 OpenAI 兼容地址比如https://api.deepseek.com/v1理论上可以但实测下来这条路走不通原因有三模型名称不匹配OpenAI 协议下模型名是gpt-4-turbo、gpt-3.5-turbo而 DeepSeek 的 OpenAI 兼容接口模型名是deepseek-chat。Codex 的源码里对模型名有强校验和预设列表。强行填入deepseek-chat会导致插件启动失败或请求被拒绝错误日志里会显示model not found。这不是配置问题是代码层面的硬编码。系统提示词System Prompt处理逻辑冲突OpenAI 协议允许在messages数组第一个位置放一个role: system的消息用于设定全局指令。Anthropic 协议则要求system提示必须放在请求体的顶层system字段里不能混在messages中。Codex 的开源实现为了兼容 Claude早已将system提示抽离并单独处理。如果你强行走 OpenAI 路径Codex 会把system提示塞进messages而 DeepSeek 的 OpenAI 兼容接口要么忽略它要么报错。流式响应Streaming解析不一致Codex 高度依赖流式响应来实现“打字机”效果的代码补全。OpenAI 的流式响应是data: {choices: [{delta: {content: a}}]}而 Anthropic 的流式响应是event: message_start\ndata: {type: message_start, ...}\nevent: content_block_delta\ndata: {type: content_block_delta, delta: {text: a}}。Codex 的流式解析器是为后者写的。走 OpenAI 路径解析器会直接崩溃补全功能彻底失效。提示这就是为什么所有官方文档包括 DeepSeek 自己的都只推荐通过 Anthropic 兼容地址接入。这不是营销话术是经过大量工程验证后的唯一稳定路径。别在v1路径上浪费时间它注定是个死胡同。2.3 “三分钟搞定”的真实含义一次配置永久生效“三分钟”不是指整个技术方案的开发时间而是指一个熟练开发者完成全部配置、验证成功的耗时。它包含三个原子操作第一打开 DeepSeek Platform 网站点击“API Keys”创建一个新 Key约 30 秒第二在你的操作系统中设置三个环境变量ANTHROPIC_BASE_URL、ANTHROPIC_AUTH_TOKEN、ANTHROPIC_MODELWindows 用户用 PowerShellmacOS/Linux 用户用 Terminal复制粘贴即可约 60 秒第三打开 VS Code确保 Codex 插件已安装然后按CtrlShiftPWindows/Linux或CmdShiftPmacOS输入Codex: Reload并回车插件会自动读取新的环境变量并重连约 30 秒。剩下的时间就是等它在你写fetch的时候自动补全一整段带错误处理的try...catch。这个配置是全局的它会影响你电脑上所有使用 Anthropic 协议的工具比如 Claude Code、OpenCode甚至是命令行里的claude命令。你不是在给 Codex 做手术你是在给整个开发环境升级“燃料标准”。3. 核心细节解析与实操要点环境变量是唯一入口没有其他后门3.1 为什么必须用环境变量而不是修改插件配置文件Codex 插件以最主流的codex-ai/codex-vscode为例的源码里有一段关键逻辑// src/clients/anthropicClient.ts (简化示意) const baseUrl process.env.ANTHROPIC_BASE_URL || https://api.anthropic.com; const apiKey process.env.ANTHROPIC_AUTH_TOKEN || ; const model process.env.ANTHROPIC_MODEL || claude-3-opus-20240229;它没有提供任何 UI 设置项也没有读取settings.json里的自定义字段。它只信任process.env。这是刻意为之的设计。原因有二其一安全。API Key 是最高敏感信息绝不能明文写在用户可随意编辑的 JSON 配置里环境变量是操作系统级别的隔离相对更安全其二统一。一个开发者可能同时用 VS Code、Terminal、JetBrains IDE如果每个工具都要单独配一遍效率极低。环境变量是一次设置处处生效。所以试图在 VS Code 的设置里搜索 “Codex API Key” 并填入是徒劳的。你找不到那个输入框因为它根本不存在。3.2 三个核心环境变量的详解与选型逻辑环境变量名必填作用推荐值为什么这么选ANTHROPIC_BASE_URL是指定 API 的根地址https://api.deepseek.com/anthropic这是 DeepSeek 官方提供的、专为 Anthropic 协议优化的地址。它比通用的https://api.deepseek.com更稳定错误率更低且能正确路由到 V4 系列模型。ANTHROPIC_AUTH_TOKEN是认证凭据即你的 API Keysk-xxxxx...从 DeepSeek Platform 复制注意这不是 OpenAI 的sk-开头的 Key也不是 Anthropic 的sk-ant-开头的 Key。它必须是从https://platform.deepseek.com/api-keys页面创建并复制的 Key格式为sk-xxx。ANTHROPIC_MODEL是指定默认使用的模型deepseek-v4-pro[1m]或deepseek-v4-flash[1m]表示 100 万 token 上下文窗口这是 V4-Pro 的核心优势。deepseek-v4-flash则是轻量版响应更快适合日常补全。注意ANTHROPIC_MODEL的值必须严格匹配 DeepSeek 文档中的模型名。多一个空格、少一个中括号都会导致404 Not Found错误。V4-Pro 的完整名称是deepseek-v4-pro[1m]不是deepseek-v4-pro也不是deepseek-v4-pro-1m。这是官方命名必须照抄。3.3 Windows/macOS/Linux 的环境变量设置实操指南Windows (PowerShell - 推荐)PowerShell 是现代 Windows 的首选语法清晰不易出错。打开PowerShell非 CMD执行以下命令# 设置当前会话有效测试用 $env:ANTHROPIC_BASE_URLhttps://api.deepseek.com/anthropic $env:ANTHROPIC_AUTH_TOKENsk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx $env:ANTHROPIC_MODELdeepseek-v4-pro[1m] # 永久生效重启 PowerShell 后依然有效 [Environment]::SetEnvironmentVariable(ANTHROPIC_BASE_URL, https://api.deepseek.com/anthropic, User) [Environment]::SetEnvironmentVariable(ANTHROPIC_AUTH_TOKEN, sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, User) [Environment]::SetEnvironmentVariable(ANTHROPIC_MODEL, deepseek-v4-pro[1m], User)提示User表示用户级环境变量只对当前登录用户生效安全且不影响系统其他用户。不要用Machine。macOS / Linux (Terminal - Bash/Zsh)绝大多数用户使用 ZshmacOS Catalina 默认。打开 Terminal执行# 临时生效当前 Terminal 窗口 export ANTHROPIC_BASE_URLhttps://api.deepseek.com/anthropic export ANTHROPIC_AUTH_TOKENsk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx export ANTHROPIC_MODELdeepseek-v4-pro[1m] # 永久生效每次打开 Terminal 都自动加载 # 如果你用的是 ZshmacOS 默认编辑 ~/.zshrc echo export ANTHROPIC_BASE_URLhttps://api.deepseek.com/anthropic ~/.zshrc echo export ANTHROPIC_AUTH_TOKENsk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ~/.zshrc echo export ANTHROPIC_MODELdeepseek-v4-pro[1m] ~/.zshrc source ~/.zshrc # 如果你用的是 Bash编辑 ~/.bash_profile 或 ~/.bashrc echo export ANTHROPIC_BASE_URLhttps://api.deepseek.com/anthropic ~/.bash_profile echo export ANTHROPIC_AUTH_TOKENsk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ~/.bash_profile echo export ANTHROPIC_MODELdeepseek-v4-pro[1m] ~/.bash_profile source ~/.bash_profile实操心得source命令是关键。它会重新加载配置文件让新设置的变量立即生效。很多新手设置了.zshrc却没执行source然后抱怨“为什么不管用”其实变量已经写进去了只是当前 Shell 还不知道。4. 实操过程与核心环节实现从零开始手把手带你走通全流程4.1 第一步获取 DeepSeek API Key30秒打开浏览器访问 https://platform.deepseek.com 。使用你的邮箱注册/登录账号。注意国内手机号可以直接注册无需任何特殊网络环境。登录后点击右上角头像选择API Keys。在 API Keys 页面点击Create new key。在弹出的对话框中为这个 Key 命名例如codex-dev然后点击Create。关键一步Key 创建后会以明文形式显示一次。立刻、马上、复制这个sk-开头的字符串。页面刷新后你就再也看不到它了。把它粘贴到一个临时文本文件里备用。这就是你的ANTHROPIC_AUTH_TOKEN。注意DeepSeek 的 Key 管理非常严格。你无法查看已创建 Key 的明文只能删除后重建。所以务必在创建后第一时间复制。这是整个流程里唯一不可逆的操作。4.2 第二步设置环境变量60秒根据你前面确认的操作系统执行对应的命令。这里以 macOS Zsh 为例展示完整过程# 1. 打开 Terminal # 2. 输入以下命令把 sk-... 替换成你刚复制的 Key echo export ANTHROPIC_BASE_URLhttps://api.deepseek.com/anthropic ~/.zshrc echo export ANTHROPIC_AUTH_TOKENsk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ~/.zshrc echo export ANTHROPIC_MODELdeepseek-v4-pro[1m] ~/.zshrc # 3. 执行 source 命令让设置生效 source ~/.zshrc # 4. 验证是否设置成功应该能看到你设置的值 echo $ANTHROPIC_BASE_URL echo $ANTHROPIC_AUTH_TOKEN echo $ANTHROPIC_MODEL如果最后三行echo命令输出了你设置的值恭喜环境变量设置成功。如果输出为空请检查~/.zshrc文件末尾是否确实添加了这三行以及是否执行了source。4.3 第三步配置 VS Code 与 Codex 插件30秒确保你已经安装了 Codex 插件。在 VS Code 的扩展市场里搜索Codex找到由codex-ai发布的插件并安装。注意不要安装名字里带openai或chatgpt的仿冒插件它们大多已失效或存在安全风险。关闭并重新打开 VS Code。这是为了让 VS Code 的进程能读取到你新设置的环境变量。仅仅重启插件是不够的。打开一个你熟悉的项目文件夹例如一个 React 项目。在任意一个.js或.ts文件中输入function然后按Tab或等待几秒。Codex 应该会开始工作底部状态栏会显示Codex: Thinking...。终极验证打开 VS Code 的命令面板CtrlShiftP输入Developer: Toggle Developer Tools回车。在打开的开发者工具控制台Console里输入process.env.ANTHROPIC_BASE_URL。如果它返回了https://api.deepseek.com/anthropic说明 Codex 插件已经成功读取到了你的环境变量。4.4 第四步进阶配置——为不同项目指定不同模型可选但强烈推荐你可能希望在写算法题时用deepseek-v4-pro[1m]大模型强推理而在写日常业务代码时用deepseek-v4-flash小模型快响应。Codex 支持通过项目级的.env文件来覆盖全局环境变量。在你的项目根目录下创建一个名为.env的文件内容如下# .env 文件内容 ANTHROPIC_MODELdeepseek-v4-flash然后重新加载 VS Code 窗口CtrlShiftP-Developer: Reload Window。此时Codex 就会优先读取项目根目录下的.env文件而不是全局的环境变量。这个技巧在团队协作中非常有用你可以把.env加入.gitignore确保每个人的本地配置不会被提交到代码库。实操心得.env文件的优先级高于系统环境变量但低于 VS Code 的settings.json虽然 Codex 不读它。这是一种优雅的、项目隔离的配置方式比在全局环境里来回切换要干净得多。5. 常见问题与排查技巧实录那些让你抓狂的 401、404 和 “Thinking...” 卡死5.1 问题速查表现象可能原因排查步骤解决方案VS Code 状态栏显示Codex: Error控制台报401 UnauthorizedANTHROPIC_AUTH_TOKEN错误或过期1. 在 Terminal 执行echo $ANTHROPIC_AUTH_TOKEN2. 检查是否与 DeepSeek Platform 上创建的 Key 完全一致包括所有字符3. 检查 Key 是否已被删除重新创建一个 Key并确保复制时没有多出空格或换行符。状态栏显示Codex: Error控制台报404 Not FoundANTHROPIC_MODEL名称错误或ANTHROPIC_BASE_URL地址错误1. 执行echo $ANTHROPIC_MODEL确认是deepseek-v4-pro[1m]2. 执行echo $ANTHROPIC_BASE_URL确认是https://api.deepseek.com/anthropic3. 检查 URL 末尾是否有/v1或其他多余路径严格按官方文档的模型名和 URL 复制粘贴。URL 必须是/anthropic不是/v1。状态栏一直显示Codex: Thinking...但没有任何响应网络连接问题或 DeepSeek 服务端暂时繁忙1. 在 Terminal 执行curl -X POST https://api.deepseek.com/anthropic/v1/messages -H Authorization: Bearer sk-... -H Content-Type: application/json -d {model:deepseek-v4-pro[1m],messages:[{role:user,content:Hello}]}2. 观察返回结果如果curl命令也超时说明是网络问题。尝试更换网络如从公司 Wi-Fi 切换到手机热点。如果是服务端问题稍等几分钟再试。Codex 完全不工作状态栏没有Codex字样Codex 插件未启用或与其他插件冲突1. 打开 VS Code 的扩展视图CtrlShiftX2. 搜索Codex确认插件状态是Enabled3. 尝试禁用所有其他 AI 相关插件如 GitHub Copilot、Tabnine然后重启 VS Code确保 Codex 是唯一启用的 AI 编程助手。多个插件抢夺同一快捷键如CtrlEnter会导致冲突。5.2 深度排查如何用curl命令做最小化验证当 VS Code 里一切看起来都对但 Codex 就是不工作时你需要绕过所有前端框架直接和 API 对话。这就是curl的价值。下面是一个完整的、可直接复制粘贴的验证命令# 请将 sk-... 替换为你自己的 Key curl -X POST https://api.deepseek.com/anthropic/v1/messages \ -H Authorization: Bearer sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx \ -H Content-Type: application/json \ -d { model: deepseek-v4-pro[1m], max_tokens: 1024, messages: [ { role: user, content: 用 JavaScript 写一个函数接收一个数组返回其中所有偶数的平方。 } ] }执行这个命令后你应该看到一个 JSON 响应其中content字段里包含了类似这样的代码{ type: message, content: [ { type: text, text: javascript\nfunction getEvenSquares(arr) {\n return arr.filter(x x % 2 0).map(x x * x);\n}\n } ], model: deepseek-v4-pro[1m], stop_reason: end_turn }如果这个curl命令成功了而 Codex 还是不行那问题 100% 出在 VS Code 或 Codex 插件的本地环境上。如果curl也失败了那问题就出在你的 Key、URL、模型名或者网络上。这是最权威的“黄金标准”验证法。5.3 终极避坑关于vs code 中怎么配置 codex 的api请求地址的真相网络上充斥着各种“修改settings.json”、“编辑package.json”、“替换dist文件”的教程。这些都是无效的甚至是危险的。原因如下settings.json是 VS Code 的通用配置Codex 插件根本不读它。你在里面加{codex.api.url: xxx}插件会完全无视。package.json是插件的元数据文件修改它不会改变运行时行为。它只在插件安装/更新时被读取。手动修改dist目录下的 JS 文件是“黑魔法”。一旦 Codex 插件更新你的所有修改都会被覆盖而且极易引入语法错误导致插件崩溃。我踩过的坑曾经为了调试手动在dist/index.js里把https://api.openai.com替换成了 DeepSeek 的地址。当时成功了但两天后插件自动更新我的修改没了我还以为是 DeepSeek 服务挂了折腾了整整一个下午。后来才明白环境变量才是官方支持、稳定、可维护的正道。记住永远不要修改插件的源代码。你的战场是 Terminal 和.zshrc。6. 进阶场景与延展不止于 Codex构建你的 AI 工具链6.1 在 React Vite 项目中实现 API 代理及打包后加密 API 地址很多开发者会问“我在自己的 Web 应用里怎么安全地调用 DeepSeek API” 这和 Codex 的场景不同Web 前端无法使用环境变量因为会被浏览器暴露。这时你需要一个后端代理。Vite 的vite.config.ts提供了完美的解决方案// vite.config.ts export default defineConfig({ server: { proxy: { /api/deepseek: { target: https://api.deepseek.com/anthropic, changeOrigin: true, rewrite: (path) path.replace(/^\/api\/deepseek/, ), // 关键在请求头里注入密钥 configure: (proxy, options) { proxy.on(proxyReq, (proxyReq, req, res) { // 从 Node.js 环境变量中读取而非前端 const apiKey process.env.DEEPSEEK_API_KEY; proxyReq.setHeader(Authorization, Bearer ${apiKey}); }); } } } } });然后在你的 React 组件里直接调用/api/deepseek/v1/messages。Vite 开发服务器会把它代理到真实的 DeepSeek 地址并自动加上Authorization头。打包后这个代理配置会消失你需要一个真正的后端如 Express、Next.js API Routes来接管/api/deepseek路径。至于“加密 API 地址”本质上是混淆。你可以用 Webpack 的DefinePlugin将process.env.API_BASE替换为一个看似无意义的字符串再在运行时用一个简单的异或算法还原。但这只是防君子不防小人真正的安全永远在服务端。6.2 VS Code 中的多模型协同Codex DeepSeek Tavily 搜索一个强大的编程助手不应该只懂代码。它还应该能查文档、搜 Stack Overflow、读 GitHub README。Tavily 是一个专为 AI 设计的搜索 API返回的是精炼的、可直接引用的摘要。你可以用 Codex 的“子代理”Subagent功能让它在需要时调用 Tavily。这需要在环境变量中增加export TAVILY_API_KEYtvly-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx export CLAUDE_CODE_SUBAGENT_MODELtavily-search这样当你在注释里写// TODO: 查一下 React 18 的 useTransition 最佳实践Codex 就会先调用 Tavily 搜索再把搜索结果喂给 DeepSeek-V4-Pro 进行总结和代码生成。这才是真正意义上的“AI 工程师”。6.3 本地部署 DeepSeek当网络成为瓶颈时的终极方案如果你的开发环境网络极其受限比如某些国企内网或者你对数据隐私有极致要求那么本地部署是唯一选择。DeepSeek 官方提供了 Hugging Face 上的 GGUF 格式量化模型如deepseek-coder-33b-instruct.Q4_K_M.gguf。你可以用llama.cpp在一台 32GB 内存的 Mac Mini 上以 15 tokens/s 的速度运行它。然后用llama-server启动一个兼容 OpenAI 协议的本地 API 服务。最后把 Codex 的ANTHROPIC_BASE_URL指向http://localhost:8080/v1。整个链路完全离线速度取决于你的 CPU。这不再是“接入”而是“拥有”。当然它需要你投入几小时去编译和调优但对于追求绝对掌控的资深开发者这是一条值得探索的路。我个人在实际操作中的体会是Codex 接入 DeepSeek不是一次性的技术迁移而是一次认知升级。它让我明白AI 工具的本质是“协议”和“管道”而不是某个公司的专属产品。当一条管道堵塞立刻寻找另一条符合同样协议的管道这才是工程师的本能。现在我的 VS Code 里Codex、Claude Code、OpenCode 三个插件共存它们共享同一套环境变量却服务于不同的场景——Codex 写业务逻辑Claude Code 做深度重构OpenCode 在终端里快速生成脚本。它们共同构成了我的“AI 工具链”而 DeepSeek就是这条链上最可靠、最顺滑的那个齿轮。