你可能会说:
- “为什么 ChatGPT 的回答是一个字一个字冒出来的?”
- “我接的 AI 接口要等十几秒才一次性返回,能不能边生成边显示?”
它是什么
大模型写回答是一个词一个词生成的,完整的一段往往要十几秒。流式输出把每一小段都立刻推给页面,用户在一两秒、最多几秒内就能看到第一个字。
网页上常用的实现是 SSE(Server-Sent Events):服务器保持连接不断开,每生成一段就发一条事件。页面收到一条,就往回答里追加一段。
流式不会让总耗时变短,它改变的是等待的感受。另外要处理好几种情况:中途出错怎么显示、用户点"停止"之后服务器是否真的停下、网络断开怎么办。
打个比方
像餐厅上菜:一桌菜全做好再一起端,客人要干等半小时;做好一道上一道,客人从第一道菜起就开始吃了。
在这个网站里
兄弟项目 E2E Review 的 AI 导师用 SSE 推送回答,事件分为文字、工具调用、完成和出错四种。第一版名义上是流式,却要等 17 秒一次性到达,因为 SDK 的增量输出选项默认是关的(第 17 课)。
容易搞混的地方
常见误解
用了 SSE 就是流式输出了
正确理解
传输方式只是管道。上游如果只在最后吐出完整的一条消息,管道里也就只有这一条。
你可以这样告诉 AI
复制下面这段,贴给你的 AI
这个 AI 功能是流式输出吗?请实测首字时间、总耗时和分片数;再说明中途出错时页面显示什么、用户点停止后服务器上的模型调用会不会真的停下。
接下来去哪
先知道
- 接口——程序和程序之间约定好的说话方式:往哪个地址、用什么格式问,对方就按什么格式答。
接着看
- 延迟与首字时间——从用户发出请求,到看到第一个字(首字时间)和看到完整结果(总耗时),分别要等多久。
在这些课里出现
相关的真实事故