工具使用故障排除

通过症状到修复的诊断表修复最常见的工具使用错误。


最常见的工具使用错误的症状到修复表。每个修复都交叉引用了拥有该功能的页面。

Claude 调用了错误的工具

症状可能原因修复
Claude 调用了工具 A,而你想要工具 B描述歧义优化描述。通过何时使用而非仅做什么来区分工具。参见定义工具
Claude 从不调用你的工具工具名称冲突或过于通用的 schema检查工具列表中是否有重复名称。添加 input_examples 使预期用途具体化。
Claude 使用错误的参数类型调用模型在模糊 schema 下猜测添加 strict: true(如果你的 schema 在支持的子集中)或添加 input_examples

Claude 捏造工具参数

症状可能原因修复
参数在你的 schema 中不存在模型在非 strict 模式下过度生成如果你的 schema 在支持的子集中,添加 strict: true
参数值超出你的 enum 范围缺少 strict 模式或 enum 过大缩小 enum 或添加 input_examples 展示有效选择。

并行工具调用不工作

症状可能原因修复
Claude 在并行更优时仍串行调用工具消息历史格式化在一条用户消息中发送多个 tool_result 块,而非每轮一个。参见并行工具使用
disable_parallel_tool_use 似乎被忽略在对话中设置太晚必须在返回 tool_use 的请求上设置。在后续请求上设置对之前的工具调用无效。

缓存持续失效

症状可能原因修复
每次请求都是缓存未命中tool_choice 在请求间变化保持 tool_choice 稳定,或将 cache_control 断点放在变化点之前。参见工具使用与 prompt caching
在对话中途添加工具导致缓存失效工具被添加到 tools 数组头部使用 defer_loading: true 配合 tool search 将工具内联追加,而非修改数组头部。

请求时错误

错误原因修复
tool_use ids were found without tool_result blocks immediately after某些 tool_use id 缺少 tool_result,或 tool_result 不是用户消息中的第一个内容块为助手响应中的每个 tool_use 块返回一个 tool_result。将 tool_result 块放在任何文本之前。参见处理工具调用并行工具使用
Input schema is not compatible with strict mode: string patterns are not supportedstrict: true 中使用了 pattern移除 pattern 或去掉 strict: truepattern 关键字目前不在支持的 JSON Schema 子集中。
All tools have defer_loading: true模型没有可见的工具至少一个工具必须立即加载。tool search 工具本身绝不能设置 defer_loading: true

JSON 转义差异(Opus 4.6+)

症状原因修复
对工具输入的字符串比较在较新模型上失败Unicode 和正斜杠转义在不同模型版本间有差异使用 json.loads()JSON.parse() 解析。永远不要对序列化输入进行原始字符串匹配。

下一步