想法
个人喜欢使用codex cli和codex的vscode的拓展,但是只有自己的team两个账号的gpt额度,而且都有5h限制,于是考虑当gpt蹬完的时候,可以在保留session的情况下,切换deepseek的api继续蹬。
为了尽量避免 Codex 在切换后因为 provider 过滤而隐藏已有 session,本方案让 CPA GPT 与 DeepSeek 始终使用同一个 model_provider = "cliproxyapi"。
这样不会修改或合并 session,而是让两边尽可能落入同一个 provider 视图。需要注意,Codex 的历史可见性还可能受到认证方式、客户端版本等因素影响,因此本文方案以实际测试结果为准。
下面分享一下现在使用的方案,以我的使用情况(以我的两个CPA反代出来的api和一个deepseek官方的api)为例:
解决方案
1.设置环境变量(设置到系统中的永久环境变量)
将下面的命令直接复制到powershell中运行
[Environment]::SetEnvironmentVariable( "CODEX1_API_KEY", "你的CPA1-Key", "User" )
[Environment]::SetEnvironmentVariable( "CODEX2_API_KEY", "你的CPA2-Key", "User" )
[Environment]::SetEnvironmentVariable( "CODEXDS_API_KEY", "你的Deepseek-Key", "User" )
- 将“你的xx-key”切换为自己真实的api。
- 然后“CODEX1_API_KEY”可以根据自己想要的名称修改,需要保证和下面的function中的名称一样。
- 自己可以按需求增加和减少想要添加的环境变量
2.设置相关函数,配置PowerShell 里的函数
保证function能够被系统认出来,我个人喜欢codex1、codex2、codexds分别表示自己的三个不同api的调用。
首先notepad $PROFILE进入记事本,复制以下内容然后ctrl+s保存
function codex1 {
$env:CLIPROXY_API_KEY = $env:CODEX1_API_KEY
& codex --profile gpt @args
}
function codex2 {
$env:CLIPROXY_API_KEY = $env:CODEX2_API_KEY
& codex --profile gpt @args
}
function codexds {
$env:CLIPROXY_API_KEY = $env:CODEXDS_API_KEY
& codex --profile ds @args
}
然后在poweshell输入. $PROFILE生效
3.设置总配置文件config.toml
powershell输入notepad "$env:USERPROFILE\.codex\config.toml"检查是否存在以下内容
[features]
remote_compaction_v2 = false
[windows]
sandbox = "unelevated"
[tui]
status_line = ["model-with-reasoning", "current-dir", "five-hour-limit", "weekly-limit"]
status_line_use_colors = true
正常情况下,只要我们使用过cpa反代之后的api,开头会是:
model = "gpt-5.6-sol"
model_provider = "cliproxyapi"
model_reasoning_effort = "medium"
service_tier = "default"
[model_providers.cliproxyapi]
name = "CLIProxyAPI"
base_url = "https://xxxx.xxxx.com/v1" # 需要修改为自己实际的反代api的网址
env_key = "CLIPROXY_API_KEY"
wire_api = "responses"
最开始我尝试把这一部分删除,只打算留下[features]以下的内容,发现这样子在使用deepseek的api时,codex cli中的session存在,但是vs code中codex拓展的历史记录不在了。
为了解决这个问题,在[features]之前添加上deepseek的相关内容,完整配置如下:
model = "deepseek-flash"
model_provider = "cliproxyapi"
model_reasoning_effort = "high"
model_catalog_json = "C:/Users/xxxxx/.codex/models.json" # 需要修改为自己电脑实际的位置
[model_providers.cliproxyapi]
name = "CLIProxyAPI"
base_url = "https://api.deepseek.com"
env_key = "CODEXDS_API_KEY"
wire_api = "responses"
[features]
remote_compaction_v2 = false
[windows]
sandbox = "unelevated"
[tui]
status_line = ["model-with-reasoning", "current-dir", "five-hour-limit", "weekly-limit"]
status_line_use_colors = true
4.分别设置gpt.config.toml 和 ds.config.toml
powershell中输入notepad "$env:USERPROFILE\.codex\gpt.config.toml",复制以下内容
model = "gpt-5.6-sol"
model_provider = "cliproxyapi"
model_reasoning_effort = "medium"
service_tier = "default"
[model_providers.cliproxyapi]
name = "CLIProxyAPI"
base_url = "https://xxxx.xxxx.com/v1" # 需要修改为自己实际的反代api的网址
env_key = "CLIPROXY_API_KEY"
wire_api = "responses"
同理notepad "$env:USERPROFILE\.codex\ds.config.toml"
model = "deepseek-flash"
model_provider = "cliproxyapi"
model_reasoning_effort = "high"
model_catalog_json = "C:/Users/23247/.codex/models.json"
[model_providers.cliproxyapi]
name = "CLIProxyAPI"
base_url = "https://api.deepseek.com/"
env_key = "CLIPROXY_API_KEY"
wire_api = "responses"
5.配置deepseek的models.json
models.json推荐使用官方配置,但注意:官方脚本同时会修改 config.toml。如果已经使用本文的自定义配置,应提前备份 config.toml,生成 models.json 后再恢复自己的 config.toml
首先备份自己的config.toml
Copy-Item `
"$env:USERPROFILE\.codex\config.toml" `
"$env:USERPROFILE\.codex\config.my-backup.toml" `
-Force
然后运行官方脚本
irm https://cdn.deepseek.com/api-docs/codex-deepseek-setup-en.ps1 | iex
输入1
生成完成以后,将备份的文件替换脚本修改后的文件:
Copy-Item `
"$env:USERPROFILE\.codex\config.my-backup.toml" `
"$env:USERPROFILE\.codex\config.toml" `
-Force
DeepSeek 官方也说明 models.json 的作用就是给 Codex 提供 context window、reasoning effort、tool format 等 metadata。
6.现在我们的文件结构
C:\Users\xxxxx\.codex\
config.toml
# VS Code 默认 DeepSeek 配置
# 公共配置
gpt.config.toml
# CPA+GPT配置
ds.config.toml
# DeepSeek连接设置
models.json
#DeepSeek 模型 metadata
sessions\
7.注意deepseek实际model以models.json的结果为准
模型名称不要照抄本文,以自己当前 models.json 中的 "slug" 为准。 DeepSeek 官方脚本与在线文档在版本更新期间可能存在命名差异。
Select-String ` -Path "$env:USERPROFILE\.codex\models.json" ` -Pattern '"slug"'
当前我的查询结果如下:
.codex\models.json:4: "slug": "deepseek-flash",
.codex\models.json:72: "slug": "deepseek-v4-pro",
所以上述模型我都写为model:"deepseek-flash"
8.最终实现
codex1 #CPA反代的第一个team gpt额度
codex2 #CPA反代的第二个team gpt额度
codexds #deepseek官方api额度
codex1 resume # 展示历史记录