跳到主要内容

AI 流式输出中断怎么办:SSE 与 WebSocket 长连接超时排查

ChatGPT、Claude、Gemini 的回答输出到一半停住,Codex 或 Claude Code 跑长任务时报 Network error,本质是 SSE 或 WebSocket 长连接被中途切断。本文解释长连接为什么比普通网页脆弱,给出五个常见断点的判断方法,以及固定节点、调策略组、排除代理缓冲的处理步骤。

发布于 约 5 分钟 · 1793 字进阶
AI 流式输出中断的长连接排查

直接答案

AI 流式输出中断,是 SSE 或 WebSocket 长连接在几十秒到几分钟的保持期内被某个环节切断,而不是连不上。五个常见断点按出现频率排序:策略组自动切换导致出口 IP 变化、节点丢包触发超时、节点或中间设备的空闲连接超时、代理层对响应做了缓冲、浏览器扩展或安全软件干预。处理顺序是把 AI 域名固定到单一节点、关闭自动切换、换丢包更低的线路,最后才排查本地软件。

AI 工具的典型故障不是「打不开」,而是「说到一半没了」:ChatGPT 的回答停在半句,Claude 页面弹出 Something went wrong,Gemini 显示 Network error,Codex 或 Claude Code 在执行到第十分钟时报 fetch failed。普通网页请求几百毫秒就结束,而 AI 回答是一条持续几十秒到几分钟的长连接,任何一个环节在这段时间内出问题,输出就会中断。本文先讲清楚这条长连接长什么样,再逐个找断点。

SSE 与 WebSocket:AI 工具的两种长连接

大多数 AI 聊天产品用 SSE(Server-Sent Events)推送回答:客户端发一个 HTTP 请求,服务端保持连接不关闭,持续以 text/event-stream 格式一小段一小段地写回内容。语音模式、实时协作和部分 CLI 工具则用 WebSocket:握手后升级为双向通道,连接持续到会话结束。

两者的共同点是「一条连接要活很久」,这带来三个脆弱点:

  • 连接期间出口 IP 不能变,变了服务端会认为是另一个客户端。
  • 中途任何一次丢包都要靠重传补上,重传超时就断。
  • 路径上的每个设备(节点、代理、防火墙)都有自己的空闲超时,谁先到期谁先切断。

ℹ️ 说明

流式中断和连接超时是两回事。连接超时是请求发出后没有响应,流式中断是响应已经开始、中途停止。前者的排查见连接超时的常见原因,本文只处理后者。

五个常见断点

断点发生位置表现判断方法处理
策略组自动切换客户端输出停止的同时客户端节点名变了看客户端日志里的节点切换记录AI 域名固定到单一节点
丢包触发重传超时线路晚高峰更频繁,输出先变慢再停mtr 看最后几跳丢包换丢包更低的线路
空闲连接超时节点或中间设备长时间思考或工具调用时断开固定在某个秒数附近断换节点,或开启 keepalive
代理层缓冲本地代理或浏览器扩展不是逐字输出而是一次性蹦出来,或干脆空白关闭扩展对比排除缓冲的软件
本地软件干预安全软件、广告拦截只在某台设备上出问题换设备或换浏览器对比加白名单

怎么看到中断发生在哪一秒

浏览器开发者工具可以直接观察 SSE。打开网页版 AI 工具,按 F12 进入 Network 面板,发送一条提问,找到类型为 eventsource 或响应头含 text/event-stream 的请求,点进 EventStream 标签页:能看到每一条事件的到达时间。输出中断时,最后一条事件的时间戳就是断点时间。

也可以在终端用 curl 模拟一条流式请求,-N 关闭缓冲,观察数据是否逐段到达。这里以一个通用的测试端点为例:

Windows PowerShell:

# -N 禁用缓冲,观察流式数据是否持续到达;替换为你要测试的流式 URL
curl.exe -N -x http://127.0.0.1:7890 -H "Accept: text/event-stream" https://example.com/stream

macOS / Linux:

curl -N -x http://127.0.0.1:7890 -H "Accept: text/event-stream" https://example.com/stream
# 同时在另一个终端观察线路丢包
sudo mtr -r -c 60 节点入口域名

如果数据在固定的秒数(例如 60 秒或 120 秒)附近停止,几乎可以确定是某一环的空闲超时;如果停止时间随机且晚高峰更多,是丢包;如果一开始就没有逐段输出,是缓冲。

处理步骤

  1. 把 AI 域名固定到一个节点。 新建一个 select 类型的策略组,手动选定一个节点,把 AI 服务相关域名的规则指向它。这一步解决的是出口 IP 变化导致的中断,也是最常见的断点。
proxy-groups:
  - name: AI
    type: select
    proxies:
      - 日本-IEPL-01

