跳到内容
跨境Ai视界 跨境Ai视界
Go back

彻底解决 GPT-5.5 Remote Compact Error:本地压缩方案记录

文章目录共 1 节
  1. 完整配置与迁移文档:Codex Local Compact / cxl
  2. 1. 当前结论
  3. 2. 适用场景
  4. 3. 本机当前状态
  5. 4. 实现原理
  6. 5. 共享状态
  7. 6. 当前压缩参数
  8. 7. 复制到其他电脑:从零部署步骤
  9. 8. 其他电脑的配置同步
  10. 9. 日常使用与验证
  11. 10. 常见提示含义
  12. 11. 更新官方源码后的维护步骤
  13. 12. 清理 debug 构建产物
  14. 13. 回滚方式

Codex 用GPT5.5的时候,总是会出现Remote Compact Error。是它把后端的压缩放到了远程的API上面。如果你的网络不是特别稳定的话,会经常出现压缩报错,在执行长任务的时候。

即使网络稳定,也很经常出现这种状况。这个不只是国内的开发者,全球的开发者都会出现这种的问题。本质就是OpenAI的5.5的模型对于remote compact 任务的bug。

当然我也出现了,所以去找了一些的解决方案。最基础的就是切换到5.4的模型,手动 /compact,压缩完成再去切换到5.5,继续任务。

如果你的任务不是特别的长,还是可以接受的。但是如果是长任务加多并发,就特别的难受。

最终我还是和GPT 5.5的沟通当中找到了解决办法,所谓的用魔法打败魔法。

就是把Codex CLI的代码去拉到本地,用Rust重新编译,实现一个local compact本地压缩的效果。本地压缩的效果可能会逊色于远程的压缩,但是对于长任务的连续性,收益肯定是大于Remote Compact Error。

那我真实的测试情况,用Mac Rust 编译的时间是一个小时,用Linux Rust编译了5个多小时,让我很无语。。

那用编译过后的版本再去执行长任务的时候,完全不会中断,从根本解决了这个问题。

我把编译和迁移过程整理成了一份完整文档,直接放在下面。这个不是外部资料引用,而是我自己的实操记录,所以更适合按正文继续往下写;如果整段做成引用,反而会影响目录、代码块和后续维护。

如果只是临时绕过,也可以先用手动切换模型再 /compact 的方式解决。下面这份文档适合长期用 Codex 跑长任务的人参考。

SCR-20260616-qagg

SCR-20260616-njcz

完整配置与迁移文档:Codex Local Compact / cxl

这份文档记录本机 cxl 的实现、启动方式、配置参数、升级方式,以及如何把同一套方案复制到其他电脑。目标是绕过容易断流的远程压缩接口,同时保留官方 Codex、原有登录、配置、MCP 和会话记录。

1. 当前结论

长任务优先用:

cxl

cxl 是本地编译版 Codex。它通过环境变量关闭 remote compact,让自动压缩和手动 /compact 都走本地压缩路径,不再请求:

https://chatgpt.com/backend-api/codex/responses/compact

官方 codex 没有被覆盖。cxl 只是另一个 alias,和官方命令可以并存。

2. 适用场景

适合这些情况:

  • Codex CLI 长任务经常报:Error running remote compact task: stream disconnected before completion
  • 错误 URL 指向:/backend-api/codex/responses/compact
  • ChatGPT auth 可用,普通对话能跑,但进入自动压缩或手动 /compact 时容易断。
  • 你已经确认网络出口不稳定,或者不想继续依赖 remote compact 接口。

不解决这些问题:

  • 普通模型请求 /backend-api/codex/responses 断流。
  • WebSocket 长连接超时。
  • VPN / 代理本身不稳定。
  • 账号额度、登录态、MCP 配置错误。

判断方法:看报错 URL。

  • /responses/compactcxl 这套方案能绕过。
  • /responses:这是普通模型请求断流,仍然要处理网络或代理。

3. 本机当前状态

本地源码目录:

/codex

当前分支:

local-compact

当前版本:

codex-cli 0.140.0

当前本地提交:

7d38cdb6c3 Update local compact build to 0.140 release

本地可执行文件:

/codex/codex-rs/target/release/codex

Shell alias 位置:

~/.zshrc

Alias 内容:

