前端知库

AI 流式响应为什么不能每收到一块就 JSON.parse?

参考答案

网络读取的 chunk 是字节分块,不保证对应一个字符、一条 SSE 事件或一个完整 JSON。一个消息可能跨多个块,一块也可能包含多个事件。需要按字符编码和协议边界增量解析,不能把 reader.read 的每个 value 直接当成完整消息。

AI SDK 区分纯文本流与包含多种事件的数据流。当前 UI 数据流采用 SSE 格式,文本还有开始、增量和结束等事件;工具调用、来源与错误也需要按各自类型处理。使用 HTTP 流并不意味着所有服务商的事件格式可以互换。

工程上应优先使用与服务端版本匹配的 SDK 或成熟解析器,并为截断、异常结束和未知事件设计行为。SSE 格式本身也不等于业务已经实现自动续传:恢复位置、消息去重及服务器保留状态需要额外设计。