rules:
  - DOMAIN-SUFFIX,openai.com,AI
  - DOMAIN-SUFFIX,chatgpt.com,AI
  - DOMAIN-SUFFIX,anthropic.com,AI
  - DOMAIN-SUFFIX,claude.ai,AI
  - DOMAIN-SUFFIX,google.com,AI
  - DOMAIN-SUFFIX,gemini.google.com,AI
  1. 关闭自动选择与故障转移。 url-test 和 fallback 组在延迟波动时会切换节点,流式连接随之断开。白天表现正常、晚上频繁中断的,优先怀疑这一点,调整方法见晚高峰卡顿的处理。
  2. 换丢包更低的线路。 mtr 最后几跳丢包超过 2% 的节点不适合流式输出。专线节点通常是最稳的选择,丢包与延迟对 AI 工具的影响在 AI 工具网络延迟与稳定性分析里有数据对比。
  3. 处理空闲超时。 终端工具(Codex CLI、Claude Code)在等待模型思考或执行工具时,连接可能几十秒没有数据。换一个空闲超时更宽松的节点;系统代理模式下仍断开,可以试 TUN 模式,让 TCP keepalive 由系统接管。
  4. 排除本地缓冲与干预。 关闭浏览器扩展(尤其是广告拦截、隐私类)、安全软件的 HTTPS 扫描功能,用隐身窗口对比。只在某台设备上中断,问题就在这台设备上。

💡 提示

终端工具的长任务请把 HTTPS_PROXY 指向客户端端口,或者直接开 TUN,两者只选一个。同时开会让部分连接走系统代理、部分走 TUN,表现为随机断开。

不同工具的侧重点

工具常见提示最先检查
ChatGPT 网页Something went wrong、Network error策略组是否自动切换
Claude 网页 / 桌面Something went wrong、App unavailableIP 一致性,固定节点
GeminiNetwork error、地区不可用出口地区与 DNS
Codex CLI / Claude Codefetch failed、ECONNRESET、超时终端代理与空闲超时

Claude 的具体错误对照见 Claude 无法连接的排查,各工具的专题页见 AI 工具专题。

预防:为 AI 工具单独规划线路

  • 为 AI 工具单独建一个策略组、单独固定一个节点,不与下载、视频共用。
  • 优先选择标注了 AI 适配、晚高峰丢包数据公开的机场。ChatGPT 机场推荐与 AI 稳定机场的评估指标见 AI 稳定机场和 ChatGPT 机场推荐栏目。
  • 长任务前先用 mtr 看一眼当前节点的丢包,高于 2% 就换。
  • 客户端内核保持更新,旧版本对 WebSocket 与 HTTP/2 的处理可能有已修复的问题。

小结

AI 工具连接超时与 AI 工具网络异常里的大多数,其实是 SSE 或 WebSocket 长连接在保持期内被切断。按固定节点、关闭自动切换、换低丢包线路、处理空闲超时、排除本地软件的顺序处理,绝大多数中断会消失。更多 AI 访问类问题见 AI 服务访问异常栏目。

总结

  • 流式输出用的是长连接,几十秒内任何一次出口变化或丢包超时都会让它断掉
  • 最常见的断点是策略组自动切换节点,把 AI 域名固定到一个节点能解决一半问题
  • 浏览器开发者工具里的 EventStream 面板和 curl -N 可以直接看到中断发生在第几秒

常见问题

Q机场为什么有些节点不能用 AI 工具?

原因有两类:一是节点的出口 IP 被 AI 服务限制或判定为高风险,表现为打不开或反复验证;二是节点线路丢包高、不支持长时间空闲连接,表现为能打开但输出中断。前者换地区或换信誉更好的节点,后者换丢包更低、支持长连接的线路。

Q机场能用 ChatGPT 吗?

可以,前提是节点出口位于 ChatGPT 支持的地区且 IP 信誉正常。流式输出稳定还需要线路丢包低、节点不限制长连接。选择时优先看机场是否提供 AI 适配标注的节点,以及晚高峰的丢包数据。

Q机场能用 Claude 吗?

可以。Claude 对 IP 一致性要求更高,频繁切换出口会触发重新验证甚至中断会话。把 claude.ai 与 anthropic.com 固定到同一个节点,关闭自动选择,长任务用 Claude Code 时尤其要这样设置。

Q机场能用 Gemini 吗?

可以,但 Gemini 对地区的限制比较严格,部分出口地区会直接提示不可用。选择美国、日本、新加坡等支持地区的节点,并确保 DNS 走代理侧解析,避免解析到不支持的区域节点。

Q机场延迟低就一定快吗?

不一定。延迟衡量的是一次往返的时间,流式输出更在意的是丢包率和连接保持能力。一个延迟 40ms 但丢包 3% 的节点,输出中断的概率远高于延迟 120ms 但零丢包的专线节点。

参考资料与信息来源

  • MDN Web Docs:Server-sent events · EventSource 与 text/event-stream 的工作方式
  • RFC 6455:The WebSocket Protocol · WebSocket 握手、帧与关闭流程

相关 AI 工具专题