
最近在给团队调研 AI 编码工具时发现一个很有意思的现象大家搜 Codex、Claude Code 安装教程时命令很快能跑通但一旦要在工程里接 DeepSeek、管理第三方 API、统计成本、找回上次会话资料就变得很零散。这篇文章把这几件事串起来讲一遍目标是让新手能照着配老手也能快速查排错思路。文章会覆盖四块DeepSeek API 的准备工作、Codex 安装与接入、Claude Code 安装与接入、第三方 API 网关与成本监控以及最容易被忽略的“会话找回”。所有配置以 OpenAI 兼容接口为主代码和命令都可以直接复制。1. 背景与核心概念1.1 Codex 和 Claude Code 是什么Codex 是 OpenAI 推出的终端编程助手以 CLI 方式运行。你可以在终端里描述需求它负责读代码、改代码、执行命令、提交测试并在多轮对话中维护上下文。它适合在服务器、容器、SSH 环境里工作也能配合编辑器使用。Claude Code 是 Anthropic 推出的类似工具同样以终端交互为主。它支持把整个项目目录作为上下文能调用终端命令、读写文件并且可以接入 VSCode。两者的核心价值是把“写代码”从编辑器里的补全变成“多轮对话、自动执行、主动验证”的智能体工作流。1.2 为什么要接入 DeepSeekDeepSeek 提供 OpenAI 兼容的 API同时也有开源权重模型可以本地部署。对开发者来说接入价值主要有三点成本可控对比闭源旗舰模型DeepSeek 的 API 价格更便宜适合跑批量任务和个人开发。接口兼容大部分代码只改 base_url 和 api_key 就能切过去。可私有化如果数据敏感可以部署自己的模型端点再把 Codex、Claude Code 指向本地。需要注意的是Codex 和 Claude Code 默认连接各自官方 API。所谓“接入 DeepSeek”本质上是把它们请求的端点地址替换成 DeepSeek 或第三方兼容网关而不是它们原生内置了 DeepSeek。1.3 three 个容易混淆的概念base_urlAPI 服务地址。OpenAI 兼容协议一般是https://api.deepseek.com或http://localhost:11434/v1。api_key访问密钥。第三方网关可以生成多个子 key方便隔离和审计。provider在 Codex、Claude Code 中表示“用哪个模型服务商”。切换 provider就是切换一组 base_url、api_key、model 的组合。理解了这三个概念后面的配置就能串起来。2. 环境准备与版本说明2.1 推荐环境本文示例以常见开发环境为例macOS / Linux 终端Windows 用户建议用 PowerShell 或 WSL。Node.js 18 及以上npm 可用。Python 3.9 及以上用于运行 API 调用脚本和成本统计脚本。Git用于管理配置和会话备份。VSCode可选用于配合终端使用。2.2 版本注意Codex、Claude Code、DeepSeek API 都属于迭代比较快的工具命令参数和配置文件字段可能在不同版本中变化。本文给出的配置是社区常见用法你运行命令前可以先执行--help看一下当前版本支持的参数。版本差异不需要焦虑核心思路不变先确认工具怎么读配置再把它指向目标 API 服务。3. 准备 DeepSeek API 密钥3.1 注册并创建 Key去 DeepSeek 开放平台注册账号进入 API Keys 页面创建一个新的密钥。密钥格式一般是sk-开头。创建后只显示一次记得立即复制保存。如果只是本地开发建议创建一个独立密钥不要和你生产环境的密钥混用方便以后单独吊销。3.2 用 curl 验证连通性拿到密钥后先不要急着配置 Codex先用 curl 验证一下网络和鉴权是否正常export DEEPSEEK_API_KEYsk-你的密钥 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: 你好请用一句话介绍你自己} ] }如果返回结果里有choices字段说明密钥有效。如果返回 401说明密钥有问题如果返回模型不存在需要确认当前账号可用的模型名。DeepSeek 常用模型名有deepseek-chat和deepseek-reasoner具体以官方文档为准。3.3 用 Python 调用很多成本统计脚本都基于 OpenAI SDKDeepSeek 兼容这个接口所以可以直接用from openai import OpenAI client OpenAI( api_keysk-你的密钥, base_urlhttps://api.deepseek.com ) resp client.chat.completions.create( modeldeepseek-chat, messages[ {role: user, content: 用 Python 写一个快速排序} ] ) print(resp.choices[0].message.content) # 重点打印 usage后续成本监控要用 print(resp.usage)resp.usage会返回prompt_tokens、completion_tokens、total_tokens等字段。成本监控插件的核心就是解析这些字段。4. Codex 安装与接入 DeepSeek4.1 安装 CodexCodex 官方提供了 CLI 安装方式常见两种# 方式一npm npm install -g openai/codex # 方式二brewmacOS brew install codexWindows 用户可以下载官方桌面版或安装包具体文件名以官网发布页为准。安装完成后在终端执行codex --version能看到版本号就说明安装成功。4.2 验证默认凭据如果使用官方 OpenAI 服务Codex 需要登录或配置 token。常见报错是codex auth token is unavailable意思是当前环境里找不到有效的鉴权信息。很多第三方接入失败也卡在这一步。解决办法不是去登录 OpenAI而是把你的密钥写到 Codex 能读到的环境变量或配置文件里。4.3 配置 DeepSeek providerCodex 部分版本支持在~/.codex/config.toml中配置自定义模型服务商。下面是一份示意配置字段名在不同版本里可能略有区别# 文件路径~/.codex/config.toml model deepseek-chat model_provider deepseek [model_providers.deepseek] name DeepSeek base_url https://api.deepseek.com env_key DEEPSEEK_API_KEY含义model默认使用 DeepSeek 的对话模型。model_provider指定服务商名称对应下面的[model_providers.deepseek]。base_urlDeepSeek API 地址。env_key告诉 Codex 从哪个环境变量读密钥。配置完成后导出密钥export DEEPSEEK_API_KEYsk-你的密钥然后启动codex如果启动后能正常对话说明接入成功。如果当前版本不支持config.toml也可以尝试用环境变量覆盖端点例如export OPENAI_API_KEYsk-你的密钥 export OPENAI_BASE_URLhttps://api.deepseek.com codex这种方式更接近 OpenAI SDK 的默认行为但不是所有 Codex 版本都认这两个变量。建议先看codex --help以实际版本支持情况为准。4.4 本地模型端点如果你在本地跑 Ollama 或 vLLM并且它们暴露了 OpenAI 兼容接口Codex 的 base_url 可以改成http://localhost:11434/v1模型名要填本地模型标签比如deepseek-r1:7b。注意本地模型的能力和响应速度取决于硬件不要拿 7B 量化模型去和 API 版对比。5. Claude Code 安装与接入 DeepSeek5.1 安装 Claude CodeClaude Code 可以通过 npm 安装npm install -g anthropic-ai/claude-code安装后执行claude --version如果你的账号有使用权限首次启动可以直接通过扫二维码或浏览器登录。如果只想接第三方模型可以跳过官方登录直接走环境变量配置。5.2 第三方接入的通用思路Claude Code 默认请求的是 Anthropic 的 Messages API而 DeepSeek 官方提供的是 OpenAI 兼容接口两者协议不一样。因此Claude Code 接 DeepSeek 通常需要一个“本地兼容层”或“协议转换服务”它的作用是把 Anthropic 的请求翻译成 OpenAI 兼容请求。这里要特别说明本文说的“本地代理”是指跑在本机的 API 协议转换进程不是网络代理目的单纯是为了解决协议不兼容。常见的做法有两种使用开源兼容层工具这类工具会在本地开一个端口模拟 Anthropic 接口然后转发给 DeepSeek。自己写一个很小的 HTTP 服务接收/v1/messages请求再调用 DeepSeek。第一种方式更省心。你只需要在 Claude Code 的配置里把端点指向本地端口。5.3 修改 Claude Code 配置Claude Code 支持在项目或用户目录下维护settings.json常见路径是~/.claude/settings.json。可以在env字段中注入第三方端点信息{ env: { ANTHROPIC_BASE_URL: http://127.0.0.1:8899, ANTHROPIC_AUTH_TOKEN: sk-你的密钥 } }ANTHROPIC_BASE_URL本地兼容层的监听地址。ANTHROPIC_AUTH_TOKEN传递给模型的密钥也可以由兼容层统一接管。具体字段名可能因为你使用的兼容层不同而有差异建议以工具文档为准。配置好后重启 Claude Code 进程再发起对话请求就会先到本地端口。5.4 在 VSCode 中使用在 VSCode 中安装 Claude Code 相关插件后可以打开终端直接启动claude配置读取方式和 CLI 一致。要注意的是VSCode 集成终端的环境变量并不总是继承自 shell profile如果发现配置不生效优先检查一下终端里能不能打印出ANTHROPIC_BASE_URLecho $ANTHROPIC_BASE_URL如果为空可以在 VSCode 的settings.json里补 terminal 环境变量或者在启动 Claude Code 前手动 export。6. 第三方 API、本地兼容层与成本监控6.1 为什么要用第三方 API除了 DeepSeek 官方 API很多团队会再套一层第三方 API 网关原因很实际统一管理多个模型渠道某个渠道挂了自动切换。生成多个受限令牌不怕主密钥泄露。记录每次请求的 token 用量方便做成本分摊。设置模型路由比如代码任务用 deepseek-chat复杂推理用 deepseek-reasoner。常见的开源网关有 one-api、new-api 等。它们部署后你得到的通常是一个统一入口地址和新的令牌。配置到 Codex 或 Claude Code 时base_url 填网关地址api_key 填网关令牌。6.2 遇到 cc-switch 的 local proxy 错误怎么处理很多开发者用 cc-switch 这类工具来快速切换 Codex 和 Claude Code 的模型服务商。它的原理是修改本机配置必要时启动一个本地兼容层进程把请求转发到指定端点。实际使用中容易遇到一个报错cc switch local proxy failed while handling codex endpoint /responses. provi...这个报错通常表示兼容层已经启动但在处理 Codex 请求路径/responses时失败。常见原因如下原因表现解决思路本地端口被占用启动日志里提示端口绑定失败切换空闲端口或杀掉占用进程base_url 填错转发时 404 或 401用 curl 验证目标地址是否可用密钥为空鉴权失败检查环境变量是否已 export协议路径不匹配Codex 请求/responses但兼容层不支持升级工具版本或换用支持 Codex 的兼容层旧进程残留改了配置后不生效完全退出 cc-switch 和 Codex再重新启动排查时可以先看日志。如果日志没有明确提示就按“端口、地址、密钥、协议”四步逐个确认。最直接的验证是直接调用一次目标接口确认 DeepSeek 本身可用再去看兼容层的问题。不要一上来就把锅甩给模型服务大多数情况是配置地址写错了。6.3 自己做成本监控市面上已有第三方成本监控插件比如 claude-code-cost 这类社区工具。如果你的网关本身带了统计功能直接用网关报表就行。不过自己写一个也很简单。思路是把每次 API 调用的 usage 信息写入 JSONL 日志再用脚本汇总。下面是一个通用统计脚本输入是一堆 JSONL 日志文件import json import glob import sys file_pattern sys.argv[1] if len(sys.argv) 1 else logs/*.jsonl total_prompt 0 total_completion 0 for path in glob.glob(file_pattern): with open(path, encodingutf-8) as f: for line in f: line line.strip() if not line: continue try: data json.loads(line) except json.JSONDecodeError: continue # 兼容两种记录结构直接记录 usage或嵌套在 response 中 usage data.get(usage) if not usage: response data.get(response) or {} usage response.get(usage) if usage: total_prompt int(usage.get(prompt_tokens, 0) or 0) total_completion int(usage.get(completion_tokens, 0) or 0) print(fprompt_tokens{total_prompt}) print(fcompletion_tokens{total_completion}) print(ftotal_tokens{total_prompt total_completion})运行方式python cost_stats.py logs/*.jsonl脚本本身很简单但它体现了成本监控的核心先有日志再有统计。实际接入时关键是确保网关或本地兼容层把每次请求的 usage 落盘。6.4 成本控制的工程建议在网关中给每个项目一个独立令牌方便单独限额。如果直接用 DeepSeek 官方 API建议手动记录密钥对应的用费避免月底对不上账。设置模型路由规则简单任务不要默认用最大模型。对 Codex、Claude Code 这类工具限制它们的自动执行权限避免它在无人值守时跑出大量 token。7. 会话找回7.1 为什么需要会话找回终端工具维护的是多轮对话状态一旦窗口关闭、电脑重启或会话被误删你可能会丢失一整段上下文。更常见的是换电脑在笔记本上写的需求回到台式机要继续这时候就需要把会话“找回来”。Codex 和 Claude Code 本质上都是本地工具会话数据通常以 JSONL 文件形式存在本地目录里。只要文件没被删除找回就有希望。7.2 查找本地会话文件不同工具存储位置不一样一般规律如下Claude Code~/.claude/projects/项目名/目录下会有多个 jsonl 文件。Codex~/.codex/sessions/目录下会按日期生成会话文件。不要死记路径直接搜索是更稳妥的方法find ~/.claude -name *.jsonl 2/dev/null | tail -20 find ~/.codex -name *.jsonl 2/dev/null | tail -20看到文件后可以直接用cat或less查看内容。文件里一般会记录用户输入、助手输出、token 用量和时间戳。7.3 Claude Code 恢复会话Claude Code 支持在启动时继续上一次会话常见参数是claude --continue也可以先进入交互界面再输入/resume根据提示选择要恢复的历史会话。不同版本命令可能有差异以claude --help为准。如果你找到了对应的 jsonl 文件也可以把它复制回正确的目录再执行恢复操作。7.4 Codex 恢复会话Codex 通常也会提供resume相关命令例如codex resume或者指定会话 IDcodex resume 会话ID具体参数名请用codex resume --help确认。核心思路和 Claude Code 一致会话历史保存在本地先找到再把会话 ID 传给工具。7.5 跨设备备份与恢复如果你在多个设备间切换最简单的方法是备份整个会话目录# 备份 cp -r ~/.claude/projects/my-project ~/backup/my-project # 恢复 cp -r ~/backup/my-project ~/.claude/projects/Codex 同理cp -r ~/.codex/sessions ~/backup/codex-sessions恢复后重新用--continue或resume命令打开就能继续之前的对话。这里必须提醒会话文件里可能包含私有代码片段、密钥、内部路径。如果你把备份文件分享给同事或者上传到公开仓库存在很大的信息泄漏风险。务必在备份前检查内容或至少放在私有仓库里。7.6 会话找回失败的兜底方案如果工具自身不支持恢复或者文件已经损坏可以通过编辑 JSONL 文件解决。先把原始文件备份然后按时间顺序保留核心消息删除异常记录。不过这种方法比较费时间优先推荐使用工具原生恢复功能。更稳妥的做法是在平时就养成分目录备份的习惯每个项目单独建立会话目录。重要任务结束后把对应 jsonl 文件复制到项目下的.ai-sessions目录。用 git 管理.ai-sessions这样即使本地误删也能恢复。8. 常见问题与排查思路8.1 高频报错排查表问题现象常见原因解决思路codex auth token is unavailable没有配置 api key或环境变量名不对检查DEEPSEEK_API_KEY或OPENAI_API_KEY401 Unauthorized密钥错误、包含空格、密钥失效复制完整密钥重新设置环境变量404 model not found模型名在当前服务商不存在确认使用deepseek-chat或deepseek-reasoner请求超时模型服务响应慢、本地网络异常调大客户端超时时间或先 curl 测接口local proxy failed while handling codex endpoint /responses兼容层进程异常、端口占用、协议不匹配按本文 6.2 的四步排查改了配置后不生效配置文件路径不对或服务未重启执行claude --version、codex --version确认重启进程会话无法继续本地会话文件被移动或删除检查会话目录恢复备份Claude Code 走代理后回复格式错误兼容层不支持工具调用或流式输出升级兼容层版本或关闭流式输出选项8.2 排查动作清单如果你接入失败建议按下面的顺序操作先确认 DeepSeek API 本身可用用 curl 调一次。再确认环境变量已导出用echo $DEEPSEEK_API_KEY查看。然后确认工具读取了配置用--help查看支持参数。再实际发起一次请求看报错是发生在鉴权、网络还是协议层。最后查看日志不要凭感觉猜。9. 最佳实践与工程建议9.1 密钥安全不要让 api_key 出现在命令行历史、代码仓库或笔记软件里。推荐用.env文件管理并加入.gitignoreDEEPSEEK_API_KEYsk-xxx加载方式可以用 direnv 或 dotenv。如果你用第三方网关也要注意网关令牌的权限隔离最小粒度原则是每个环境一个令牌权限只给需要的模型。9.2 配置管理Codex 和 Claude Code 的配置文件最终都是纯文本适合纳入 dotfiles 仓库。这样新电脑初始化时可以快速恢复。以 Claude Code 为例常见的愿景配置结构~/.claude/settings.json全局配置。项目根目录下的.claude/settings.json项目级配置。会话文件备份到私有仓库或云盘。9.3 会话管理养成“重要会话及时备份”的习惯。每天下班前可以执行一次简单的复制命令把当天的会话文件归档到项目目录。不要等项目写了一半关机后才发现会话真的找不回来了。9.4 成本管理设置单次任务 token 上限。对 Codex、Claude Code 这类工具不要授予无限执行权限尤其是自动执行测试和安装依赖的命令。成本监控脚本要定时跑看到突增再查原因。如果走第三方网关要定期导出用量报表做按项目分摊。9.5 安全边界会话文件里最容易出现三类敏感信息密钥、内网地址、用户私有数据。所有涉及会话内容的备份、分享、上传都要先检查文件内容。另外不要轻易把本地兼容层监听地址暴露到局域网尤其是没有鉴权时。默认监听127.0.0.1不要改成0.0.0.0。10. 总结与下一步通过这篇文章你可以完成以下工作注册 DeepSeek API并用 curl 和 Python 验证连通性。安装 Codex并通过环境变量或配置文件接入 DeepSeek。安装 Claude Code通过本地兼容层把请求转发到 DeepSeek。使用第三方 API 网关统一管理模型渠道并做成本监控。理解会话文件存储位置掌握会话找回和跨设备恢复方法。下一步建议先做一个最小实验用 DeepSeek API 完成一次 Python 调用再把它接入 Codex。跑通之后再尝试 Claude Code 和第三方网关。这样每一步失败时你都能明确知道是模型服务的问题还是工具配置的问题。如果这篇文章对你有帮助可以收藏备用。后面遇到 Codex 或 Claude Code 版本更新记得先查看官方--help输出再对照本文思路调整配置。如果你在接入过程中遇到其它报错也欢迎在评论区发出来一起讨论。