下面是一份从零开始的完整教程,按 Windows + Codex Desktop + OpenRouter BYOK + DeepSeek V4 Pro 来写。
OpenRouter BYOK 调用 DeepSeek V4 Pro,并接入 Codex Desktop
0. 整体关系
最终链路是:
Codex Desktop
↓ 使用 OPENROUTER_API_KEY
OpenRouter
↓ BYOK 中绑定的 DeepSeek API key
DeepSeek V4 Pro
这里有两个 key:
DeepSeek API key:放到 OpenRouter BYOK 里
OpenRouter API key:放到 Windows 用户环境变量里,给 Codex Desktop 使用
DeepSeek 官方的 OpenAI 格式 API base URL 是 https://api.deepseek.com,模型包括 deepseek-v4-flash 和 deepseek-v4-pro。DeepSeek 文档也说明它兼容 OpenAI / Anthropic API 格式。(DeepSeek API Docs)
OpenRouter 的 BYOK 会把你的 provider key 加密保存,并在请求路由到对应 provider 时使用;BYOK 每月前 100 万次请求免平台费,超过后按同模型/provider 在 OpenRouter 正常成本的 5% 收取。(OpenRouter)
1. 开通 DeepSeek 账号并创建 API key
1.1 注册 / 登录 DeepSeek Platform
进入 DeepSeek Platform,注册或登录账号。
登录后检查两件事:
账户是否能使用 API
账户是否有余额 / 充值方式
DeepSeek 会按输入和输出 token 计费,官方定价页说明计费单位是每 100 万 tokens。(DeepSeek API Docs)
1.2 创建 DeepSeek API key
在 DeepSeek Platform 里找到 API keys 页面,新建一个 key。
建议命名为:
openrouter-byok-codex
复制 key 后先放到临时安全位置,比如密码管理器。不要写进代码文件、Git 仓库、截图或聊天记录。
2. 开通 OpenRouter 账号
2.1 注册 / 登录 OpenRouter
打开 OpenRouter,注册或登录。
2.2 创建 OpenRouter API key
进入 OpenRouter 的 API Keys 页面,新建一个 API key。OpenRouter 文档说明 API key 一般以 sk-or-... 开头。(OpenRouter)
建议命名:
codex-desktop-windows
这个 key 后面会写入 Windows 用户环境变量:
OPENROUTER_API_KEY
3. 在 OpenRouter 中加入 DeepSeek BYOK
进入 OpenRouter 的 Workspace BYOK 设置。
添加 provider key 时选择:
Provider: DeepSeek
Key: 你的 DeepSeek API key
添加成功后,确认这些状态:
DeepSeek 显示 1 key
key 在 Prioritized 区域
Always use for this provider 已开启
OpenRouter BYOK 有两个 key 区域:Prioritized 会优先使用,Fallback 只在 OpenRouter endpoint 之后尝试;Always use for this provider 可以阻止请求回退到 OpenRouter 共享 endpoint,保证该 provider 只走你的 key。(OpenRouter)
4. OpenRouter Privacy / Provider 设置
进入 OpenRouter 的 Privacy 设置页,按下面检查。
4.1 数据策略
建议设置:
Paid endpoints that may train on request data: 打开
Zero Data Retention: 不要强制开启
原因是 OpenRouter 的 data_collection 可以限制是否允许使用可能保存数据的 provider;allow 表示允许使用可能非临时保存或训练的数据 endpoint,deny 表示只使用不收集数据的 provider。(OpenRouter)
ZDR 也是一个路由条件。OpenRouter 文档说明,开启 ZDR 后,请求只会路由到支持 Zero Data Retention 的 endpoint;如果账户级 ZDR 开启,请求级参数不能关闭它。(OpenRouter)
所以这里不要一开始就强制 ZDR,否则 DeepSeek BYOK 可能因为数据策略不匹配而找不到 endpoint。
4.2 Allowed / Ignored Providers
建议:
Allowed Providers: 留空,或只包含 DeepSeek
Ignored Providers: 不要包含 DeepSeek
如果你的目标是 Codex Desktop 只走 DeepSeek BYOK,更稳的设置是:
Allowed Providers: DeepSeek
Ignored Providers: 空
OpenRouter 支持账户级 Allowed Providers,并说明它会应用到所有 API 请求和 chatroom messages。(OpenRouter)
这点很重要,因为 Codex 的 config.toml 可以配置 OpenRouter 作为 provider,但不适合指望它给每次请求稳定塞入 OpenRouter 的 provider.only 请求体参数。强制 provider 更适合在 OpenRouter 账户侧设置。
5. 用 PowerShell 验证 BYOK 是否跑通
先在当前 PowerShell 临时设置 OpenRouter key:
$env:OPENROUTER_API_KEY="sk-or-你的OpenRouterKey"
然后执行:
$headers = @{
"Authorization" = "Bearer $env:OPENROUTER_API_KEY"
"Content-Type" = "application/json"
"X-OpenRouter-Experimental-Metadata" = "enabled"
}
$body = @{
model = "deepseek/deepseek-v4-pro"
messages = @(
@{ role = "user"; content = "Reply with exactly: OK" }
)
max_tokens = 80
include_reasoning = $false
provider = @{
only = @("deepseek")
allow_fallbacks = $false
data_collection = "allow"
}
} | ConvertTo-Json -Depth 20
Invoke-RestMethod `
-Uri "https://openrouter.ai/api/v1/chat/completions" `
-Method Post `
-Headers $headers `
-Body $body
这里几个字段的作用:
"provider": {
"only": ["deepseek"],
"allow_fallbacks": false,
"data_collection": "allow"
}
OpenRouter 文档说明,provider.only 可以只允许指定 provider,allow_fallbacks 可以关闭备用 provider,data_collection 可以控制是否允许使用可能保存数据的 provider。(OpenRouter)
成功时重点看:
"provider": "DeepSeek"
以及:
"usage": {
"is_byok": true
}
OpenRouter 在 2026-04-27 的更新中说明,API 响应的 usage 对象现在包含 cost、is_byok 和 cost_details。(OpenRouter)
X-OpenRouter-Experimental-Metadata 只适合调试。OpenRouter 文档明确说 router metadata 是实验功能,字段可能变化,不应当当成稳定接口。(OpenRouter)
6. 在 Windows 中设置 OpenRouter 环境变量
Codex Desktop 从开始菜单启动时,不会继承你某个 PowerShell 窗口里的临时变量。所以要设置成 Windows 用户级环境变量。
用 PowerShell 执行:
[Environment]::SetEnvironmentVariable(
"OPENROUTER_API_KEY",
"sk-or-你的OpenRouterKey",
"User"
)
检查:
[Environment]::GetEnvironmentVariable("OPENROUTER_API_KEY", "User")
然后完全退出 Codex Desktop,再重新打开。
7. Codex Desktop 的配置文件位置
Windows 下用户级配置文件放在:
%USERPROFILE%\.codex\config.toml
Codex 官方文档说明,用户级配置在 ~/.codex/config.toml,也可以在项目中放 .codex/config.toml;项目配置只会在信任项目后读取。(OpenAI Developers)
Codex app 的 agent 会继承 CLI / IDE extension 的同一套配置;常见设置可以在 app 里调,进阶设置改 config.toml。(OpenAI Developers)
Codex 自定义 provider 配置里,model_provider 指向 model_providers 中的 provider id;env_key 用来指定环境变量名;wire_api 当前只有 responses 这一个支持值,不写时默认也是 responses。(OpenAI Developers)
8. 手动创建 Codex 配置
先创建目录:
mkdir "$env:USERPROFILE\.codex" -Force
notepad "$env:USERPROFILE\.codex\config.toml"
写入:
profile = "deepseek-v4-pro"
[profiles.deepseek-v4-pro]
model_provider = "openrouter"
model = "deepseek/deepseek-v4-pro"
model_reasoning_effort = "high"
approval_policy = "on-request"
sandbox_mode = "workspace-write"
[profiles.gpt55-high]
model_provider = "openai"
model = "gpt-5.5"
model_reasoning_effort = "high"
approval_policy = "on-request"
sandbox_mode = "workspace-write"
[model_providers.openrouter]
name = "OpenRouter"
base_url = "https://openrouter.ai/api/v1"
env_key = "OPENROUTER_API_KEY"
wire_api = "responses"
[windows]
sandbox = "elevated"
OpenRouter 官方给 Codex CLI 的配置也是使用 model_provider = "openrouter"、base_url = "https://openrouter.ai/api/v1"、env_key = "OPENROUTER_API_KEY" 这一套。(OpenRouter)
DeepSeek V4 Pro 在 OpenRouter 的模型 id 是:
deepseek/deepseek-v4-pro
OpenRouter 模型页显示 DeepSeek V4 Pro 支持 1M context,适合复杂推理、代码和长任务;它也支持 high 和 xhigh reasoning efforts。(OpenRouter)
GPT-5.5 在 Codex 中的模型名是:
gpt-5.5
OpenAI Codex 模型页也给出 codex -m gpt-5.5 的用法,并说明 GPT-5.5 是 Codex 推荐模型之一。(OpenAI Developers)
9. 启动 Codex Desktop 并测试
打开 Codex Desktop,选择一个项目,开一个新的本地线程。
先发一个只读任务:
读取当前项目结构,概括主要目录和技术栈。不要修改文件。
然后看两件事:
是否能正常响应
OpenRouter Logs / Activity 里是否出现 DeepSeek V4 Pro 请求
如果你要确认是否 BYOK,可以先用第 5 节 PowerShell 测试。Codex Desktop 本身未必会把 usage.is_byok 直接显示给你,所以 OpenRouter 后台日志更可靠。
10. Windows 桌面一键切换脚本
下面给两个 .cmd 文件。它们的作用是:
写入 %USERPROFILE%\.codex\config.toml
自动备份旧 config.toml
一个切到 DeepSeek V4 Pro
一个切到 GPT-5.5 high
注意:这两个脚本会覆盖现有 config.toml。如果你已经在 config.toml 里配置了 MCP、插件、项目规则、特殊权限,先备份或手动合并。脚本会自动备份一份旧文件,但最好你自己也保存一份。
脚本 1:切到 DeepSeek V4 Pro
在桌面新建文件:
Codex-切到-DeepSeek-V4-Pro.cmd
填入:
@echo off
setlocal
set "CODEX_DIR=%USERPROFILE%\.codex"
set "CONFIG=%CODEX_DIR%\config.toml"
if not exist "%CODEX_DIR%" mkdir "%CODEX_DIR%"
for /f %%i in ('powershell -NoProfile -Command "Get-Date -Format yyyyMMdd-HHmmss"') do set TS=%%i
if exist "%CONFIG%" (
copy /Y "%CONFIG%" "%CONFIG%.bak-%TS%" >nul
)
(
echo profile = "deepseek-v4-pro"
echo.
echo [profiles.deepseek-v4-pro]
echo model_provider = "openrouter"
echo model = "deepseek/deepseek-v4-pro"
echo model_reasoning_effort = "high"
echo approval_policy = "on-request"
echo sandbox_mode = "workspace-write"
echo.
echo [profiles.gpt55-high]
echo model_provider = "openai"
echo model = "gpt-5.5"
echo model_reasoning_effort = "high"
echo approval_policy = "on-request"
echo sandbox_mode = "workspace-write"
echo.
echo [model_providers.openrouter]
echo name = "OpenRouter"
echo base_url = "https://openrouter.ai/api/v1"
echo env_key = "OPENROUTER_API_KEY"
echo wire_api = "responses"
echo.
echo [windows]
echo sandbox = "elevated"
) > "%CONFIG%"
echo.
echo 已切换到 DeepSeek V4 Pro via OpenRouter BYOK。
echo 配置文件:%CONFIG%
echo 旧配置已备份为:%CONFIG%.bak-%TS%
echo.
echo 请完全退出 Codex Desktop,然后重新打开;或者至少新开一个 Codex 本地线程。
echo.
pause
脚本 2:切回 GPT-5.5 high
在桌面新建文件:
Codex-切回-GPT-5.5-High.cmd
填入:
@echo off
setlocal
set "CODEX_DIR=%USERPROFILE%\.codex"
set "CONFIG=%CODEX_DIR%\config.toml"
if not exist "%CODEX_DIR%" mkdir "%CODEX_DIR%"
for /f %%i in ('powershell -NoProfile -Command "Get-Date -Format yyyyMMdd-HHmmss"') do set TS=%%i
if exist "%CONFIG%" (
copy /Y "%CONFIG%" "%CONFIG%.bak-%TS%" >nul
)
(
echo profile = "gpt55-high"
echo.
echo [profiles.deepseek-v4-pro]
echo model_provider = "openrouter"
echo model = "deepseek/deepseek-v4-pro"
echo model_reasoning_effort = "high"
echo approval_policy = "on-request"
echo sandbox_mode = "workspace-write"
echo.
echo [profiles.gpt55-high]
echo model_provider = "openai"
echo model = "gpt-5.5"
echo model_reasoning_effort = "high"
echo approval_policy = "on-request"
echo sandbox_mode = "workspace-write"
echo.
echo [model_providers.openrouter]
echo name = "OpenRouter"
echo base_url = "https://openrouter.ai/api/v1"
echo env_key = "OPENROUTER_API_KEY"
echo wire_api = "responses"
echo.
echo [windows]
echo sandbox = "elevated"
) > "%CONFIG%"
echo.
echo 已切回 GPT-5.5 high。
echo 配置文件:%CONFIG%
echo 旧配置已备份为:%CONFIG%.bak-%TS%
echo.
echo 请完全退出 Codex Desktop,然后重新打开;或者至少新开一个 Codex 本地线程。
echo.
pause
11. 两个脚本怎么用
第一次使用前,只需要做一次:
[Environment]::SetEnvironmentVariable(
"OPENROUTER_API_KEY",
"sk-or-你的OpenRouterKey",
"User"
)
之后:
双击 Codex-切到-DeepSeek-V4-Pro.cmd
重启 Codex Desktop
或者:
双击 Codex-切回-GPT-5.5-High.cmd
重启 Codex Desktop
脚本会保留两个 profile,只是改变第一行:
profile = "deepseek-v4-pro"
或:
profile = "gpt55-high"
Codex 文档说明可以在 config.toml 顶层设置 profile = "...",让 Codex 默认加载指定 profile。(OpenAI Developers)
12. 常见错误
12.1 No endpoints available matching your guardrail restrictions and data policy
优先检查:
OpenRouter Privacy 里是否禁止了 paid endpoints
是否强制开启 ZDR
Allowed Providers 是否没有 DeepSeek
Ignored Providers 是否包含 DeepSeek
Guardrail 是否限制了 provider / model
BYOK key 的 API key filter 是否排除了当前 OpenRouter key
这个错误本质上是 OpenRouter 路由条件太严格,找不到符合条件的 endpoint。
12.2 is_byok = false
通常是:
DeepSeek key 没放到 BYOK
BYOK key 不在 Prioritized
Always use 没开
请求没有限制 provider
OpenRouter 使用了共享 endpoint 或其他 provider
在 Codex Desktop 里,建议在 OpenRouter 账户级设置中把 Allowed Providers 限制为 DeepSeek,并开启 BYOK key 的 Always use。
12.3 Codex Desktop 还是走 GPT-5.5
检查:
%USERPROFILE%\.codex\config.toml 是否真的被脚本改了
第一行 profile 是否是 "deepseek-v4-pro"
Codex Desktop 是否完全退出后重新打开
项目里是否有 .codex/config.toml 覆盖了用户级配置
Codex 配置有优先级:CLI 参数、profile、项目配置、用户配置依次生效。(OpenAI Developers)
12.4 401 或认证失败
检查:
OPENROUTER_API_KEY 是否是 OpenRouter key,不是 DeepSeek key
是否设置到了 User 环境变量
Codex Desktop 是否在设置环境变量之后重启
OpenRouter key 是否被删除、禁用或设了限制
12.5 DeepSeek provider 报限流
这通常说明 OpenRouter 已经在用你的 DeepSeek BYOK key,但 DeepSeek 侧余额、额度或速率限制不够。
检查:
DeepSeek 账户余额
DeepSeek API key 是否有效
DeepSeek 后台是否有错误日志
OpenRouter BYOK key 是否仍然有效
13. 推荐的最终设置
个人使用 Codex Desktop,我建议这样:
OpenRouter Privacy:
- Paid endpoints that may train on request data: 开
- ZDR: 不强制
- Allowed Providers: DeepSeek
- Ignored Providers: 空
OpenRouter BYOK:
- DeepSeek key: Prioritized
- Always use: 开
Windows:
- OPENROUTER_API_KEY 设置为用户级环境变量
Codex:
- 用 profile 切换
- DeepSeek profile: deepseek/deepseek-v4-pro + high
- OpenAI profile: gpt-5.5 + high
这样做的好处是:Codex Desktop 配置简单,OpenRouter 侧负责保证 DeepSeek BYOK,切换模型只需要双击脚本改 profile。