• 一打猫猫

    想法

    个人喜欢使用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 # 展示历史记录
    主楼
  • OctoberSama

    中途切提供商的最大问题是缓存失效了 雷霆上下文一下子塞进来

    #1
  • 一打猫猫

    哈哈哈这个确实是最大的问题,现在我只想到了如何换着蹬方便,还没考虑到缓存的问题 ^-^

    #2
  • shen1e-linuxdo

    统一走cpa出口呗,cpa可以接服务商

    #3
  • 一打猫猫

    统一的话,我感觉切换sol terra luna不太方便,有打算将两个gpt统一,如果gpt再和deepseek统一,感觉模型容易搞混,我再多了解一下吧,谢谢佬!!

    #4
  • shen1e-linuxdo

    cpa接服务商可以自定义映射模型名称,这样对外看到的都是统一模型

    #5
  • Alex_Ju

    接个cpa或者sub2api,映射完,把deepseek和gpt的权重调一下.gpt限流会切到deepseek的映射

    #6
  • 一打猫猫

    突然发现切换为deepseek之后再切换为gpt好像无法继续对话了,还是存在问题,打算更换为佬友建议的全部用cpa试试!

    #7

发表回复

登录后回复