用途
本资料是 Claude 工具使用(Tool Use)的实现指南,用于指导开发者如何为 Claude 定义自定义工具、控制其调用行为、处理调用结果,并构建基于工具的智能体工作流。适用场景包括:用 JSON Schema 定义自定义工具、构建智能体工作流、实现工具结果处理、构建并行与串行工具编排、要求保证的模式一致性、实现错误恢复模式、将工具与扩展思考结合使用。
主要能力
工具定义 Schema
每个工具需要一个 JSON Schema 输入定义,包含:
- name:工具标识符(正则:^[a-zA-Z0-9_-]{1,64}$)
- description:对用途、使用时机、行为的详细说明(3-4 句以上)
- input_schema:定义参数的 JSON Schema
- input_examples(可选,beta):有效输入的具体示例
定义最佳实践包括:描述至少 3-4 句,说明工具做什么、何时使用、返回什么、有何限制;对复杂嵌套对象或对格式敏感的参使用 input_examples;设置 additionalProperties: false 以严格校验;对受限参数使用 enums。
tool_choice 模式
- "auto":Claude 自行决定是否使用工具(默认),适用于一般工具使用。
- "any":Claude 必须使用某个工具,但可自选,用于强制工具使用但不指定具体工具。
- "tool":强制使用指定工具,如 {"type": "tool", "name": "get_weather"},用于结构化 JSON 输出、需要特定工具的场景。
- "none":禁止所有工具使用,用于纯文本回复。
与扩展思考的重要约束:扩展思考仅支持 tool_choice 为 {"type": "auto"} 或 {"type": "none"};不能与 {"type": "any"} 或 {"type": "tool"} 一起使用,此时应改用单独的 "think" 工具进行复杂推理。
严格模式一致性(Beta)
通过 strict: true 启用保证的模式校验。优点是:参数类型安全(不会出现 "2" 代替 2)、不会缺失必填字段、无需运行时模式校验、生产级可靠性。限制包括:拒绝(refusals)会覆盖 schema(安全优先)、token 限制截断可能破坏 schema、部分递归 schema 不支持、需要 structured-outputs-2025-11-13 beta 头。
单次工具使用模式
基本流程:定义工具 → Claude 调用工具 → 返回结果 → Claude 响应。通过检查 response.stop_reason == "tool_use" 判断是否调用工具,从 response.content 中取出 tool_use 块(含 name、input、id),执行后以 tool_result 形式回传,并把 tool_use_id 对应上。
多轮工具对话
工具往往需要顺序调用,一个工具的输出作为下一个工具的输入,例如 get_location() → get_weather(location)。每轮把上一条 assistant 的 content 和新的 tool_result 依次追加进 messages。
并行工具使用模式
Claude 可以同时调用多个相互独立的工具。例如询问「SF 和 NYC 的天气与时区」会产生 4 个并行调用(2 个天气 + 2 个时间)。关键格式化规则:所有工具结果必须放在单条 user 消息中;tool_result 块必须排在 content 数组的前面;文本可放在工具结果之后;错误的格式会让 Claude 学会避免并行调用。
工具结果处理
基本格式为 {"type": "tool_result", "tool_use_id": "...", "content": "..."}。content 可包含文本、图片(base64 source)和文档(document source)。错误时可设置 "is_error": true,并附带错误信息,如连接错误或缺少参数错误。
错误恢复模式
- 模式 1:优雅错误上报,把错误作为 tool_result 返回并置 is_error 为 true,Claude 通常会重试 2-3 次后再向用户致歉。
- 模式 2:严格模式强制,strict: true 下无效参数(类型错误、缺少必填字段、类型不匹配)在执行前即被阻止。
- 模式 3:max tokens 处理,若响应在工具使用期间被截断(stop_reason == "max_tokens" 且最后一块为 tool_use),用更大的 max_tokens 重试。
用于结构化 JSON 输出
可以用工具保证结构化 JSON 输出而不执行工具:定义如 record_summary 的工具,设置 tool_choice 为指定工具,然后从 tool_use.input 中提取结构化数据。
并行工具使用最佳实践
可在系统提示中加入 <use_parallel_tool_calls> 段落来鼓励并行执行;并提供了测量并行效率的函数 measure_parallel_efficiency,通过统计含工具调用的 assistant 消息数量与工具调用总数计算平均值,大于 1.0 表示并行生效。
使用方式
资料中所有示例均使用 Anthropic Python SDK(import anthropic;client = anthropic.Anthropic()),通过 client.messages.create 传入 model、max_tokens、tools、messages、tool_choice 等参数。如需 beta 特性(如 strict 模式、结构化输出),需在请求中带上相应的 beta 头。示例中出现的模型名包括 claude-sonnet-5 和 claude-opus-4-8。
适用场景
- 需要 Claude 调用外部 API 或函数完成任务
- 构建多步骤、有状态的智能体工作流
- 需要保证参数类型与必填字段正确的生产环境
- 需要从模型获取可靠结构化 JSON 数据
- 通过并行调用提升多工具场景效率
限制
- 扩展思考与 tool_choice 的 "any"、"tool" 模式不兼容
- strict 模式不支持部分递归 schema,且拒绝行为和 token 截断可能破坏 schema 保证
- 并行工具结果必须放在同一条 user 消息中,否则会影响模型的并行调用倾向
- 关于收费、价格、平台支持范围、正式版发布时间等信息,资料中暂未提供。