docai.cc

流式输出是怎么回事

SSE、chunk、首字延迟——讲清流式的原理,以及为什么它容易断,断了怎么处理。

工具更新 2026-10-28· 真机验证 2026-10-28 by 码农阿风

原理

流式用的是 SSE(Server-Sent Events):服务器不一次性返回完整结果,而是边生成边推送。

data: {"delta":{"content":"你"}}
data: {"delta":{"content":"好"}}
data: [DONE]

为什么容易断

流式是长连接,中间任何一层超时都会断:

你的客户端 → 代理 → 中转站网关 → 上游
    ↑           ↑         ↑
  都可能超时   都可能超时  都可能超时

常见的网关空闲超时是 60 秒。长时间没有新 token 推送,连接就被掐了。

断了怎么办

  1. 客户端实现重连
  2. 记录已收到的部分,从断点继续
  3. 关键任务加非流式兜底

自己搭中转的话

proxy_buffering off;
proxy_read_timeout 300s;

关掉缓冲,否则 nginx 会攒够一批才发,流式变批式。

什么时候别用流式

  • 短回答(收益小)
  • 需要严格 JSON 输出(流式解析麻烦)
  • 网络不稳定