文章目录
-
- 总体架构
- [一、安装 Codex CLI](#一、安装 Codex CLI)
- [二、配置 Codex(~/.codex/config.toml)](#二、配置 Codex(~/.codex/config.toml))
- 三、创建认证文件(~/.codex/auth.json)
- [四、安装和配置 ccswitch-deepseek](#四、安装和配置 ccswitch-deepseek)
-
- [4.1 克隆项目](#4.1 克隆项目)
- [4.2 安装依赖](#4.2 安装依赖)
- [4.3 配置 API Key](#4.3 配置 API Key)
- [4.4 启动](#4.4 启动)
- 五、使用
- 六、添加更多模型
-
- [6.1 修改 config.toml](#6.1 修改 config.toml)
- [6.2 可用模型](#6.2 可用模型)
- [6.3 如果需要接入其他供应商(Kimi / GLM / Qwen 等)](#6.3 如果需要接入其他供应商(Kimi / GLM / Qwen 等))
- 七、开机自启(systemd)
- 八、端口号
- 九、常见问题
总体架构
codex CLI ──→ http://127.0.0.1:11435/v1/responses ──→ ccswitch-deepseek ──→ DeepSeek API
(Responses API) (协议翻译) (Chat Completions)
- codex 只会说 Responses API
- DeepSeek 只会说 Chat Completions API
- ccswitch-deepseek 在中间做翻译,跑在服务器本地
一、安装 Codex CLI
bash
# 安装 Node.js(如果没有)
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
# 安装 Codex CLI
npm install -g @openai/codex
# 验证
codex --version
二、配置 Codex(~/.codex/config.toml)
toml
model_provider = "custom"
model = "deepseek-v4-flash"
model_reasoning_effort = "high"
disable_response_storage = true
[model_providers.custom]
name = "deepseek"
base_url = "http://127.0.0.1:11435/v1"
wire_api = "responses"
requires_openai_auth = true
各字段说明:
| 字段 | 含义 |
|---|---|
model_provider = "custom" |
使用自定义模型供应商 |
model = "deepseek-v4-flash" |
默认使用的模型名,会随请求传给 ccswitch-deepseek |
model_reasoning_effort |
推理深度:low / medium / high / xhigh |
disable_response_storage = true |
不上传数据到 OpenAI |
base_url |
指向 ccswitch-deepseek 代理地址,端口 11435 |
wire_api = "responses" |
使用 Responses API 协议(Codex 的默认协议) |
requires_openai_auth = true |
发送认证头,ccswitch-deepseek 会拦截并替换 |
三、创建认证文件(~/.codex/auth.json)
json
{
"OPENAI_API_KEY": "PROXY_MANAGED"
}
API Key 实际由 ccswitch-deepseek 的 .env 文件管理,这里随便填,代理会拦截。
⚠️ 安全提醒 :
.env文件和auth.json文件权限设为chmod 600 ~/.codex/auth.json
四、安装和配置 ccswitch-deepseek
4.1 克隆项目
bash
mkdir -p ~/codex
cd ~/codex
git clone https://github.com/liuzhengming/ccswitch-deepseek.git
cd ccswitch-deepseek
4.2 安装依赖
bash
npm install
4.3 配置 API Key
bash
cp env_example .env
编辑 .env,填入 DeepSeek API Key:
api_key=sk-your-deepseek-api-key-here
bash
chmod 600 .env
4.4 启动
bash
# 前台启动(测试用)
npm start
# 后台启动(推荐 tmux)
tmux new -s ccs
npm start
# Ctrl+B D 断开
# 或者 nohup
nohup npm start > /dev/null 2>&1 &
启动后看到这条就说明 OK:
[ OK ] ccswitch-deepseek started
[INFO] http://127.0.0.1:11435/v1/responses
五、使用
bash
# 在自己的项目目录下
codex --cd /path/to/your/project
# 或者直接
codex
六、添加更多模型
6.1 修改 config.toml
在 [model_providers.custom] 下可以添加多个供应商,切换模型只需改 model = 后面的值:
toml
model_provider = "custom"
model = "deepseek-v4-flash" # ← 默认模型
model_reasoning_effort = "high"
disable_response_storage = true
[model_providers.custom]
name = "deepseek"
base_url = "http://127.0.0.1:11435/v1"
wire_api = "responses"
requires_openai_auth = true
6.2 可用模型
ccswitch-deepseek 本身是动态透传 的------codex 发送什么 model 名字,代理就原样发给 DeepSeek。所以你要做的只是把 model = 改成 DeepSeek 支持的模型名:
| model 值 | 对应模型 |
|---|---|
deepseek-v4-flash |
DeepSeek V4 Flash(快) |
deepseek-v4-pro |
DeepSeek V4 Pro(强) |
deepseek-r1 |
DeepSeek R1(推理) |
deepseek-chat |
DeepSeek V3 |
6.3 如果需要接入其他供应商(Kimi / GLM / Qwen 等)
ccswitch-deepseek 目前只支持 DeepSeek。如需接入其他供应商,可以:
- 在服务器上也跑一个 cc-switch 桌面版(需要桌面环境)
- 或者搜其他类似的开源代理(如 one-api、new-api),在服务器部署后统一管理
七、开机自启(systemd)
bash
sudo tee /etc/systemd/system/ccswitch-deepseek.service << 'EOF'
[Unit]
Description=CCSwitch DeepSeek Protocol Proxy
After=network.target
[Service]
Type=simple
User=xxx
WorkingDirectory=/home/xx/codex/ccswitch-deepseek
ExecStart=/usr/bin/node /home/xx/codex/ccswitch-deepseek/index.js
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable ccswitch-deepseek
sudo systemctl start ccswitch-deepseek
# 查看状态
sudo systemctl status ccswitch-deepseek
# 查看日志
sudo journalctl -u ccswitch-deepseek -f
八、端口号
ccswitch-deepseek 默认端口:11435
如需修改,编辑 index.js 末尾的端口号,同时同步修改 config.toml 的 base_url。
九、常见问题
| 问题 | 原因 | 解决 |
|---|---|---|
error sending request |
代理没启动 | npm start 先启代理 |
connection refused |
端口不对 | 确认代理端口和 config.toml 一致 |
401 Unauthorized |
API Key 错误 | 检查 .env 文件 |
| 模型回复异常 | 模型名不对 | 确认 model = 的值 DeepSeek 支持 |