网络 upstream_error api proxy

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 #stream disconnected before completion upstream request failed #codex upstream_error #codex response.failed event received #codex websocket closed before response.completed #stream closed before response completed #idle timeout waiting for sse #connection reset by peer os error 54 #远程主机强迫关闭了一个现有的连接 os error 10054 #codex tls handshake eof

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 failedupstream_error 说明失败更靠近上游链路:可能是 OpenAI / ChatGPT 后端、Codex 客户端到后端的 WebSocket / HTTPS 连接,也可能是你配置的 OpenAI 兼容中转站再往上游转发时失败。

所以不要把它简单归因成“网络不好”。这句话太粗糙。更准确的说法是:Codex 到 Responses 流式接口之间某一跳没有稳定撑到响应完成。

常见原因

  1. Codex App 或 CLI 某个版本的 WebSocket / HTTPS transport 不稳定,升级后才出现,回退网络或重启后偶发恢复。
  2. 公司网络、透明代理、TUN 模式、VPN、网关或本地代理会拦截、缓冲或提前关闭 WebSocket / SSE 长连接。
  3. 官方 Codex 或 OpenAI 上游处在高需求、503、no healthy upstream、upstream connect error 或临时故障状态。
  4. 自定义 OpenAI 兼容 provider 只对短请求或 /v1/chat/completions 兼容较好,但对 Codex 实际使用的 /v1/responses、SSE、工具调用、reasoning 字段或长上下文不稳定。
  5. ~/.codex/config.toml 里残留了旧 provider、旧 Base URL、错误的 wire_api 或不该启用的登录态配置,导致 Codex 实际走的链路不是你以为的那条。

不要只用普通 curl 或 hello 请求判断 provider 正常;Codex 的流式任务更容易暴露上游和长连接问题。

先排除突发故障

如果服务一直能用却突然报错,先重启 Codex、换网络或代理节点、等几分钟再试;只有 URL 明显不是预期入口时,再查 Base URL 或 provider 配置。

怎么解决

  1. 先升级或重启 Codex App / CLI。如果错误是升级后出现,也记录当前版本和出错时间,必要时用另一个版本或另一个入口做对照。
  2. 换一条网络路径测试,例如手机热点、关闭公司代理、切换 VPN 节点,或临时绕过 TUN / 网关代理。浏览器能打开 ChatGPT 不等于 Codex 进程的长连接能活到结束。
  3. 如果你用的是中转站,不要只测普通聊天接口。至少让服务商确认 /v1/responsesstream=true、SSE、长上下文和工具调用是否支持。
  4. 检查 ~/.codex/config.toml,清掉不再使用的 provider、旧 Base URL 和错误的 wire_api。配置污染会让你以为在测 A provider,实际 Codex 还在走 B provider。
  5. 把大任务拆小,新开一个干净会话再试。
  6. 如果持续失败,带上报错全文、URL、request id、Codex 版本、模型名、是否中转、出错时间和网络路径去问服务商或官方支持。

一句话结论

stream disconnected before completion: Upstream request failed 是 Codex 流式链路突然断开的外层提示,先按临时上游故障、代理长连接和客户端版本变化排查。

相关错误

Claude Code / Codex 503 No available accounts:中转站账号池不可用排查 先不要盲目换 Key。这个错误通常说明账号池、供应商、分组或模型路由暂时不可用。先测最小请求、确认模型和分组,再判断是等待恢复、降低上下文,还是换 provider。 Codex: Selected model is at capacity. 模型容量已满排查 报错:Selected model is at capacity. Please try a different model. 先把它当作模型级容量、Admission 或流式中断问题处理。它可能出现在官方 ChatGPT 登录态 Codex CLI,也可能来自中转站账号池或 Sub2API 上游 overloaded 透传。 Codex 提示:你的对话中有多个可能的网络安全风险的标记 提示:你的对话中有多个可能的网络安全风险的标记。先把它当作 OpenAI/Codex 安全路由触发,而不是直接判断账号或中转站故障;再检查是否使用了中转 API、敏感关键词、超长代码上下文或不透明模型路由。 Error 429 Too Many Requests:AI API 中转站限流排查 报错:exceeded retry limit, last status: 429 Too Many Requests, request id: <request-id>。AI 中转站里连续 429 多半是上游账号池限流、冷却或额度耗尽,先让服务商换号、换线路或换模型。 Error 401 Unauthorized:AI API 中转站认证排查 401 是认证失败信号。先检查当前加载的是哪一个 Key、请求打到哪个 Base URL、header 格式是否正确,以及这个 Key 是否仍然在对应 provider 中有效。 Codex 报错 stream disconnected before completion Codex 报 stream disconnected before completion: error sending request for url 时,先不要急着换账号或改模型。它通常是终端网络、代理继承、中转站 Responses 兼容性或上游 SSE 流断开的信号。

相关教程

相关主题

常见问题

常见问题

这个错误是不是说明我的账号或 API Key 错了?

通常不是。账号或 Key 错误更常见是 401、403 或登录失败。Upstream request failed 更像流式连接、上游服务、代理网关或自定义 provider 兼容性问题。

浏览器和普通 curl 都正常,为什么 Codex 还是失败?

浏览器正常只能说明网页链路正常;普通 curl hello 正常也只能说明短请求可用。Codex 可能走 WebSocket、SSE、Responses API、长上下文、工具调用和 reasoning 字段,链路压力比普通请求更高。

遇到这个错误要马上换中转站吗?

不要一上来就换。先看报错 URL、最小 Responses 流式请求、Codex 版本和代理路径。只有同一 provider 多模型持续失败,或服务商确认上游 / SSE / Responses 不兼容时,换 provider 才有意义。