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类型
区分
| DynamicToolCall(当前) | MCP 动态工具 | |
|---|---|---|
| 语义 | 解析失败降级 | 运行时发现注册 |
| 触发原因 | toolName 不在 ToolSet / input 校验失败 | Provider 动态暴露新工具 |
| 正常路径 | 否(是错误处理路径) | 是(正常功能) |
MCP 场景的正确标识
vercel/ai 中 provider-side 工具(如 code_execution)通过 providerExecuted?: boolean 字段(tool-call.ts:L9)标识,与 dynamic 字段是完全独立的维度。
引用本术语的文章