← 术语图鉴

流式输出

Streaming · 也叫 SSE / 逐字输出 / 打字机效果 / Server-Sent Events

服务器一边生成、一边把已经生成的部分推给页面,而不是等全部写完再一次性返回。

你可能会说:

  • “为什么 ChatGPT 的回答是一个字一个字冒出来的?”
  • “我接的 AI 接口要等十几秒才一次性返回,能不能边生成边显示?”

它是什么

大模型写回答是一个词一个词生成的,完整的一段往往要十几秒。流式输出把每一小段都立刻推给页面,用户在一两秒、最多几秒内就能看到第一个字。

网页上常用的实现是 SSE(Server-Sent Events):服务器保持连接不断开,每生成一段就发一条事件。页面收到一条,就往回答里追加一段。

流式不会让总耗时变短,它改变的是等待的感受。另外要处理好几种情况:中途出错怎么显示、用户点"停止"之后服务器是否真的停下、网络断开怎么办。

打个比方

像餐厅上菜:一桌菜全做好再一起端,客人要干等半小时;做好一道上一道,客人从第一道菜起就开始吃了。

在这个网站里

兄弟项目 E2E Review 的 AI 导师用 SSE 推送回答,事件分为文字、工具调用、完成和出错四种。第一版名义上是流式,却要等 17 秒一次性到达,因为 SDK 的增量输出选项默认是关的(第 17 课)。

容易搞混的地方

常见误解

用了 SSE 就是流式输出了

正确理解

传输方式只是管道。上游如果只在最后吐出完整的一条消息,管道里也就只有这一条。

你可以这样告诉 AI

复制下面这段,贴给你的 AI

这个 AI 功能是流式输出吗?请实测首字时间、总耗时和分片数;再说明中途出错时页面显示什么、用户点停止后服务器上的模型调用会不会真的停下。

先知道

  • 接口——程序和程序之间约定好的说话方式:往哪个地址、用什么格式问,对方就按什么格式答。

接着看

  • 延迟与首字时间——从用户发出请求,到看到第一个字(首字时间)和看到完整结果(总耗时),分别要等多久。

在这些课里出现

相关的真实事故