用户对速度的感受,往往不是由总耗时决定的。同样要等十秒,一个是白屏十秒后突然全出,一个是第一秒就有字、慢慢往外冒,后者的体验要好得多。这就是流式的价值。
首字延迟比总时长更关键
流式输出里有两个指标值得分开看:首字延迟和总时长。首字延迟决定“快不快”的体感,总时长决定“多久能读完”。很多时候优化首字延迟更有价值——把前置的检索、鉴权、模板渲染尽量并行,让模型尽早开始出第一个字。工程上还要注意几件事:分流输出时的分块策略要合理,太碎会增加网络开销,太大会让输出一顿一顿;中间不要有缓冲层把数据攒起来再发;网关和负载均衡必须支持长连接透传,否则流式会在某一跳被“拍平”成全量响应。
中断、续写与超时
流式一旦铺开,还要处理一批新问题。用户中途关掉页面,后端应当及时感知并释放推理资源,否则算力会白白烧掉;网络抖动导致连接断开,要不要支持从断点继续;长时间没有任何新内容的“静默”状态,需要有心跳机制避免连接被中间设备掐断;超时该按总时长算还是按无输出时长算,也需要明确。这些细节处理好了,流式才不是“看起来很美”。
流式响应本身不提升模型能力,但它直接决定了用户愿不愿意等。在体验这件事上,感知的速度和真实的速度同样重要。