Codex 流式中断怎么排查?stream disconnected 分场景诊断
stream disconnected before completion 表示 Codex 未能正常完成这段响应流,单凭这句话不能确定是网络、账号、客户端还是模型服务出了问题。先确认用什么客户端、哪种登录方式、请求发到哪里、在哪个阶段中断,再按下文分支检查。不要一开始就反复重试、删除凭证或换服务;工具可能已经执行,新增请求也可能产生用量。
核对日期:2026-10-26。本文依据当前官方文档整理诊断步骤,未在读者环境中复现,也未执行真实 API 调用。下面的通过判据用于记录测试结果,不代表本站已修复或验证这些故障。
需要边查边记,可先下载Codex 脱敏诊断记录与支持交接模板。若程序还没启动或登录未完成,先看Codex 打不开的分阶段排查;提供方配置见Codex CLI 接入教程。本文集中处理请求连接与响应中断。
先确认:是哪一个 Codex、哪一种认证?
把以下信息填好,再修改配置。不知道的项目写“未知”,不要凭界面上的模型名推断。
| 记录项 | 需要确认的内容 | 为什么影响排查 |
|---|---|---|
| 客户端 | CLI、IDE 扩展、桌面应用或云端任务,以及版本和操作系统 | 不同入口可能读取不同配置、使用不同网络路径 |
| 认证 | ChatGPT 登录、OpenAI API Key、第三方提供方 Key,或组织管理的认证 | 会员账号、API 账户和第三方余额不能混用 |
| 请求目标 | 错误或日志里的实际 host、路径类型;删除查询参数、个人和项目标识 | 配置里写的地址不一定是当前进程实际使用的地址 |
| 失败阶段 | 连接前、首段输出前、输出途中、工具执行前后、上下文压缩时 | 同一句流断提示可能出现在不同环节 |
| 错误信息 | 脱敏后的错误类别、HTTP 状态、error.code、时间和时区 |
“流断”前后的错误信息通常比重试次数更有定位价值 |
OpenAI 官方将 ChatGPT 订阅登录与 API Key 按量使用区分开;自定义提供方还可以从指定环境变量读取自己的凭证。CLI 可运行 codex login status 查看登录状态,但自定义 provider 的配置仍需一并核对。只记录认证类别,不复制凭证或整个配置文件。官方认证文档
目标域名也要与认证结合判断:看到 api.openai.com,不自动证明配置错误;看到第三方域名,也不代表所有请求和功能都由它处理。若目标确实是本站新系统 v2.cloudmist.cloud,再去云岚API 控制台按时间和请求 ID 核对。没有日志还可能与失败发生在鉴权之前、筛选条件或显示延迟有关,不能单凭缺记录下结论。
connection failed: error sending request:先看是否拿到 HTTP 响应
这段错误表示请求发送过程失败,不能单凭它判断 Key 错误、模型下线或某一方网络故障。先记录实际目标 host、失败时间,以及可见的最内层错误;没有 HTTP 状态时写“未取得”,不要补成 401 或 429。
| 能观察到的线索 | 下一项检查 | 何时换分支 |
|---|---|---|
| DNS、TLS、连接重置或超时文字,没有 HTTP 状态 | 核对当前客户端与请求路径;在允许的网络设置内一次只改一个条件,对同一无敏感短任务作对照 | 一旦取得 HTTP 状态,按实际错误体处理 |
| 已收到 401/429 等 API 错误 | 核对所属服务、认证方式、限流或账单信息 | 转认证与限流排查,不要继续只换网络 |
| 请求开始后缺少结束事件 | 记录最后事件、工具状态及连接持续时间 | 转下方 Responses、WebSocket 或压缩分支 |
通过判据:同一客户端、认证和模型在记录的路径下完成短任务;一次成功不能证明长期网络稳定,只有网页可访问也不算该 API 路径通过。若继续失败,提交脱敏记录,不关闭证书验证或放宽组织策略。
OpenAI 官方将连接类错误与 HTTP 认证、限流、服务错误分别列出;第三方服务需结合自身日志解释。官方错误说明 上述单变量对照是本文的排查设计,不是“某条命令能修好”的厂商承诺。
四类错误应该先查哪一项?
以下是错误原文的定位片段。它们帮助选择检查方向,不是四个已经确定的根因。
| 错误片段 | 先区分的阶段 | 第一个检查动作 |
|---|---|---|
stream closed before response.completed |
响应流关闭,未观察到预期完成事件;不一定已有文本输出 | 记录最后可见事件与是否已执行工具,再核对 Responses 流完整性 |
error running remote compact task,随后 error decoding response body |
上下文压缩相关操作 | 核对失败前是否发生压缩,以及错误响应的状态和格式 |
failed to send websocket request,随后 os error 10054 |
WebSocket 连接或传输 | 记录断开发生时刻、目标 host 与代理路径,再做一次单变量网络对照 |
upstream service temporarily unavailable |
服务端或上游返回的不可用提示 | 查实际 HTTP 状态、错误代码和对应服务的状态公告 |
如果错误体已经明确是 401 认证失败或 429,先转到认证、限流与额度排查。429 可能涉及速率、预算或余额,不能统一解释为“充值即可解决”;会员使用上限也不是本站 API 余额。OpenAI 错误码说明
stream closed before response.completed:输出了一半,为什么还算失败?
stream disconnected before completion: stream closed before response.completed
Responses API 以带类型的事件传输结果,文本增量与完成事件承担不同角色。已经看到文字,不等于该响应成功结束;Chat Completions 的流式格式也不能直接替代 Responses。当前 Codex 自定义 provider 的 wire_api 使用 responses。流式响应说明、Codex 配置参考
下一项检查:
- 先看当前任务状态和文件变更,确认是否有命令、写文件或其他操作已经完成。不要把整段任务重新提交来“试一下”。
- 在能够查看协议事件的环境中,只记录事件类型、时间与结束状态,不记录文本内容。若客户端没有展示这些信息,填“未取得”,不要把最后一句文字当作完成事件。
- 自定义 API 提供方需核对是否支持当前模型的 Responses 流式接口。先完成一个无工具、无敏感输入的短请求,再单独检查流式结束;不要拿
/chat/completions的成功证明/responses完整可用。
通过判据:短请求收到预期结果,协议层显示成功完成、无错误状态,客户端也正常结束这一轮。若只能看到客户端成功提示,只能记录“客户端层通过”。一个响应完成仍不等于多轮工具任务全部完成,工具结果需要另验收。
停止重试条件:相同条件下再次缺少完成事件,或工具是否已经执行仍不清楚。保留记录,请对应服务方检查流式事件、连接超时与转发行为;不要把增加重连次数当成接口兼容性证明。
remote compact task / error decoding response body:先查压缩阶段
完整错误可能是:
error running remote compact task: stream disconnected before completion: transport error: network error: error decoding response body
这条信息把失败定位到一次压缩相关操作,但不能单凭它认定“上下文太长”或“模型不支持”。OpenAI 的 compaction 文档说明了压缩上下文的 API 机制;它不能证明某个 Codex 版本、账号或第三方服务此刻采用了哪条路径。官方 compaction 文档
下一项检查:记录失败前是否出现压缩提示、是否刚收到很长的工具输出,以及是否仅原会话失败。能查看响应元信息时,检查 HTTP 状态、内容类型与错误代码:例如返回 HTML 错误页与返回 API 错误对象,是不同线索;不要把 HTML 或业务正文整段贴进公开工单。
保存已有文件改动与必要的任务摘要后,可在新会话做一个不含工具的短任务对照。保持客户端、认证和提供方不变,只比较会话;没有必要为了复现故意塞满上下文。
通过判据:若新会话成功,只能说明短任务路径可用,不能写成原压缩问题已解决。原问题恢复还需要观察原场景中的压缩完成、后续请求成功与任务状态连续性;未观察到就记“压缩未复测”。
停止重试条件:原会话每次都在同一压缩阶段失败,或已经返回认证、额度、格式不兼容等明确错误。不要无限重放整段历史,也不要按网上旧帖直接关闭压缩或修改不明功能开关。向当前认证或 API 所属服务提交脱敏记录。
WebSocket 10054:连接重置不等于已经找到责任方
对应错误可能是:
stream disconnected before completion: failed to send websocket request: io error: 远程主机强迫关闭了一个现有的连接。 (os error 10054)
Microsoft 将 Windows 的 10054 定义为连接被对端重置。这个代码本身不能告诉你,是应用服务、网关还是连接路径中的其他环节造成了中断。Microsoft Winsock 错误码
下一项检查:先记录它发生在连接建立时、已有输出后,还是空闲了一段时间后。核对实际 host、网络类型以及是否经过代理;在你有权使用的网络设置内,一次只改变一个因素,对同一个无敏感内容的短任务做对照。不要同时换账号、模型、网络和客户端,否则无法判断哪项变化有关。
如果同机 CLI 正常而桌面或 IDE 失败,继续核对两端版本、认证与代理设置,不直接判定某一端存在通用 bug。自定义 provider 还需确认其 Responses WebSocket 支持情况;配置中的 supports_websockets 描述支持能力,不会使本来不支持的服务自动具备该能力。Codex 配置参考
通过判据:同一测试任务在已记录的路径下连接、接收结果并正常结束。一次成功只能记为一次成功;若问题原本发生在长时间空闲后,短请求通过还没有覆盖原场景。
停止重试条件:受控对照后仍重复重置,或进一步测试需要关闭安全软件、跳过证书验证、绕过组织网络策略。此时应把脱敏记录交给网络管理员或对应服务方,不继续放宽安全设置。
upstream service temporarily unavailable:先核对状态,再决定是否重试
stream disconnected before completion: upstream service temporarily unavailable
这句话说明调用链报告了上游不可用,但“上游”是谁要结合请求目标与服务日志确认。不能只凭文案就断定 OpenAI 全站宕机,也不能直接证明你的 Key 或余额有问题。
下一项检查:查看实际状态码、error.code、Retry-After 与请求时间。若请求属于 OpenAI,检查官方状态页及历史事件对应时间和组件;第三方服务则同时核对其公告与日志。状态页是汇总信息,绿色也不能排除某个用户、模型或功能的问题。
OpenAI 对其 API 的暂时性服务错误提供等待与重试建议;例如模型过载时,应遵守返回的等待提示。其他服务的代码含义需要看各自文档,不能只根据英文短句照搬。OpenAI 错误码说明
通过判据:等待后,同一服务和模型的短任务正常完成,且原错误不再出现;随后再检查原任务是否适合继续。换一个模型成功,只能说明另一路径可用,不能认定原模型已恢复。
停止重试条件:状态公告仍显示相关故障;等待后错误持续出现;错误体实际指向认证、预算或不支持的接口;或已有任务的执行状态不明。不要让多个客户端同时反复重发。
要不要直接调大重试次数和超时?
先记录现有值和故障证据,再考虑调整。当前官方配置分别列出 request_max_retries、stream_max_retries 和 stream_idle_timeout_ms;其中流重试与空闲超时的说明针对 SSE,不能无条件套到所有 WebSocket、桌面端或云端故障。Codex 配置参考
只有证据指向可恢复的短暂断开或空闲超时,且当前客户端和 provider 确实读取该设置时,才按对应版本文档修改一个参数并复测。本文不提供“一律增大到某个值”的修复配方。认证、额度、缺失端点和格式不兼容,不会因为等待更久而自动修好。
本文建议的停止规则是:原因没有变化、重复一次受控对照仍失败,就先整理记录,而不是继续扩大重试。 这是排查建议,不是厂商规定的固定次数。
怎样确认恢复,而不是只看到一次回复?
按顺序记录下面三个层级,不能跳级写“全部正常”。涉及调用的检查可能产生用量,应使用自己的测试预算。
| 验证层级 | 要观察的结果 | 尚不能证明什么 |
|---|---|---|
| 1. 短请求 | 目标 host、认证、模型与协议一致,返回预期结果 | 长流、工具调用、压缩和长期稳定性 |
| 2. 完整响应流 | 能观察到成功结束;未暴露事件时记录客户端完成状态与信息缺口 | 多轮工具任务全部完成 |
| 3. 小型工具任务 | 在测试目录中读取一个无敏感文件、执行一个可核对的小任务,检查输出、文件差异与工具结果 | 其他模型、不同网络和更长任务同样正常 |
测试失败也要保留。比较不同客户端时,一次只改一个条件;接入设置见Codex 配置教程,协议与路径见Base URL 对照。
给技术支持哪些信息,才便于继续查?
使用诊断记录模板,提交客户端版本、认证类别、脱敏 host/路径类型、时间与时区、错误类别、已做对照和结果。请求 ID 只交给对应服务的授权支持渠道;公开讨论时用占位值替换。
不要发送 Key、Cookie、Authorization 头、auth.json、登录验证码、完整环境变量或业务输入输出。官方认证文档也明确要求把 auth.json 当作密码保护,不粘贴到工单或聊天。凭证保护说明
ChatGPT 登录问题优先通过对应产品的帮助入口联系官方支持。请求确实指向云岚API 新站的已有用户,可先查控制台,再将脱敏记录交给本站客服支持。更换中转服务不是这些错误的统一解决办法,排障也不需要先重新注册。
常见问题
网页能打开、ChatGPT 能聊天,能证明 Codex 网络正常吗?
不能。网页、模型请求和长连接可能走不同路径。记录真正失败的 host、客户端和阶段,比单独测试首页更有针对性。
新开会话成功,说明旧会话太长吗?
只能说明当前短任务成功。它为会话相关问题提供线索,但没有排除压缩、客户端状态、输入或间歇服务错误;应继续按压缩分支记录。
没有完整协议日志,还能求助吗?
可以。模板允许填“未取得”。保留脱敏错误类别、发生时间、版本和你能观察到的阶段,不为凑齐表格去复制凭证或整段业务内容。
为什么没有直接给“换 Key、关代理、加重试”的统一命令?
这些动作针对不同原因,还可能改变原有环境。先确定分支,再做一次有记录的改变,才能知道是否有效并保留回退依据。
