Codex 报错:stream disconnected before completion: Upstream request failed
这个错误说明 Codex 的流式请求没有等到完整的 response.completed,就被本地网络、代理网关、Codex 客户端、OpenAI 上游或中转站上游链路打断了。先看报错里的 URL 和错误类型,再分辨是官方 Codex 服务问题、本机网络问题,还是中转站 Responses API / SSE / WebSocket 兼容性问题。
错误摘要
Codex 报 stream disconnected before completion: Upstream request failed 时,不要只凭浏览器能上网就排除网络,也不要只凭 curl hello 能通就认定中转站没问题。先看 URL、upstream_error、response.failed、request id 和是否使用自定义 provider,再按官方链路、本地代理和中转站链路分开排查。
Codex 报:
stream disconnected before completion: Upstream request failed
有时还会看到类似 JSON:
{"type":"upstream_error","message":"Upstream request failed"}
或者变体:
stream disconnected before completion: response.failed event received
stream disconnected before completion: websocket closed by server before response.completed
stream disconnected before completion: stream closed before response.completed
这个错误是什么意思
stream disconnected before completion 的重点是:Codex 原本在等待一个完整的流式响应,但连接在 response.completed 之前断了。
Upstream request failed 或 upstream_error 说明失败更靠近上游链路:可能是 OpenAI / ChatGPT 后端、Codex 客户端到后端的 WebSocket / HTTPS 连接,也可能是你配置的 OpenAI 兼容中转站再往上游转发时失败。
所以不要把它简单归因成“网络不好”。这句话太粗糙。更准确的说法是:Codex 到 Responses 流式接口之间某一跳没有稳定撑到响应完成。
常见原因
- Codex App 或 CLI 某个版本的 WebSocket / HTTPS transport 不稳定,升级后才出现,回退网络或重启后偶发恢复。
- 公司网络、透明代理、TUN 模式、VPN、网关或本地代理会拦截、缓冲或提前关闭 WebSocket / SSE 长连接。
- 官方 Codex 或 OpenAI 上游处在高需求、503、no healthy upstream、upstream connect error 或临时故障状态。
- 自定义 OpenAI 兼容 provider 只对短请求或
/v1/chat/completions兼容较好,但对 Codex 实际使用的/v1/responses、SSE、工具调用、reasoning 字段或长上下文不稳定。 ~/.codex/config.toml里残留了旧 provider、旧 Base URL、错误的wire_api或不该启用的登录态配置,导致 Codex 实际走的链路不是你以为的那条。
不要只用普通 curl 或 hello 请求判断 provider 正常;Codex 的流式任务更容易暴露上游和长连接问题。
先排除突发故障
如果服务一直能用却突然报错,先重启 Codex、换网络或代理节点、等几分钟再试;只有 URL 明显不是预期入口时,再查 Base URL 或 provider 配置。
怎么解决
- 先升级或重启 Codex App / CLI。如果错误是升级后出现,也记录当前版本和出错时间,必要时用另一个版本或另一个入口做对照。
- 换一条网络路径测试,例如手机热点、关闭公司代理、切换 VPN 节点,或临时绕过 TUN / 网关代理。浏览器能打开 ChatGPT 不等于 Codex 进程的长连接能活到结束。
- 如果你用的是中转站,不要只测普通聊天接口。至少让服务商确认
/v1/responses的stream=true、SSE、长上下文和工具调用是否支持。 - 检查
~/.codex/config.toml,清掉不再使用的 provider、旧 Base URL 和错误的wire_api。配置污染会让你以为在测 A provider,实际 Codex 还在走 B provider。 - 把大任务拆小,新开一个干净会话再试。
- 如果持续失败,带上报错全文、URL、request id、Codex 版本、模型名、是否中转、出错时间和网络路径去问服务商或官方支持。
一句话结论
stream disconnected before completion: Upstream request failed 是 Codex 流式链路突然断开的外层提示,先按临时上游故障、代理长连接和客户端版本变化排查。