DynamicToolCall(名实不符的历史命名)
名称具有误导性的类型。实际语义是 tool call 解析失败的降级路径(toolName 无法映射到声明 ToolSet,或 input 无法通过 schema 校验),而非运行时动态注册的工具。AI SDK 6 计划重命名为 InvalidToolCall。勿与 MCP 动态工具发现混淆。
警告:名实不符
DynamicToolCall 的命名容易让人联想到"运行时动态注册/发现的工具",但实际语义完全不同。
实际语义
DynamicToolCall 是 TypedToolCall<TOOLS> union 的一个分支,代表以下情况之一:
- toolName 在运行时才知道,无法映射到编译期声明的
TOOLS泛型 - input 参数无法通过对应工具的 schema 校验
- 工具名称不存在于当前 ToolSet
这是解析失败的降级路径,不是功能性的工具类型。
代码位置
packages/ai/src/generate-text/tool-call.ts:L33-L52,含 TODO 注释(L44):
AI SDK 6 计划将其拆出为独立的
InvalidToolCall类型
区分
MCP 场景的正确标识
vercel/ai 中 provider-side 工具(如 code_execution)通过 providerExecuted?: boolean 字段(tool-call.ts:L9)标识,与 dynamic 字段是完全独立的维度。