博客

Codex 提示「stream disconnected before completion」:原因和解决办法

一句话答案

stream disconnected before completion 的意思是:Codex 这一轮的响应流,在请求已经被接受之后、模型回复完成之前中断或出错了。它不是某一个具体错误。Codex 会把真正的原因写在冒号后面,看那一段就知道该怎么办:

手上有 USDT 的:也可以在充值弹窗点「Crypto支付」,从币安、OKX 等交易所 App 转 USDT、USDC 或 ETH,5 美元起,不用装钱包插件。步骤见用 USDT 充值 Claude / GPT API。

冒号后面的文字 指向的问题
error sending request for url (...)、os error 10053、os error 10061、os error 61、Broken pipe (os error 32) 你的网络、VPN、代理或防火墙
stream closed before response.completed 回复到一半连接被关了,可能是你和服务器之间的任何一环
websocket closed by server before response.completed 回复还没结束,服务器就关掉了 Codex 的 WebSocket 连接;多半是 OpenAI 那边的问题,有时是代理
idle timeout waiting for SSE / idle timeout waiting for websocket 超过空闲超时(默认 5 分钟)没有收到数据
regurg plugin blocked the output stream. OpenAI 服务器拦下了模型的输出(HTTP 400 safety_violation),不是网络问题
An error occurred while processing your request. ... request ID ... 服务端出错
Our servers are currently overloaded. Please try again later. 模型满载
Rate limit reached for ... / Request too large for ... 每分钟 token 数或每分钟请求数的限制

Codex 会先自己重试,也就是报错前看到的 Reconnecting... 1/5。偶尔出现一次,重新发这一轮就行;每次都出现的话,按冒号后面的文字找原因。

报错长什么样

这条消息定义在 Codex 源码 codex-rs/protocol/src/error.rs 里,格式是 stream disconnected before completion: {原因},用于 HTTP 握手成功之后、response.completed 之前流断开或出错的情况。Codex 把它当作临时错误,会自动重试这一轮。

重试时会显示计数,比如 openai/codex#47538:

text
Reconnecting... 1/5 (stream disconnected before completion: stream closed before response.completed)

