流式输出中断:看结束原因,而不是猜网络
流式中断先看用量日志的结束原因:client_gone 是客户端断开,upstream_timeout / upstream_interrupted / upstream_unreachable 是上游或链路问题。
更新于 2026-11-14 · SageLib 团队 · 标签:stream、sse、timeout
结论要点
- client_gone 大概率是你的客户端读超时太短
- 已产生的用量正常计费,完全没产生用量则不计费
- 长文本任务把客户端读超时调大,比换模型更有效
流式(SSE)输出中途停止时,先区分「谁断的」。
到用量日志看 end_reason
| 结束原因 | 含义 | 处理 |
|---|---|---|
client_gone |
客户端主动断开(取消、读超时退出) | 调大客户端读超时 |
upstream_timeout |
上游超时 | 稍后重试 |
upstream_interrupted |
上游断流 | 稍后重试 |
upstream_unreachable |
连不上上游 | 稍后重试 |
只有 client_gone 是「你这边」的问题,其余三种重试通常能过。
客户端侧的两个常见设置
- 读超时:很多 HTTP 客户端默认 60 秒,长回答会被自己掐断;
- 流式开关:非流式请求更不容易被读超时打断,但首字延迟更高。
计费口径(用户可见部分)
已产生的用量正常计费,完全没产生用量则不计费。
什么时候该联系客服
同一模型连续多次出现 upstream_timeout / upstream_interrupted,
把请求时间、模型标识、结束原因一起发给客服,定位会快很多。
相关:流式输出中断(帮助中心)。
参考来源
常见问题
为什么只有在长回答时才断?
通常是客户端读超时(如 60s)比生成时间短,长回答还没生成完连接就被自己关掉了,日志记为 client_gone。
断了会重复扣费吗?
不会重复。已产生的用量按实际计费,未产生的部分不计费。