[控场AI]
· 4 分钟阅读· 2,308 字

@ai-sdk/vue 4.0.138 发布:两大 useObject 修复

@ai-sdk/vue 4.0.138 发布:两大 useObject 修复

@ai-sdk/vue 4.0.138 修复 useObject 的取消时机与 Headers 实例传参丢失问题。

@ai-sdk/vue 4.0.138 是一个补丁版本,没有新增特性,集中修复了 Vue 适配包中 useObject 组合式函数的两处实际问题。其一,当一次提交在请求真正发出前被停止时,取消逻辑未能生效,可能导致用户以为已取消但请求仍被发出;修复后这类提交会被正确取消。其二,当开发者以标准 Headers 实例而非普通对象传入请求头时,认证或自定义头会被静默丢弃;修复后两种形式均可正确透传。此外版本同步升级了 [email protected]、@ai-sdk/[email protected] 等底层依赖,保持各子包版本对齐。文章建议使用 useObject 实现流式对象生成的项目升级,尤其涉及提前取消或使用 Headers 实例的场景,属于低风险、值得执行的补丁更新。

Vercel 旗下 AI SDK 的 Vue 适配包 @ai-sdk/vue 发布了 4.0.138 版本。这是一个典型的补丁(patch)版本,没有引入新特性,而是集中修复了 useObject 组合式函数中的两个实际使用问题。对于正在用 Vue 构建流式 AI 交互界面的开发者来说,这两处修复直接关系到请求能否被正确取消、以及自定义请求头能否顺利透传。

rss source: @ai-sdk/vue@4.0.138

useObject 的两处关键修复

修复一:请求尚未开始时的取消失效

第一个问题(commit 7ff6a15)针对的是 useObject 提交的取消时机。原文描述为「cancel useObject submissions stopped before their request starts」,即当一次提交在请求真正发出之前就被停止时,取消逻辑没有正确生效。

这类问题的典型场景是用户快速操作:点击生成后又立即中止,或者组件在请求发出前就卸载了。此时如果取消没有被正确处理,可能会出现请求仍然被发出的情况——用户以为自己已经取消了,但后台依旧在消耗资源。修复后,这类「请求开始前就停止」的提交会被真正取消,行为与用户的预期一致。

修复二:Headers 实例形式的请求头丢失

第二个问题(commit 1b5fd20)是「preserve headers supplied as a Headers instance in useObject requests」,即当开发者传入的是标准 Headers 实例(而非普通对象)时,这些请求头在 useObject 请求中会丢失。

Headers 实例和普通对象在 JavaScript 中都是常见的传参形式,但两者的处理方式不同。如果 SDK 内部只按对象方式读取请求头,Headers 实例携带的认证信息、追踪标识等内容就会被静默丢弃。修复后,两种形式都能被正确保留并透传到请求中。

useObject 是 AI SDK 为 Vue 提供的组合式函数(Composable),用于在组件中消费模型返回的流式结构化对象。与普通的一次性 await 调用不同,它内部维护着一条持续的流式响应通道,并在组件生命周期内暴露 loading、object、error 等响应式状态。正因为它跨越多帧持续运行,请求的「开始—进行—结束」三个阶段与组件的挂载、卸载、用户交互交错在一起,才使得取消时机和传参形式这类边界条件格外容易出问题。

Vue 组合式 API 的核心思想是把有状态的逻辑封装成可复用的函数,在 setup 或 <script setup> 中调用。组合式函数通常借助 onScopeDispose 或 onUnmounted 注册清理逻辑,因此当组件提前卸载时,内部发起的请求能否被正确中止,直接取决于实现是否在这个阶段处理了取消。这也解释了为什么「请求尚未开始时的取消」会成为一类典型缺陷。

Headers 是 Fetch API 提供的标准接口,用于表示 HTTP 请求/响应头。与普通 JavaScript 对象不同,它内部以规范化方式存储键值对(键名统一小写、合并重复项),并通过 get、set、append、has 等方法访问,而不是属性读取。因此,若代码用 Object.keys(headers) 或 headers[key] 的方式遍历它,得到的往往是空结果或错误结果。

这种差异在跨库传递请求头时经常引发「静默丢失」:调用方按标准 API 传入了 Headers 实例,被调用方却按普通对象解析,既不会抛错,也不会告警,最终请求因缺少认证或追踪头而失败或行为异常。健壮的做法是先判断类型,必要时通过 new Headers(input) 统一归一化,再逐个读取,从而同时兼容对象字面量与 Headers 实例两种形式。

依赖同步升级

作为补丁版本,4.0.138 同步更新了一批底层依赖,原文列出了多条依赖项更新记录,其中明确提到 [email protected] 与 @ai-sdk/[email protected]。

这种依赖联动是 AI SDK 各子包协同发版的常规做法。对使用方来说,意味着 Vue 适配层与核心 ai 包、provider 工具包之间保持了版本对齐,通常无需单独处理兼容问题。

开发者应该做什么

如果你正在项目中使用 useObject 实现流式对象生成,建议升级到这个版本,尤其是以下两种情况:

  1. 你的界面允许用户在生成开始前就取消操作,且你观察到了取消不生效或请求仍被发出的现象;
  2. 你在请求配置中使用了 Headers 实例而非普通对象来传递认证或自定义头。

这两个修复都属于「不升级不会报错,但行为不符合预期」的类型,排查起来往往需要一定的调试成本。补丁版本升级风险低,直接更新即可。

小结

@ai-sdk/vue 4.0.138 是一个务实的小版本:两个修复都指向 useObject 在真实交互场景下的边界问题——请求生命周期的取消时机、以及请求头传参形式的兼容性。配合底层依赖的同步更新,它让 Vue 侧的 AI 流式交互更加可靠。对于依赖该组合式函数的项目,这是一次值得执行的升级。

#@ai-sdk/vue#useObject#AI SDK#Vue AI 开发#流式生成#请求头传递#版本更新
分享:

相关推荐