DynamicToolCall(名实不符的历史命名)

名称具有误导性的类型。实际语义是 tool call 解析失败的降级路径(toolName 无法映射到声明 ToolSet,或 input 无法通过 schema 校验),而非运行时动态注册的工具。AI SDK 6 计划重命名为 InvalidToolCall。勿与 MCP 动态工具发现混淆。

警告:名实不符

DynamicToolCall 的命名容易让人联想到"运行时动态注册/发现的工具",但实际语义完全不同。

实际语义

DynamicToolCallTypedToolCall<TOOLS> union 的一个分支,代表以下情况之一:

  • toolName 在运行时才知道,无法映射到编译期声明的 TOOLS 泛型
  • input 参数无法通过对应工具的 schema 校验
  • 工具名称不存在于当前 ToolSet

这是解析失败的降级路径,不是功能性的工具类型。

代码位置

packages/ai/src/generate-text/tool-call.ts:L33-L52,含 TODO 注释(L44):

AI SDK 6 计划将其拆出为独立的 InvalidToolCall 类型

区分

DynamicToolCall(当前)MCP 动态工具
语义解析失败降级运行时发现注册
触发原因toolName 不在 ToolSet / input 校验失败Provider 动态暴露新工具
正常路径否(是错误处理路径)是(正常功能)

MCP 场景的正确标识

vercel/ai 中 provider-side 工具(如 code_execution)通过 providerExecuted?: boolean 字段(tool-call.ts:L9)标识,与 dynamic 字段是完全独立的维度。

引用本术语的文章