@durable-streams/aisdk-transport

中文文档
0.0.8发布于 2026/09/11Apache-2.0TypeScriptESM + CJS构建来源已验证近 30 天下载 5.3万

Vercel AI SDK 持久流运输适配器

中文使用文档
文档目录15 节
  1. 目标
  2. 0) 起点(无持久性流)
  3. 1) 基本可持续流程一体化
  4. 客户端
  5. 服务器
  6. 2)优化布局:可续生的世代
  7. A. 坚持每次聊天的活性流 id
  8. B. 增加再连接终点
  9. C. 启用 resume 打开 useChat
  10. API 参考
  11. createDurableChatTransport({ api, reconnectApi?, headers?, …
  12. toDurableStreamResponse({ source, ...options })
  13. 反应合同
  14. mode: "immediate"
  15. mode: "await"

@可持久流/自动调车

用于持久流的Vercel AI SDK运输适配器.

目标

使用 AI SDK 的持久流 useChat 这样,几代人可以活下来 新鲜和重新连接干净.

本指南从:

  1. 无集成( 定期 AI SDK 聊天)
  2. 基本可持续流程一体化
  3. 优化再生代(推荐)

0) 起点(无持久性流)

客户端 :

import { useChat } from "@ai-sdk/react"
import { DefaultChatTransport } from "ai"

const transport = new DefaultChatTransport({ api: "/api/chat" })
const chat = useChat({ transport })

服务器 :

return result.toUIMessageStreamResponse()

这有效,但是在一代人中刷新可能会失去飞行中流.

1) 基本可持续流程一体化

客户端

交换到 createDurableChatTransport数字 :

import { useChat } from "@ai-sdk/react"
import { createDurableChatTransport } from "@durable-streams/aisdk-transport"

const transport = createDurableChatTransport({ api: "/api/chat" })
const chat = useChat({ transport })

服务器

将您的 UI 消息流包入 toDurableStreamResponse数字 :

import { toDurableStreamResponse } from "@durable-streams/aisdk-transport"

return toDurableStreamResponse({
  source: result.toUIMessageStream(),
  stream: {
    writeUrl: buildWriteStreamUrl(streamPath),
    readUrl: buildReadProxyUrl(request, streamPath),
    headers: DURABLE_STREAMS_WRITE_HEADERS,
  },
})

此时您可以得到耐用写作 + 耐用读取, 但尚未在刷新后自动恢复 .

2)优化布局:可续生的世代

这是推荐的生产流量.

A. 坚持每次聊天的活性流 id

当一代开始, 保存 activeStreamId = streamPath。 。 。 . 完成后, 请保存最后信件并清除 activeStreamId。 。 。 .

await saveChat({ id, activeStreamId: streamPath })

return toDurableStreamResponse({
  source: result.toUIMessageStream({
    originalMessages: messages,
    onFinish: ({ messages: finalMessages }) => {
      void saveChat({ id, messages: finalMessages, activeStreamId: null })
    },
  }),
  stream: { writeUrl, readUrl, headers },
})

B. 增加再连接终点

执行 GET /api/chat/:id/stream数字 :

  • 返回时 204 当没有活跃的一代.
  • 返回时 200 与 Location 财务报告和审定财务报表 { streamUrl } 当有一个.
if (!chat.activeStreamId) return new Response(null, { status: 204 })

const streamUrl = buildReadProxyUrl(request, chat.activeStreamId)
return Response.json(
  { streamUrl },
  { status: 200, headers: { Location: streamUrl } }
)

C. 启用 resume 打开 useChat

const transport = createDurableChatTransport({ api: "/api/chat" })
const chat = useChat({ id, transport, resume: true })

在页面加载时, AI SDK 将调用 reconnectToStream 自动。 此传送解决了流 URL Location 第一个(或 { streamUrl } fallback),再与耐用流相接.

API 参考

createDurableChatTransport({ api, reconnectApi?, headers?, fetchClient? })

创建 AI SDK ChatTransport 即:

  1. POSTs 消息给 api
  2. 决定从 :
    • Location 页眉( 首选)
    • JSON 躯体 { streamUrl } 倒计时
  3. 将持久流读取为 JSON+SSE 并返回 ReadableStream<UIMessageChunk>
  4. 支持通过 GET reconnectApi (或默认) ${api}/${chatId}/stream(中文(简体) )

toDurableStreamResponse({ source, ...options })

将 AI SDK UI 信件块写入可持久流并返回指针响应 .

选项 :

  • source: 要求的AI SDK UI 消息块的可同步
  • stream.writeUrl: 需要持久写入 URL
  • stream.readUrl: 客户端接触的可选 URL(Location + JSON 体积)
  • stream.headers: 可选写头
  • mode数字 :
    • immediate (默认) : 溪流准备完毕后返回
    • await: 生成/写入完成后返回
  • waitUntil: 可选的运行时间 恒活钩(在工人运行时间中有用)

反应合同

mode: "immediate"

初始响应只返回流位置元数据, 不生成内容 :

  • Location: <read-url>
  • { "streamUrl": "<read-url>" }

客户端然后连接到该读取的 URL 以消耗生成的块, 而生成则在背景中继续 . 使用 waitUntil 当你的运行时间需要 一个明确的 恒活信号,所以工人 保持生命,直到 溪流工作完成.

  • 状态 : 201
  • 页眉 : Location: <read-url>
  • 车身 : { "streamUrl": "<read-url>" }

mode: "await"

仍然立即发送信头, 所以客户端可以读取 Location 并提前开始消耗流,但HTTP连接保持开口,直到生成/写入完成. 这对于只允许长期工作的运行时间是有用的,而同时有入境请求仍在活动.

  • 状态 : 200
  • 页眉 : Location: <read-url>
  • 车身 : { "streamUrl": "<read-url>", "finalOffset": "<offset>" }

版本与发布记录

@durable-streams/aisdk-transport 共发布 8 个版本,首次发布于 2026/03/24;过去 12 个月发布了 8 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.0.8latest2026/09/112 个月前
0.0.72026/06/015 个月前
0.0.62026/05/285 个月前
0.0.52026/05/205 个月前
0.0.42026/05/195 个月前
0.0.32026/04/137 个月前

关于 @durable-streams/aisdk-transport 的常见问题

@durable-streams/aisdk-transport 是什么?

Vercel AI SDK 持久流运输适配器

如何安装 @durable-streams/aisdk-transport?

在项目目录运行 npm install @durable-streams/aisdk-transport,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:ai(^6.0.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。它还提供命令行工具 intent,可以用 npx intent 直接运行。

@durable-streams/aisdk-transport 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@durable-streams/aisdk-transport 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@durable-streams/aisdk-transport 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=18.0.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@durable-streams/aisdk-transport 可以商用吗?

@durable-streams/aisdk-transport 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@durable-streams/aisdk-transport 的下载量有多少?

根据 npm 官方下载统计,@durable-streams/aisdk-transport 在 2026/10/13 – 2026/11/11 这 30 天内被下载 53,038 次,日均约 1,768 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@durable-streams/aisdk-transport 还在维护吗?

最新版本 0.0.8 发布于 2026/09/11(2 个月前);至今共发布 8 个版本,其中过去 12 个月发布了 8 个;首次发布于 2026/03/24。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。