大模型流式输出:SSE 与后端转发要点
流式不是装饰:首字延迟下降后,长回答才可交互。工程上要处理好缓冲与取消。
流式输出把生成中的增量 token 陆续推给前端,常用 Server-Sent Events(SSE)或 WebSocket。Web 场景 SSE 足够简单。
链路要点
- 上游模型流 → 你的后端 → 浏览器。后端应边收边写,避免整段缓冲。
- 关闭代理缓冲(如
X-Accel-Buffering: no),并定期 flush。 - 客户端断开时取消上游请求,避免空跑计费。
// 伪代码:按 chunk 写入 ResponseWriter 并 Flush
for chunk := range upstream {
fmt.Fprintf(w, "data: %s\n\n", chunk)
flusher.Flush()
}
体验与正确性
流式过程中工具调用、JSON 结构化输出更脆弱——增量拼接要有状态机。若必须严格 JSON,可流式展示「叙述层」,最终再投递结构化结果。
小结
流式的核心是低缓冲、可取消、可观测。先保证断开即停,再优化首字耗时。