• 请不要在回答技术问题时复制粘贴 AI 生成的内容
pmer
V2EX  ›  程序员

Codex 一键切换工具: GPT 额度用完 DeepSeek/Kimi 顶班,老对话双向无缝续聊

  •  
  •   pmer ·
    aipmer · 13 days ago · 1608 views

    背景:ChatGPT 会员额度一用完,Codex 就得切到第三方 API 顶班,但现有方案两个痛点一直没解决好——

    1. CC Switch 点「启用」实际不写 Codex 配置( v3.19.2 和 v3.20.1 都实测过,接管模式也不写),切换是假切换
    2. 切了供应商,老对话就续不上:跨供应商 resume 会被 API 拒绝

    折腾了一阵把两个问题都解决了,开源出来:codex-switch

    核心是一个 bash 脚本,双击或一行命令在 OpenAI 官方 / DeepSeek / Kimi Code 三向切换。重点是两个实测出来的坑都内置处理了:

    • codex 续聊时的 pre-sampling compact 钉死用会话元数据里记录的模型名(跟你当前配置无关),跨供应商 resume 必报 invalid_request_error → 脚本切换时批量改写历史会话的模型名

    • DeepSeek 直连 /responses 产生的 reasoning 项带 content 数组和本地 Fernet 加密的 encrypted_content ,官方 API 会报 array_above_max_length / invalid_encrypted_content → 切回官方时递归剥离

    所有改写前自动留备份。Kimi 需要走官方文档的本地 codeproxy 路由( tool_search 兼容问题),README 里有完整配置方法。

    实测环境:Codex 0.153.4 + CC Switch 3.20.1 + macOS 。中英双语 README ,MIT 。

    5 replies    2026-09-18 11:23:30 +08:00
    guozhuang
        1
    guozhuang  
       13 days ago
    厉害厉害
    pmer
        2
    pmer  
    OP
       11 days ago
    pmer
        3
    pmer  
    OP
       11 days ago
    来更新一下进展,发布了 v1.1.0:

    修了一个比较隐蔽的问题:Codex GUI 其实不直接读会话的 jsonl 文件,而是读 thread_history_1.sqlite 里按字节偏移建的投影缓存。脚本原地改写文件后偏移会失效,导致 GUI 里对话"停在旧时间"。现在脚本改写完会自动失效对应线程的投影,重启后自动重建。

    官方模式续聊第三方创建的对话,实际会撞上官方 API 的四层校验( reasoning content 数组、本地加密的 encrypted_content 、工具调用的 tool_ 前缀 id 、reasoning 的 rs_ id ),之前只处理了前两层,这次补齐后两层,实测 DeepSeek 血统的长会话也能正常续上。

    补了 Kimi 的 schema 垫片,修复 MCP 工具定义被 Kimi 校验器拒绝的问题。另外加了中英文更新日志( CHANGELOG ),排查过程整理在 issue #1 里,遇到同样报错的可以直接对照。
    pmer
        4
    pmer  
    OP
       10 days ago
    再更新一版,v1.2.0:解决了第三方模式下 Codex 浏览器控制的问题。
    背景:Codex 的内嵌浏览器 / Computer Use 是 OpenAI 云端服务,切到第三方( DeepSeek/Kimi )后必然报 Codex auth token is unavailable ,配置救不回来。
    做法:桥接 Kimi 官方的 WebBridge 浏览器插件(本地守护进程),让 Codex 在第三方模式下也能操作本机真实浏览器,而且自带浏览器里的登录态。提供两种方式:
    Codex Skill (推荐):一个 SKILL.md ,教 Codex 用 curl 调 WebBridge 的 HTTP 接口,navigate / snapshot / click / fill / evaluate 都支持,已实测全链路跑通。
    MCP 桥接(备用):一个 100 行的 Python stdio server 把 WebBridge 包装成 MCP 工具。顺带踩了个坑:Codex 0.153.4 把 tool_search_always_defer_mcp_tools 标记 removed 并硬编码为 true ,MCP 工具默认藏在 tool_search 后面,exec 模式下模型根本看不到——所以这个只作备用,主路径走 skill 。
    适合需要在第三方模式下让 Codex 操作需登录网站(改后台配置、提交表单、抓数据)的场景。README 有完整接入说明,欢迎试用反馈。
    pmer
        5
    pmer  
    OP
       3 days ago
    再更新一版,两连发 v1.3.0 + v1.4.0 。
    v1.3.0 修了个深坑:fork 过的对话切换供应商后直接打不开。分叉文件头内嵌的 history_base 字节偏移指向源文件位置,切换改写源文件后偏移越界,App 报 invalid paginated history lineage: cutoff byte offset is past the source rollout ,拒绝加载整个对话。这个偏移在 jsonl 里不在数据库,失效缓存救不了。解法:按 ordinal 重新定位同一行、更新 cutoff 即可精确修复。新增 remap-history-base.py ,支持多级分叉链、幂等,切换时自动跑,也可独立运行修复存量。
    顺带做了提速:我的会话库已攒到 14 GB / 448 个文件,之前每次切换全量扫两遍越来越慢。现在改增量(只扫变动过的文件)+ 流式读写,耗时回到最初水平。

    v1.4.0 是体验改进:切换后不用重新选模型了。会话模型钉死在数据库里,光改 config 没用,现在切换时连同 threads 表里的 model / reasoning_effort 一起翻转:openai→gpt-5.6-terra ,kimi→k3-256k ,deepseek→deepseek-v4-flash ,强度统一 medium 。(该省省,该花花)

    更新日志(中英双语): https://github.com/aipmer/codex-switch/blob/main/docs/Changelog.md
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   899 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 21:24 · PVG 05:24 · LAX 14:24 · JFK 17:24
    ♥ Do have faith in what you're doing.