
昨天半夜被运维电话吵醒,说知识库问答系统响应太慢,用户点完问题要等十几秒才看到答案。我第一反应是“不可能啊,LLM推理再慢也不至于这样”,结果一查日志——好家伙,后端是把整个回答生成完才一次性返回给前端的。用户看到的是白屏十几秒,然后突然蹦出一大段文字。这体验,换我我也骂。流式输出(Streaming Output)不是锦上添花,是知识库问答系统的及格线。用户等的是第一个字,不是最后一个字。流式输出的本质:别让用户干等传统HTTP请求-响应模式是“你问完,我算完,再给你”。LLM生成回答需要时间,尤其当知识库检索结果多、上下文长的时候,生成几百个token可能要好几秒。用户盯着空白页面,心里想的不是“模型在思考”,而是“系统崩了”。流式输出的做法是:模型每生成一个token,就立刻推送给前端。用户看到的是文字逐字出现,就像有人在打字。心理学上这叫“感知延迟降低”——虽然总耗时没变,但用户觉得快。实现流式输出,后端需要解决三个问题:模型推理的流式生成、HTTP响应的分块传输、前端的事件流接收。任何一个环节断了,流就断了。后端核心:从同步调用到异步生成大多数LLM框架都支持流式输出,但默认是关闭的。以LangChain为例,普通调用是:# 别这样写——这是阻塞式,等全部生成完才返回result=llm