标准回答
一、实现机制
LLM 本身就是自回归逐 token 生成的。流式输出指服务端每解码出一个或一小段 token 就立即推送给客户端,而不是等整段生成完再一次性返回。
二、传输方式
最常用 SSE:服务端保持长连接,以 text/event-stream 持续下发数据块,客户端边收边渲染(OpenAI/Anthropic 等 API 的 stream 模式即如此)。也可用 WebSocket 或 HTTP chunked transfer。推理框架如 vLLM(参考 LLM 部署实践)原生支持流式。
三、好处
- 降低首字延迟(TTFT):用户在第一个 token 生成后就能看到内容,无需等待全部生成。
- 体验更好:长回答边生成边显示,感知更快、可随时中断。
- 资源更友好:客户端可尽早处理/展示,长连接下不必缓冲整段响应。
四、代价
客户端需逐块拼接与渲染,结构化输出(如 JSON)解析更麻烦,要处理连接中断、超时与错误事件,比一次性返回复杂。
常见误区
⚠️ 常见踩坑
误区一:容易答偏的地方:流式只降低「首字延迟」和体验,并不减少总生成时间或总 token 成本;也别在需要完整 JSON 才能动作的场景天真地边流边解析,应等结构完整或用容错增量解析。
追问
追问 1:TTFT 和 TPOT 分别指什么?
追问 2:流式输出下如何做内容安全/护栏校验?
可边流边用轻量规则做敏感词增量过滤;对需要整体判断的校验(如结构、事实),先缓冲或在结束事件触发,必要时撤回/覆盖已展示内容,或采用先生成后审再放行的折中。
追问 3:SSE 相比 WebSocket 为何在 LLM 场景更常用?
SSE 是单向服务端到客户端推送,基于普通 HTTP,实现简单、自动重连、易过代理与负载均衡,正好契合「服务端持续吐 token」的单向需求;WebSocket 适合需要双向实时交互的场景。
🔗 相似问题
同一考点的不同问法,换着练更稳
延伸学习
按主题分类的相关资源,便于系统复习