alias cxl='RUST_BACKTRACE=1 CODEX_DISABLE_REMOTE_COMPACT=1 "/codex/codex-rs/target/release/codex"'

新终端可直接运行:

cxl

当前终端要先加载:

source ~/.zshrc

4. 实现原理

修改文件:

codex-rs/core/src/compact.rs

核心逻辑:

pub(crate) fn should_use_remote_compact_task(provider: &ModelProviderInfo) -> bool {
    if std::env::var("CODEX_DISABLE_REMOTE_COMPACT")
        .ok()
        .as_deref()
        == Some("1")
    {
        return false;
    }

    provider.supports_remote_compaction()
}

含义:只要启动进程带 CODEX_DISABLE_REMOTE_COMPACT=1,Codex 就不会使用 remote compact。

这不是手动复制聊天记录,也不是手动写摘要。它仍然走 Codex 内部的压缩流程,只是把“远程专用 compact 接口”改成“普通模型请求生成压缩摘要”。压缩效果仍由当前模型决定;差别主要是稳定性和接口路径,不是把上下文简单截断。

5. 共享状态

cxl 没有设置单独的 CODEX_HOME,所以它和官方 codex 默认共享:

  • ~/.codex/config.toml
  • ChatGPT 登录态
  • MCP 配置
  • skills / plugins
  • profiles
  • 会话记录和本地状态

不要把本地编译版复制覆盖到官方 codex 路径。也不要把 alias 写成 alias codex=...,除非明确想替换默认命令。

6. 当前压缩参数

用户级配置文件:

~/.codex/config.toml

当前压缩相关配置:

model_context_window = 272000

# cxl 已绕过 remote compact;200K 在 272K 上下文内减少压缩频率并保留安全余量
model_auto_compact_token_limit = 200000
model_auto_compact_token_limit_scope = "total"
tool_output_token_limit = 8000

说明:

  • 160000 比较保守,压缩更频繁。
  • 200000 适合当前 272000 上下文窗口,能减少压缩频率,同时保留约 72000 token 缓冲。
  • 不建议直接提高到 240000+,否则长任务、工具输出和推理摘要更容易挤满上下文。
  • 如果后续出现压缩质量下降、上下文遗忘或临近满窗错误,把 model_auto_compact_token_limit 改回 160000

7. 复制到其他电脑:从零部署步骤

其他电脑不能只复制 cxl 这个二进制文件。不同 Mac 架构、Rust 版本、系统依赖可能不同。更稳的做法是在那台电脑上重新拉源码、打同一个 patch、release 编译。

7.1 准备目录

mkdir -p "$HOME/code/github-project"
cd "$HOME/code/github-project"
git clone "https://github.com/openai/codex.git"
cd "$HOME/code/github-project/codex"

如果目录已经存在:

cd "$HOME/code/github-project/codex"
git fetch origin --tags

7.2 切到官方版本

当前本机使用 rust-v0.140.0。其他电脑建议先用同一个版本,减少变量:

git checkout "rust-v0.140.0"
git switch -c "local-compact"

如果以后要跟随官方新版本,把 rust-v0.140.0 换成新的官方 tag。

7.3 打本地 patch

打开:

codex-rs/core/src/compact.rs

找到:

pub(crate) fn should_use_remote_compact_task(provider: &ModelProviderInfo) -> bool {
    provider.supports_remote_compaction()
}

改成:

pub(crate) fn should_use_remote_compact_task(provider: &ModelProviderInfo) -> bool {
    if std::env::var("CODEX_DISABLE_REMOTE_COMPACT")
        .ok()
        .as_deref()
        == Some("1")
    {
        return false;
    }

    provider.supports_remote_compaction()
}

提交本地 patch:

git add "codex-rs/core/src/compact.rs"
git commit -m "Add local compact switch"

7.4 Release 编译

cd "$HOME/code/github-project/codex/codex-rs"
cargo build --release --bin codex

编译完成后验证:

"$HOME/code/github-project/codex/codex-rs/target/release/codex" --version

应看到类似:

codex-cli 0.140.0

7.5 添加 cxl alias

推荐写绝对路径。把下面这一行加入 ~/.zshrc,注意把 /Users/你的用户名 改成那台电脑的真实路径:

