最近在给团队调研 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 为什么要接入 DeepSeek
DeepSeek 提供 OpenAI 兼容的 API,同时也有开源权重模型可以本地部署。对开发者来说,接入价值主要有三点:
- 成本可控:对比闭源旗舰模型,DeepSeek 的 API 价格更便宜,适合跑批量任务和个人开发。
- 接口兼容:大部分代码只改 base_url 和 api_key 就能切过去。
- 可私有化:如果数据敏感,可以部署自己的模型端点,再把 Codex、Claude Code 指向本地。
需要注意的是,Codex 和 Claude Code 默认连接各自官方 API。所谓“接入 DeepSeek”,本质上是把它们请求的端点地址替换成 DeepSeek 或第三方兼容网关,而不是它们原生内置了 DeepSeek。
1.3 three 个容易混淆的概念
- base_url:API 服务地址。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_KEY="sk-你的密钥" 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 SDK,DeepSeek 兼容这个接口,所以可以直接用:
from openai import OpenAI client = OpenAI( api_key="sk-你的密钥", base_url="https://api.deepseek.com" ) resp = client.chat.completions.create( model="deepseek-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 安装与接入 DeepSeek
4.1 安装 Codex
Codex 官方提供了 CLI 安装方式,常见两种:
# 方式一:npm npm install -g @openai/codex # 方式二:brew(macOS) brew install codexWindows 用户可以下载官方桌面版或安装包,具体文件名以官网发布页为准。安装完成后,在终端执行:
codex --version能看到版本号就说明安装成功。
4.2 验证默认凭据
如果使用官方 OpenAI 服务,Codex 需要登录或配置 token。常见报错是:
codex auth token is unavailable意思是当前环境里找不到有效的鉴权信息。很多第三方接入失败,也卡在这一步。解决办法不是去登录 OpenAI,而是把你的密钥写到 Codex 能读到的环境变量或配置文件里。
4.3 配置 DeepSeek provider
Codex 部分版本支持在~/.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_url:DeepSeek API 地址。env_key:告诉 Codex 从哪个环境变量读密钥。
配置完成后,导出密钥:
export DEEPSEEK_API_KEY="sk-你的密钥"然后启动:
codex如果启动后能正常对话,说明接入成功。
如果当前版本不支持config.toml,也可以尝试用环境变量覆盖端点,例如:
export OPENAI_API_KEY="sk-你的密钥" export OPENAI_BASE_URL="https://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 安装与接入 DeepSeek
5.1 安装 Claude Code
Claude 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_URL:
echo $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, encoding="utf-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(f"prompt_tokens={total_prompt}") print(f"completion_tokens={total_completion}") print(f"total_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或者指定会话 ID:
codex 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_KEY |
| 401 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文件管理,并加入.gitignore:
DEEPSEEK_API_KEY=sk-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输出,再对照本文思路调整配置。如果你在接入过程中遇到其它报错,也欢迎在评论区发出来一起讨论。