AI 回答为什么能一个字一个字显示?

先理解原理和示例,再练习完整口述与追问。

通常是服务端把生成结果增量传给客户端,前端逐步合并并渲染;一次传输可能包含多个 token,也可能拆在任意位置。它和前端拿完整文本再播放打字动画不是同一机制。

流式回答由服务器持续发送增量事件,前端读取后逐步更新消息。一次网络 chunk 不是一个字、token 或完整 JSON;UTF-8 多字节字符和事件分隔符都可能跨 chunk。渲染频率也不必等于接收频率,可以短暂缓冲后按帧或时间片批量写 UI,兼顾及时性与主线程成本。

处理链路为字节流 → 增量解码 → 协议事件分帧 → 解析事件 → 更新当前 generation 的消息 → 调度渲染。若一次收到多个 delta,应逐个处理;若只收到半个事件,保留到下一次。只有协议明确的完成事件或合法结束条件才转 completed。

不能把 HTTP 连接断开直接等同于回答成功结束。逐字动画可能只是收到整段后做的视觉效果,面试时应区分真实网络流与本地打字机。

真实流式生成是服务端在内容未全部完成时就逐批把增量发给前端,前端解码并合并到对应消息,因此用户能提前看到部分内容。token、网络块和页面字符不是一一对应关系,一次可能来多个词,也可能拆在任意字节处。打字动画则可以在完整响应到达后再逐字展示,只改善视觉,不能降低用户等待第一批内容的真实时间。

面试官可能继续问追问与完整解答展开收起

真正流式与打字动画如何区分?为什么服务端在流式发送,页面仍然等到最后才显示?

看网络中响应是否在完成前持续到达,以及前端收到第一批内容的时间;完整响应后播放动画不是真流式。若后端在输出但浏览器末尾才收到,检查代理/CDN 缓冲、压缩与刷新、客户端是否用了 response.json()/text() 等完整消费方式,以及前端是否等结束才更新状态。