重试次数用完后,Codex 可能从 WebSocket 切换到 HTTPS 再试一次(#38366,有删节):

text
⚠ Falling back from WebSockets to HTTPS transport. stream disconnected before completion: Request too large for gpt-5.6-luna in organization org-... on tokens per min (TPM): Limit 200000, Requested 208334. The input or output tokens must be reduced in order to run successfully.

Codex issue 里报告过的其他原因:

text
stream disconnected before completion: error sending request for url (https://chatgpt.com/backend-api/codex/responses)
stream disconnected before completion: IO error: An established connection was aborted by the software in your host machine. (os error 10053)
stream disconnected before completion: No connection could be made because the target machine actively refused it. (os error 10061)
stream disconnected before completion: websocket closed by server before response.completed
stream disconnected before completion: idle timeout waiting for SSE
stream disconnected before completion: idle timeout waiting for websocket
stream disconnected before completion: IO error: Broken pipe (os error 32)
stream disconnected before completion: Connection refused (os error 61)
stream disconnected before completion: regurg plugin blocked the output stream.
stream disconnected before completion: Our servers are currently overloaded. Please try again later.
stream disconnected before completion: An error occurred while processing your request. You can retry your request, or contact us through our help center at help.openai.com if the error persists. Please include the request ID <id> in your message.

出处:#38212、#54459、#49466、#53578、#53557、#18960、#46149、#51039、#56387、#38885、#51937。

消息里的 URL 也能看出 Codex 用的是哪个接口:ChatGPT 账号登录时是 chatgpt.com/backend-api/codex/...,用 OpenAI API Key 时是 api.openai.com/v1/...,用自定义 provider 时是它的 base_url。

按原因逐个解决

网络:error sending request、os error 10053、os error 10061、os error 61、os error 32

Codex 没能把请求发出去,或者连接被你本机关掉了。

  • Windows 上的 os error 10061(连接被拒绝)。 Codex 尝试的地址上没有程序应答。如果 Codex 走的是本地代理,确认代理在运行、监听的端口和 Codex 用的一致,或者删掉让 Codex 走这个代理的设置。
  • Windows 上的 os error 10053。 本机上的某个软件中止了连接:防火墙、杀毒软件、VPN 客户端或代理。暂停它们测一下,再给 Codex 加例外。
  • macOS 上的 os error 61(连接被拒绝)。 相当于 Windows 的 10061(Linux 上是 os error 111)。最常见的原因是本地代理已经关了。在 #38885 里,一个被遗忘的 ~/.codex/.env 文件设置了 HTTP_PROXY、HTTPS_PROXY、ALL_PROXY,代理软件关掉之后,Codex 仍然把流量发往 127.0.0.1:7890。检查这个文件和终端里的代理变量,然后打开代理或删掉这些设置。
  • macOS / Linux 上的 Broken pipe (os error 32)。 Codex 还在发送时,对端关掉了连接。可能是代理或 VPN 断了连接,也可能是请求太大:有用户在一个图片很多的对话里实测,OpenAI 的 WebSocket 接口会拒收超过约 16 MiB 的消息(#55317)。如果只有某个很长的对话一直失败、新对话正常(#56387),就开新对话或去掉大图;如果每个请求都失败,检查代理或 VPN。
  • error sending request for url。 请求发出前就失败了:DNS、代理或网络问题。在同一个终端里确认 URL 里的主机能解析、能连上。

运行 codex doctor 查看 Codex 的运行环境。然后在同一个终端里测一下消息 URL 里的主机,比如 curl -I https://chatgpt.com 或 curl -I https://api.openai.com/v1/models。拿到任何 HTTP 状态码都说明主机能连上;报连接错误说明是网络链路的问题,不是 Codex 的问题。

WebSocket 被关闭:websocket closed by server before response.completed

用 ChatGPT 账号登录时,Codex 通过 WebSocket 连 wss://chatgpt.com/backend-api/codex/responses 接收每一轮回复。这条报错的意思是:最后的 response.completed 事件还没到,服务器就把连接关了。Codex 会自动重连最多 5 次(Reconnecting... 2/5 到 5/5),有时退回 HTTPS(Falling back from WebSockets to HTTPS transport),全部失败才报这个错。

CLI 和桌面 App 都有人遇到,开不开 VPN 都有(#18960、#20739、#13041),所以多半是 OpenAI 那边的问题。

  • 重试这一轮。 偶尔断一次,下一次通常就能过。
  • 用了代理软件(Clash 等)的, 要让 Codex 的 WebSocket 流量也走代理。#18960 和 #13041 里有好几个人在 ~/.codex/.env 里设置 HTTPS_PROXY、HTTP_PROXY,SOCKS5 代理再加 ALL_PROXY,重连循环就没了。
  • 更新 Codex: npm install -g @openai/codex@latest。
  • 一直出现的话, 把你的 thread ID 补到 #18960,或者用 /feedback 反馈。

自定义 provider 的请求发到它自己的 base_url,不经过 chatgpt.com 的这个地址,所以不会碰到这一种断开,见下文「用 TeamoRouter 的 Key 跑 Codex」一节。

中途断开:stream closed before response.completed

回复已经开始了,但在最后一个事件到达之前连接被关掉。你和服务器之间的任何一环都可能造成:不稳定的 Wi-Fi、VPN 切换节点、会掐断长连接的代理,或者服务器本身。

  • 偶尔出现:让 Codex 自己重试,或者重新发这一轮。
  • 在某个网络下经常出现:换个网络,或者关掉 VPN、代理测一下。
  • 用了自定义 provider 或网关:去它的日志里查这条请求。中间的网关也可能关掉流。

空闲超时:idle timeout waiting for SSE

流上超过空闲超时没有收到任何事件。长时间推理或连接卡住都可能导致。自定义 provider 的超时是 ~/.codex/config.toml 里该 provider 配置块中的 stream_idle_timeout_ms(默认 300000,即 5 分钟),见 配置参考。

空闲超时:idle timeout waiting for websocket

和上面是同一个超时,只是发生在 Codex 连 OpenAI Responses API 用的 WebSocket 连接上:超过空闲超时没有收到任何消息。Codex 源码(responses_websocket.rs)里它和 SSE 用的是同一个 provider 设置 stream_idle_timeout_ms。有一份报告查到,是一次工具调用在分发时让这一轮静默了约 300 秒(#51039),之后 Codex 自动重连继续了。如果每一轮都出现,按上面的网络问题排查。

服务端错误:An error occurred while processing your request

流开始之后服务端返回了错误。重试这一轮。如果一直出现,用 /feedback 反馈,并附上消息里的 request ID。

Our servers are currently overloaded. Please try again later. 一般和 Selected model is at capacity. Please try a different model. 一起出现(#46149),意思是这个模型满载了。用 /model 换一个模型,或者等几分钟再试。

这类报告经常扎堆出现:#45949、#45965、#46161、#46248 都是 2026 年 9 月 16–17 日提交的。在 #45925 里,一位用户在同一台机器、同一个网络下测出,失败率会随登录的 ChatGPT 账号变化。如果你什么都没改、错误突然开始出现,先去 issue 里看看,再决定要不要动本地配置。

限流或请求太大:Rate limit reached / Request too large

这类文字会写明是每分钟 token 数(TPM)还是每分钟请求数(RPM)的限制。

  • Rate limit reached for ... Please try again in 13.694s(#10060)是临时的,等提示的时间就行。
  • Request too large for ... The input or output tokens must be reduced in order to run successfully. 的意思是单个请求就超过了整个每分钟限额,等多久都没用。在 #38366 里,Codex 一直在重发一个 20.8 万 token 的请求,而 TPM 限额是 20 万。开一个新会话,或者运行 /compact 把对话压缩一下。

输出被拦截:regurg plugin blocked the output stream

这条不是网络问题。完整报错是 HTTP 400,错误码 safety_violation,文字是 regurg plugin blocked the output stream.(#51937)。这句话不在 Codex 源码里,来自 OpenAI 服务器:服务端的过滤器把模型输出拦在了半路。OpenAI 没有公开说明这个过滤器,截至 2026 年 10 月 26 日,GitHub 上的相关 issue 里也没有 OpenAI 的回复。

从 2026 年 10 月初开始,Windows、macOS、Linux 上的 CLI 和桌面版都有人遇到,涉及 GPT-6.1 Sol、GPT-6 Astra 和 GPT-5.6 Sol(#52600、#54966)。各方报告一致认为它跟任务内容有关:同一个对话里重试同一个请求,通常还会被拦;换个不相关的任务就正常。也有人在新对话里同样遇到(#54818)。用户反馈有用的做法:

  • 开新对话,换一种说法提需求,或者拆成更小的步骤。
  • 用 /model 换模型;有用户从 GPT-6.1 Sol 换到 GPT-5.6 Sol 后就能继续了。

给自定义 provider 调整重试和超时

Codex 用的是你在 [model_providers.<id>] 下定义的 provider 时,可以在它的配置块里设置下面这些键。默认值来自 配置参考,高级配置 页面有示例:

键 默认值 作用
request_max_retries 4 向 provider 发 HTTP 请求的重试次数
stream_max_retries 5 流中断后的重试次数
stream_idle_timeout_ms 300000 流可以沉默多久,超过就当作连接已断

网络偶尔断连时,多重试几次有帮助;如果原因是请求太大或配置写错了,加重试没有用。

用 TeamoRouter 的 Key 跑 Codex

TeamoRouter 是一个 API 网关,一个 Key 可以调 GPT、Claude、Gemini、DeepSeek。它支持 OpenAI Responses API(/v1/responses),Codex 可以把它当作自定义 provider 接入。没有订阅,按用量付费。下面配置里的 gpt-6-sol 怎么计价、和 Astra / Luna 怎么选,见GPT-6 Sol API 价格与 Codex CLI 配置。

  1. 在 TeamoRouter 控制台 创建 API Key,Key 以 sk-teamo- 开头。
  2. 充值,最低 $5。 充值弹窗支持银行卡;也可以点 「Crypto支付」,用 USDT、USDC 或 ETH,从任意交易所 App 转账——收银台会按金额显示可用网络(BEP20 从 $5 起就能用)。步骤见 用 USDT 充值。
  3. 在 ~/.codex/config.toml 里加上 provider,最后两行可选:
toml
model_provider = "teamorouter"
model = "gpt-6-sol"

[model_providers.teamorouter]
name = "TeamoRouter"
base_url = "https://api.teamorouter.ai/v1"
env_key = "OPENAI_API_KEY"
wire_api = "responses"
stream_max_retries = 10
stream_idle_timeout_ms = 300000
  1. 在准备运行 Codex 的终端里设置 Key,并测一下链路:
bash
export OPENAI_API_KEY="sk-teamo-..."
curl https://api.teamorouter.ai/v1/models \
  -H "Authorization: Bearer $OPENAI_API_KEY"

返回模型列表,说明链路和 Key 都没问题。然后在同一个终端里启动 codex。Windows 的命令见 安装与配置 Codex。

常见问题

「stream disconnected」是网络问题吗? 有时候是。它包着很多种原因,看冒号后面的文字:os error 错误码和 error sending request 是网络问题,Rate limit reached 和 An error occurred while processing your request 就不是。

Codex 会自动重试吗? 会。Reconnecting... N/5 就是 Codex 在重试。重试用完后,它还可能从 WebSocket 退回 HTTPS,再显示错误。

退出登录再登录能解决吗? 网络或限流原因的话不能。只有问题跟着账号走时(像 #45925 报告的那样)才有关系。

为什么在「remote compact task」时也会出现? 压缩也是一次请求,会因为同样的原因失败。像 Error running remote compact task: stream disconnected before completion: ... 这样的消息,原因在第二个冒号后面。

延伸阅读

准备好接入了吗?登录控制台 · 购买额度 · 创建 API Key,三步即可开始。