生产环境中的流式 AI 应用:没人警告过你的那些坑
第一个出问题的迹象:你的测试环境流式传输完美,但在生产环境中,每个用户都会看到一个空白屏幕,接着整个响应一次性出现。你检查了 LLM 提供商 —— 没问题。你检查了后端 —— 没问题。服务器正在流式传输 Token,但它们就是没能到达浏览器。
90% 的情况下,罪魁祸首是:NGINX 正在缓冲你的响应。
这是最常见的流式传输故障模式,而且除非你知道要去寻找它,否则它完全是不可见的。它还反映了生产环境流式传输中更广泛的问题:问题通常不在 LLM 集成上,而在于模型和用户之间的所有基础设施中。
TTFT 是你用户唯一能真实感知到的指标
在深入探讨故障模式之前,值得明确你正在优化的目标。对于面向用户的应用,LLM 推理有 两个关键的延迟指标:
TTFT (Time to First Token,首个 Token 响应时间):从用户提交提示词到 UI 中出现第一个 Token 所经过的时间。这包括请求排队、提示词预填充处理和网络往返。它是主要的感知延迟指标。
TPOT (Time Per Output Token,单个 Token 输出时间):相邻 Token 之间的平均时间 —— 即流的“阅读速度”。
用户感知到的流式响应速度比总延迟相同的缓冲响应速度快约 40%。这种效果几乎完全来自 TTFT。看到第一个 Token 在约 300ms 内到达,标志着系统的活跃性,并瓦解了等待的心理负担。此后,只要 Token 以稳定的速度到达(即使速度适中),感知的响应性就会保持在高水平。
一致性比纯粹的速度更重要。以每秒 20 个 Token 的稳定速度交付的流,其体验优于爆发 100 个 Token、停顿两秒后再爆发的流。当你看到尽管总延迟可以接受,但用户仍抱怨“AI 感觉很慢”时,请查看 TPOT 方差,而不是 TPOT 平均值。
不同用例的目标阈值:
- 交互式聊天机器人:TTFT 低于 500ms
- 代码补全 / IDE 工具:TTFT 低于 100ms
- 长文本生成:如果 Token 流保持顺畅,高达约 3 秒的 TTFT 是可以忍受的
- P95 告警阈值:面向用户的应用为 1-2 秒
重要的权衡:最小化 TTFT 需要在推理层使用更小的批大小(batch sizes),这会降低 GPU 吞吐量。对于面向用户的流量,优先优化 TTFT 并接受吞吐量损失。
