AI SDK 2.0.81 发布:修复 toolChoice 与新增中断完成原因

AI SDK workflow 包 2.0.81 修复 toolChoice 拦截、新增 interrupted 完成原因并保留自定义分片。
AI SDK 的 workflow 包发布 2.0.81 补丁版本,虽为小版本更新但包含多项影响工具调用与流式响应处理的变更。首先是修复 `toolChoice: 'none'` 的语义:该参数会正确转发至 Hugging Face Responses API,同时在 `generateText`、`streamText` 和 `WorkflowAgent` 中于本地执行前直接拒绝工具调用,流式工具片段被扣留,相关修复钩子不会触发。其次是新增 `interrupted` 完成原因,用于没有完成信号就结束的流,SDK 保留部分输出且不因中断报错,并停止工具执行与 agent 继续运行,但 provider 端检测逻辑将另行添加。由于新值进入公开 finish-reason 类型,穷尽式 switch 或 `Record` 映射可能因类型检查失败而中断 CI。此外,`WorkflowAgent.stream()` 现在会保留 `openai.compaction` 等自定义内容分片,并对依赖项做了同步更新。

AI SDK 的 workflow 包发布了 2.0.81 补丁版本。尽管版本号变化不大,这次更新却包含了几项对工具调用行为和流式响应处理有实际影响的变更,其中一项甚至可能让升级后的 TypeScript 项目出现类型检查错误。
修复 toolChoice: 'none' 的强制约束
本次更新首先处理了 toolChoice: 'none' 的语义问题。在调用 Hugging Face Responses API 时,该参数现在会被正确转发;同时在 generateText、streamText 和 WorkflowAgent 中,SDK 会在本地执行之前直接拒绝工具调用。
这一改动意味着即便模型仍然返回了工具调用意图,SDK 也会在本地拦截,不会继续执行。流式返回的工具片段同样会被扣留,客户端工具无法对其采取行动。另外,repairToolCall 和 experimental_refineToolInput 这两个通常用于修复工具调用的钩子,在拒绝路径上不会被触发。对于依赖 toolChoice: 'none' 来确保纯文本输出的应用,这个修复堵住了一个潜在的绕过口子。
toolChoice 是 AI SDK 中控制模型是否允许发起工具调用的请求参数,常见取值包括 'auto'、'required' 和 'none'。其中 'none' 本意是要求模型只生成纯文本。但在实际链路里,模型仍可能在输出中夹带工具调用意图,因此仅在请求层透传该参数并不足以保证行为,SDK 必须在本地再做一道执行前拦截。
generateText、streamText 与 WorkflowAgent 是 SDK 中三条主要的文本生成路径:前两者分别对应一次性生成和流式生成,后者用于带步骤编排的 agent 工作流。repairToolCall 和 experimental_refineToolInput 则是工具调用链路上的修复钩子,用于在参数不合法时尝试纠正。本次变更明确这些钩子不会在拒绝路径上运行,意味着被拦截的调用不会进入任何后续处理环节。
新增 interrupted 完成原因
第二个变更为 provider 流引入了一个新的完成原因 interrupted,用于那些没有收到完成信号就结束的流。SDK 会保留已产生的部分输出,并且不会仅仅因为中断就抛出错误。同时,工具执行、agent 继续运行以及自动 UI 后续操作都会停止,迟到的工具结果和审批请求也会被忽略。
需要注意的是,provider 端的检测与发射逻辑将另行添加,因此当前版本更多是 SDK 层面的准备。
发布说明中特别附带了兼容性提醒:由于 interrupted 被加入公开的 finish-reason 类型,即使是补丁版本,升级后也可能破坏类型检查。使用穷尽式 switch(比如配合 assertNever 兜底)或 Record<FinishReason, string> 这类映射的代码,必须处理这个新值。自定义的校验逻辑或假设现有完成原因集合是封闭的应用代码也需要同步更新。
对于需要检测不完整响应的应用,建议在现有错误处理之外,额外检查 finishReason === 'interrupted'。
finish reason(完成原因)是 SDK 对一次模型响应如何结束的分类,典型取值有 stop(自然结束)、length(达到长度上限)和 tool-calls(以工具调用结束)。许多 TypeScript 项目会对其做穷尽式处理,即用 switch 覆盖所有成员,并以 assertNever 之类的兜底确保没有遗漏。
向公开类型中新增成员属于源兼容性破坏:已有代码本身不变,但类型检查会因为未覆盖新分支而报错。Record<FinishReason, string> 这类要求覆盖全部键的映射也会受影响。因此即便是补丁版本,依赖严格类型检查的 CI 也可能在升级后失败,需要在升级前同步补全处理逻辑。
自定义内容分片的保留
第三个变更是关于 WorkflowAgent.stream() 的步骤结果与后续模型请求。像 openai.compaction 这样的自定义内容分片现在会被保留,而不会在步骤之间丢失。这对依赖厂商特定分片来传递上下文或控制信息的 agent 工作流来说是一个实用修复。
本次发布同步更新了依赖项,包括 ai@7.0.149、@ai-sdk/provider@4.0.32 和 @ai-sdk/provider-utils@5.0.66。
升级建议
对于大多数项目,2.0.81 是一个值得跟进的补丁。但在升级前,建议全局搜索 finish reason 的穷尽式处理逻辑,确认新增的 interrupted 值已被覆盖,避免 CI 中的类型检查意外失败。如果你的应用严重依赖 toolChoice: 'none' 的本地拦截行为,这次修复也值得单独验证。
相关推荐

Cognition SWE-2 实战:一个提示词搞定产品发布全流程
解析 YouTube 创作者用 Cognition SWE-2 发布产品的完整提示词:落地页、七封邮件序列与未购买用户跟进工具三段式结构,以及"测试并汇报"这一约束如何改变 AI 的交付质量。
AWS AgentCore Gateway:用MCP打通AI Agent与企…
AWS AgentCore Gateway:用MCP打通AI Agent与企业后端
AWS AgentCore Gateway如何作为主MCP服务器聚合REST API、Lambda与已有MCP服务?解析其AST实时映射、零冷启动、语义搜索治工具过载、会话隔离与密钥注入安全设计,以及企业AI Agent解耦后端的架构思路。

一个链接给Figma AI装上新技能:MCP连接器实战
通过粘贴一个MCP服务器链接,Figma中的AI Agent就能获得新工具能力。本文拆解配置流程、超过20个一键接入应用、读写权限与执行策略设置,以及公开HTTPS链接这一关键限制。