# codex_deepseek_proxy **Repository Path**: FrancizTest_admin/codex_deepseek_proxy ## Basic Information - **Project Name**: codex_deepseek_proxy - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2026-05-08 - **Last Updated**: 2026-05-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Codex DeepSeek Proxy 将 [Codex CLI](https://github.com/openai/codex) 的 `gpt-5.5` 请求透明代理到 [DeepSeek](https://platform.deepseek.com) 模型(`deepseek-chat` / `deepseek-reasoner`),在中间做 **OpenAI Responses API ↔ DeepSeek Chat Completions API** 协议翻译。 你在 Codex 里选 `gpt-5.5`,代理对外宣称自己是 `deepseek-v4-pro`,背后实际调用的是 DeepSeek 的 API。 项目地址:[https://gitee.com/FrancizTest_admin/codex_deepseek_proxy](https://gitee.com/FrancizTest_admin/codex_deepseek_proxy) 参考自 [deepseek-cursor-proxy](https://github.com/yxlao/deepseek-cursor-proxy)。 ## 为什么需要这个代理 Codex CLI(v0.80.0+)只会走 OpenAI **Responses API**,而 DeepSeek 只提供 **Chat Completions API**——两者协议不兼容。代理做了以下工作: - 协议翻译:Responses API ↔ Chat Completions,包括流式 SSE - 模型别名:`gpt-5.5` → `deepseek-v4-pro`(对 Codex 暴露),再 → `deepseek-chat`(发给上游) - 工具调用:并行工具调用的消息结构合并,符合 DeepSeek 的格式要求 - reasoning_content 缓存:多轮工具调用时自动注入 `reasoning_content`,避免 DeepSeek 400 错误 - 参数过滤:自动处理 `reasoning_effort` 与 `temperature` 等参数的互斥关系 ## 快速开始 ### 1. 安装 ```bash git clone https://gitee.com/FrancizTest_admin/codex_deepseek_proxy.git cd codex_deepseek_proxy uv venv uv sync ``` ### 2. 启动代理 ```bash # Windows(PowerShell) $env:DEEPSEEK_API_KEY = "sk-你的key" uv run codex-deepseek-proxy --verbose # Linux / macOS export DEEPSEEK_API_KEY="sk-你的key" uv run codex-deepseek-proxy --verbose ``` 或者直接用命令行参数传入 Key: ```bash uv run codex-deepseek-proxy --deepseek-api-key sk-xxxx --verbose ``` 启动后终端会打印类似: ``` Codex DeepSeek Proxy running at http://127.0.0.1:4000 Model advertised: deepseek-v4-pro -> DeepSeek upstream: deepseek-chat Alias: gpt-5.5 -> deepseek-v4-pro ``` ### 3. 配置 Codex CLI **推荐配置**(`~/.codex/config.toml`)——用 `gpt-5.5` 作为模型名,代理自动映射: ```toml model_provider = "custom" model = "gpt-5.5" model_reasoning_effort = "medium" [model_providers.custom] name = "custom" wire_api = "responses" requires_openai_auth = true base_url = "http://127.0.0.1:4000/v1" ``` **备选配置**——直接用代理对外暴露的模型名: ```toml model_provider = "custom" model = "deepseek-v4-pro" [model_providers.custom] name = "custom" wire_api = "responses" requires_openai_auth = true base_url = "http://127.0.0.1:4000/v1" ``` 设置认证 token(`~/.codex/auth.json`): ```json { "OPENAI_API_KEY": "<你的 DeepSeek API Key>" } ``` ### 4. 运行 Codex ```bash codex ``` ## 模型参数说明 本项目有两层模型名: - `--model` / `MODEL`:代理对 Codex CLI 暴露的本地模型名。Codex 请求代理时看到的是这个名字,它不决定实际调用哪个上游模型。 - `--deepseek-model` / `DEEPSEEK_MODEL`:实际写入上游 `/chat/completions` 请求体的 `model`。它才是真正驱动推理的模型,例如 `gpt-5.5`、`deepseek-chat`、`deepseek-reasoner`。 - `--model-aliases` / `MODEL_ALIASES`:Codex 侧模型名别名映射,只影响代理收到请求后的本地模型名解析,不改变实际发给上游的模型。上游模型始终由 `--deepseek-model` 决定。 例如: ``` Codex CLI 代理本地模型 上游 API ────────────────────────────────────────────────────────────────── model = "gpt-5.5" → --model gpt-5.5 → --deepseek-model gpt-5.5 (本地对外暴露) (实际驱动推理) ``` 默认内置 `gpt-5.5` 到 `MODEL` 的别名映射。其他别名需要通过 `--model-aliases` / `MODEL_ALIASES` 显式配置。 ## 工作原理 ``` Codex CLI ──POST /v1/responses──▶ codex-deepseek-proxy ──POST /v1/chat/completions──▶ DeepSeek API (Responses API, gpt-5.5) (协议翻译 + 别名) (Chat Completions) ``` ### 协议翻译对照 | Responses API(Codex 发送) | Chat Completions(DeepSeek 接收) | |---|---| | `input`: 字符串或 `[{role, content}]` | `messages`: `[{role, content}]` | | `content[].type = "input_text"` | `content`: 纯文本 | | `content[].type = "reasoning"` | `reasoning_content` 字段 | | `content[].type = "tool_use"` | `tool_calls` 字段 | | `content[].type = "tool_result"` | `{role: "tool"}` 消息 | | `type = "function_call"` output item | assistant `tool_calls` 消息 | | `type = "function_call_output"` input item | `{role: "tool"}` 消息 | | SSE `response.output_text.delta` | SSE `choices[0].delta.content` | | SSE `response.function_call_arguments.delta` | SSE `choices[0].delta.tool_calls[].function.arguments` | | SSE `response.function_call_arguments.done` | (流结束时生成) | | SSE `response.output_item.done` | (流结束时生成) | ### 工具调用消息合并 Codex 会把多个并行工具调用作为独立的 `function_call` output item 返回。DeepSeek 要求它们必须合并为一条 assistant 消息(`tool_calls` 数组),后面紧跟对应的多条 `role: "tool"` 结果。代理自动处理这个合并,无需手动干预。 ### reasoning_content 缓存 DeepSeek 思维链(deepseek-reasoner)模式下,多轮工具调用要求每次请求都带上完整的 `reasoning_content` 链。Codex 不会发送这个字段,代理将其存入本地 SQLite,下轮请求时自动注入。 ### reasoning_effort 参数处理 | 上游模型 | `reasoning_effort` | `temperature` 等采样参数 | |---|---|---| | `deepseek-chat` | 自动丢弃(不支持) | 正常透传 | | `deepseek-reasoner` | 映射后透传(`medium→high`,`xhigh→max`) | 自动丢弃(与 reasoning_effort 互斥) | Codex 配置的 `model_reasoning_effort` 会自动按上表处理,无需手动调整。 ## 配置项 所有选项可通过 CLI 参数或环境变量设置: | 参数 | 环境变量 | 默认值 | 说明 | |---|---|---|---| | `--host` | `PROXY_HOST` | `127.0.0.1` | 监听地址 | | `--port` | `PROXY_PORT` | `4000` | 监听端口 | | `--deepseek-api-key` | `DEEPSEEK_API_KEY` | — | DeepSeek API Key | | `--deepseek-base-url` | `DEEPSEEK_BASE_URL` | `https://api.deepseek.com/v1` | 上游 OpenAI-compatible / DeepSeek API 地址,可带 `/v1` 路径前缀 | | `--model` | `MODEL` | `deepseek-v4-pro` | 代理对 Codex 暴露的本地模型名 | | `--deepseek-model` | `DEEPSEEK_MODEL` | `deepseek-chat` | 实际发送给上游并驱动推理的模型 | | `--model-aliases` | `MODEL_ALIASES` | 内置 `gpt-5.5` | Codex 侧模型名别名映射,不影响上游实际模型 | | `--verbose` / `-v` | `LOG_LEVEL=debug` | false | 启用详细日志 | 示例: ```bash # 使用 deepseek-reasoner(推理模型) uv run codex-deepseek-proxy --deepseek-model deepseek-reasoner --verbose # 使用 OpenAI-compatible 上游的 gpt-5.5 uv run codex-deepseek-proxy \ --model gpt-5.5 \ --deepseek-base-url http://your-host:8080/v1 \ --deepseek-model gpt-5.5 \ --deepseek-api-key sk-xxxx \ --verbose # 自定义端口 uv run codex-deepseek-proxy --port 9000 --verbose ``` ## API 端点 | 方法 | 路径 | 说明 | |---|---|---| | `GET` | `/health` | 健康检查 | | `GET` | `/v1/models` | 可用模型列表(含别名) | | `POST` | `/v1/responses` | **主端点** — Responses API 翻译 | | `POST` | `/v1/chat/completions` | 直接透传(调试用) | ## 开发 ```bash # 项目结构 src/codex_deepseek_proxy/ ├── __init__.py # 模块入口 ├── __main__.py # CLI 入口点 ├── config.py # 配置管理(模型别名、参数解析) ├── reasoning_store.py # reasoning_content SQLite 缓存 ├── server.py # HTTP 代理服务器(SSE 翻译、工具调用) └── translator.py # Responses API ↔ Chat Completions 翻译层 ``` ## 系统要求 - Python 3.10+ - 有效的 DeepSeek API Key ## License MIT