流(Stream)是短暂的 — 一旦数据流过就消失了。这导致两个核心问题:
- 无法恢复: 如果连接断开,已发送的流数据无法重新获取
- 状态丢失: 客户端无法从中断点继续接收数据
Resume Stream 解决方案
Vercel AI SDK 提供了流恢复机制,允许在连接中断后从中断点继续流式传输。
核心原理
Client Server
| |
|---- 1. 请求流数据 -------->|
|<--- 2. 流式响应 (chunk 1-5) |
| [连接中断] |
| |
|---- 3. 重连请求 --------->|
| (携带 last seen ID) |
|<--- 4. 从 chunk 6 继续 ----|
实现要点
- 消息 ID: 每个 chunk 都有唯一标识
- 客户端存储: 记录最后接收的消息 ID
- 服务端缓存: 保留最近的流数据用于重传
- 重连协商: 重连时告知服务端从何处恢复
代码示例
import { streamText } from "ai"
const result = streamText({
model: openai("gpt-4o"),
prompt: "Hello",
// 启用恢复功能
experimental_resume: {
// 上次接收的最后消息 ID
lastMessageId: previousLastMessageId,
},
})优势
- 可靠性: 网络抖动不会导致数据丢失
- 用户体验: 长文本生成不会因为断网而失败
- 资源节约: 无需重新生成已完成的内容
来源: Vercel AI SDK 文档