136、流式输出与 SSE:让用户看到逐字生成的技术实现与 UX 最佳实践
136、流式输出与 SSE:让用户看到逐字生成的技术实现与 UX 最佳实践一次深夜的线上事故凌晨两点,我被值班监控的告警电话吵醒。用户反馈我们的AI对话助手“打字”太慢了——每次提问后要等十几秒才看到完整回复,然后瞬间弹出一大段文字。用户说:“感觉像在跟一个反应迟钝的机器人聊天,体验极差。”我登录服务器看了一眼日志,发现后端调用大模型API时,用的是最原始的response.text——等模型把整段话生成完,再一次性返回给前端。这个设计在测试环境没问题,因为测试数据短,但线上用户输入复杂问题时,模型生成时间动辄十几秒,用户只能盯着空白屏幕干等。那天晚上我改了三处代码:后端改成流式输出,前端对接EventSource,中间加了个心跳保活。改完测试,文字逐字出现在屏幕上,用户体验瞬间从“卡顿”变成“丝滑”。这个教训让我意识到:流式输出不是锦上添花,而是AI应用的及格线。流式输出的本质:别等,边生成边发传统HTTP请求是“请求-响应”模式:客户端发一个请求,服务器处理完所有逻辑,把完整结果打包返回。这在普通API调用中没问题,但大模型生成文本是渐进式的——模型每预测一个token,就产生一个中间结果。如果等所有token生成完再返回,用户等待时间就是模型推理时间,这在长文本场景下不可接受。流式输出的核心思路是:服务器把生成过程拆成多个小块,每生成一块就立刻推送给客户端。客户端收到后立即渲染,用户看到的就是文字逐字出现