alias cxl='RUST_BACKTRACE=1 CODEX_DISABLE_REMOTE_COMPACT=1 "/Users/你的用户名/code/github-project/codex/codex-rs/target/release/codex"'

也可以用 $HOME,但不要直接放在单引号内部当成可展开变量。可写成这个形式:

alias cxl='RUST_BACKTRACE=1 CODEX_DISABLE_REMOTE_COMPACT=1 "$HOME/code/github-project/codex/codex-rs/target/release/codex"'

这个形式在 alias 执行时会展开 $HOME

加载配置:

source "$HOME/.zshrc"

验证 alias:

zsh -ic "alias cxl; cxl --version"

8. 其他电脑的配置同步

如果其他电脑也要共享同样体验,主要同步这些内容:

  • 这份文档:LOCAL_COMPACT_SETUP.md
  • ~/.zshrc 里的 cxl alias
  • ~/.codex/config.toml 里的 compact 参数
  • 官方 Codex 登录态需要在那台电脑上正常登录;不要直接复制不确定的认证文件

~/.codex/config.toml 可参考:

model_context_window = 272000
model_auto_compact_token_limit = 200000
model_auto_compact_token_limit_scope = "total"
tool_output_token_limit = 8000

如果那台电脑的模型上下文窗口不是 272000,不要照抄 200000。原则是:自动压缩阈值要低于上下文窗口,并留出足够余量。

9. 日常使用与验证

启动:

cxl

进入 Codex 后检查状态:

/status

手动触发压缩测试:

/compact

如果压缩时不再出现这个 URL,说明绕过生效:

/backend-api/codex/responses/compact

如果仍然出现普通请求断流:

/backend-api/codex/responses

那是网络长连接问题,不是 remote compact 问题。

10. 常见提示含义

OpenAI Codex (v0.140.0) / codex-cli 0.140.0

这是当前本地 release build 的版本显示,说明 cxl 已经指向 0.140.0。

Limits: refresh requested; run /status again shortly.

额度信息正在刷新,稍后再运行 /status 即可。

Falling back from WebSockets to HTTPS transport. request timed out

WebSocket 连接超时,Codex 自动降级到 HTTPS。偶发正常;频繁出现说明代理或网络长连接不稳。

Stream disconnected before completion ... /backend-api/codex/responses

普通模型请求断流,不是 compact 接口错误。cxl 只能绕过 /responses/compact,不能修复所有网络长连接问题。

attempt to add with overflow

这是 Rust debug build 的整数溢出检查触发的 panic。当前 cxl 已切到 release binary,正常不应再因为 debug-only overflow check 退出。cxl alias 仍带 RUST_BACKTRACE=1,如果以后仍然崩溃,终端会显示更完整的源码调用栈,便于定位真正的 Codex 代码路径。

11. 更新官方源码后的维护步骤

进入本地仓库:

cd "$HOME/code/github-project/codex"

拉取上游 tag:

git fetch origin --tags

更新到新的官方 tag。示例:

git checkout "rust-v0.141.0"
git switch -C "local-compact"

重新套用 CODEX_DISABLE_REMOTE_COMPACT patch。如果已有本地提交,也可以用 rebase/cherry-pick,但最稳的是确认 compact.rs 里仍然有这段判断。

重新编译:

cd "$HOME/code/github-project/codex/codex-rs"
cargo build --release --bin codex

验证:

"$HOME/code/github-project/codex/codex-rs/target/release/codex" --version
zsh -ic "alias cxl; cxl --version"

12. 清理 debug 构建产物

如果已经确认 cxl 指向 release binary,并且下面命令通过:

cxl --version

可以删除 debug 目录释放空间:

rm -rf "$HOME/code/github-project/codex/codex-rs/target/debug"

不要删除整个 target,因为 release binary 在:

codex-rs/target/release/codex

13. 回滚方式

只停用 cxl:继续运行官方版。

codex

恢复保守压缩阈值:

model_auto_compact_token_limit = 160000

删除 alias:从 ~/.zshrc 移除这一行:

alias cxl='RUST_BACKTRACE=1 CODEX_DISABLE_REMOTE_COMPACT=1 "codex/codex-rs/target/release/codex"'

然后重开终端,或执行:

source "$HOME/.zshrc"

Share this post on:

下一篇
SaaS 月收入突破一千刀后的复盘