流式输出是怎么回事
SSE、chunk、首字延迟——讲清流式的原理,以及为什么它容易断,断了怎么处理。
工具更新 2026-10-28· 真机验证 2026-10-28 by 码农阿风
原理
流式用的是 SSE(Server-Sent Events):服务器不一次性返回完整结果,而是边生成边推送。
data: {"delta":{"content":"你"}}
data: {"delta":{"content":"好"}}
data: [DONE]
为什么容易断
流式是长连接,中间任何一层超时都会断:
你的客户端 → 代理 → 中转站网关 → 上游
↑ ↑ ↑
都可能超时 都可能超时 都可能超时
常见的网关空闲超时是 60 秒。长时间没有新 token 推送,连接就被掐了。
断了怎么办
- 客户端实现重连
- 记录已收到的部分,从断点继续
- 关键任务加非流式兜底
自己搭中转的话
proxy_buffering off;
proxy_read_timeout 300s;
关掉缓冲,否则 nginx 会攒够一批才发,流式变批式。
什么时候别用流式
- 短回答(收益小)
- 需要严格 JSON 输出(流式解析麻烦)
- 网络不稳定