本文目录
短提示也重连,先把问题限定在连接链路
这篇文章处理 Codex App 或 CLI 发出简单提示后,界面依次显示 Reconnecting 1/5 到 5/5,最后出现 stream disconnected before completion 的情况。OpenAI 官方 issue #23061 记录了同样的错误路径,说明它不一定来自提示词、仓库大小或上下文长度。
Codex 的普通 HTTPS 请求成功,也不代表流式回复一定稳定。OpenAI 网络文档说明 Codex 还会通过 wss://chatgpt.com/ 建立安全 WebSocket;应用接入代理、Clash 规则、节点出口和长连接策略中的任一环节都可能中断回复。
先按对照结果分组
| 现象 | 更可能的断点 | 继续检查 |
|---|---|---|
| OpenAI 状态页同时报告故障 | 服务端事件 | 等待恢复后复测 |
| App 失败,CLI 在同一网络可用 | 两种界面的代理接入不同 | 比较版本与启动方式 |
| 短回复成功,长回复中途重连 | WebSocket 或代理长连接被提前关闭 | 检查 443、TLS 和超时 |
| App 与 CLI 都不出现在 Clash 连接页 | 请求没有进入当前代理入口 | 核对系统代理、TUN 或端口 |
- Codex App 或 CLI发起登录、HTTPS 与流式请求
- 系统代理、环境变量或 TUN决定请求是否进入 Clash
- Clash 规则与节点为 chatgpt.com 选择实际出口
- OpenAI WebSocket在 443 端口维持模型流式连接
短请求成功而回复中途反复重连,常见断点不在提示词本身,而在应用接入代理、规则出站或 WebSocket 长连接之间。
用状态页和另一条网络排除共同故障
先查看 status.openai.com 是否存在正在处理的 ChatGPT 或 Codex 事件。若状态页有明确故障,保留错误时间并等待恢复;此时切换大量节点或重写规则只会破坏原来的对照条件。
状态页正常时,固定同一个短提示和账号,分别在当前 Clash 节点、另一个已知可用节点、手机热点或不经过企业网关的网络上测试。只要换网络立即恢复,就应继续检查本地代理或公司网络,而不是删除 Codex 会话。
建立三组可复现对照
记录准确错误
保存 Reconnecting 次数、失败 URL、发生时间、Codex App 与 CLI 版本,不公开会话内容或令牌。
固定最小请求
在新任务发送同一句短提示,避免长上下文、工具调用和仓库扫描干扰网络判断。
只换一次出口
先换一个确认可用的 Clash 节点,再换手机热点;每次都观察是否出现同一错误。
恢复原节点
对照完成后回到原策略组,避免后续结果来自尚未记录的新出口。
在 Clash 连接页确认 Codex 真的进入代理
打开 Clash Verge Rev 的连接页并清空旧筛选,再从 Codex 发出一次新提示。重点查找 chatgpt.com 及相关 OpenAI 域名,并记录命中的规则、策略组和实际节点;只看到浏览器流量不能证明 Codex App 或 CLI 使用了同一路径。
日常仍应使用 Rule 模式。为了判断是否是漏规则,可以短时间切到 Global 并固定同一节点复测;若 Global 恢复而 Rule 失败,说明请求已进入 Clash,问题在规则或策略选择,不必继续修改 Codex。测试后立即切回原模式。
Codex 请求出现并走预期节点
代理入口已接通,继续检查 WebSocket、TLS 检查和长连接超时。
请求出现但命中 DIRECT
短时用 Global 对照,再从连接记录补充可解释的规则。
完全没有 Codex 新连接
系统代理可能未被该进程读取,或 CLI 没有继承当前终端的代理变量。
所有域名都持续 timeout
先换节点或网络,不要把整组上游故障当成 Codex 专属问题。
分别测试 App 与 CLI,不把两者当成同一进程
Codex 官方故障排查说明提醒,桌面 App 和 CLI 可能包含不同版本。先记录两边版本,再在同一网络和节点下发送同一句短提示;App 成功而 CLI 失败,或反过来,都说明账号与 OpenAI 服务不是唯一变量。
codex --version
/Applications/Codex.app/Contents/Resources/codex --version版本和结果如何解释
| 对照 | 判断 | 下一步 |
|---|---|---|
| App 与 CLI 版本不同 | 先更新较旧的一侧再复测 | 保持节点与提示不变 |
| CLI 可用,App 持续重连 | App 可能没有沿用终端环境变量 | 用 TUN 或系统代理做独立对照 |
| App 可用,CLI 持续重连 | 当前 shell 代理变量或启动环境异常 | 检查变量和实际 HTTP 端口 |
| 两边都在同一阶段失败 | 更像共同节点、规则或 WebSocket 问题 | 继续检查网络控制 |
允许 Codex 的 WebSocket 在 443 端口持续连接
OpenAI 官方网络建议要求代理、防火墙或安全网关允许 chatgpt.com 在 TCP 443 上完成标准的 Upgrade: websocket 握手。若网页和登录可用,但回复总在生成途中断开,应让网络管理员检查 WebSocket 空闲超时、最大消息大小以及是否提前关闭长连接。
企业网络若启用了 TLS 检查,还要确认它没有替换错误证书、改写握手或只允许普通 HTTPS。最有价值的对照是在手机热点上使用同一账号和同一 Codex 版本;热点稳定而公司网络失败,才把问题交给网络策略处理。
交给管理员的最小检查项
- 允许 chatgpt.com 的 TCP 443 与 WebSocket Upgrade
- 长连接不会被过短的 idle timeout 提前关闭
- TLS 检查信任链对 HTTPS、登录与安全 WebSocket 一致
- 官方列出的 ChatGPT、OpenAI 与静态资源域名没有被改写
- 手机热点对照已排除账号、提示词和本机版本问题
只在当前终端测试 Clash 的 HTTP 代理入口
OpenAI Codex issue #20844 是仍未关闭的用户报告:同一代理栈使用 SOCKS5 时出现 stream disconnected,改成显式 HTTP_PROXY 与 HTTPS_PROXY 后恢复。它不是官方承诺的通用修复,但可以用来判断 SOCKS 路径和 HTTP 路径是否表现不同。
先在 Clash Verge Rev 设置中确认 HTTP 或 Mixed 端口。下面的 7897 只是示例,必须换成本机实际端口;变量只写入当前终端,不要先放进 shell 配置或系统环境。
export HTTP_PROXY=http://127.0.0.1:7897
export HTTPS_PROXY=http://127.0.0.1:7897
export http_proxy="$HTTP_PROXY"
export https_proxy="$HTTPS_PROXY"
unset ALL_PROXY all_proxy
codex$env:HTTP_PROXY="http://127.0.0.1:7897"
$env:HTTPS_PROXY="http://127.0.0.1:7897"
Remove-Item Env:ALL_PROXY -ErrorAction SilentlyContinue
codexCLI 立即稳定,连接页显示 chatgpt.com
保留该终端作为临时工作路径,并继续检查 App 是否需要 TUN 接管。
HTTP 可用、SOCKS5 仍断流
优先使用已验证的 HTTP 或 Mixed 入口,关注对应官方 issue 的后续修复。
两种代理都失败,但手机热点正常
检查 Clash 节点、规则与 WebSocket 转发,不要把变量永久写入系统。
新进程仍不出现在连接页
端口可能写错或命令没有在同一终端启动,关闭进程后核对设置再试。
撤销临时变量,再完成四项流式验证
测试无效或准备切回系统代理时,先退出本次启动的 Codex,再关闭当前终端即可撤销临时变量。若变量已写入 shell 配置或 Windows 用户环境,应删除本次新增项并打开新终端;不要同时保留旧 SOCKS、HTTP 与 TUN 三条未知路径。
若 App 只有在 TUN 下稳定,先把它作为可回退的临时接入方式,并保留关闭 TUN 后系统代理可恢复的基线。后续更新 Codex 或 Clash Verge Rev 后,用同一验证清单重新测试,再决定是否继续保留 TUN。
最终验证清单
- App 与 CLI 各发送一次短提示,都不再进入 Reconnecting 计数
- 连续生成一段较长回复,未出现 stream disconnected before completion
- Clash 连接页显示 chatgpt.com 命中预期规则与固定节点
- 退出 Codex 并关闭临时代理后,系统网络能恢复原状态
