本页面解释工具使用背后的概念:工具在何处运行、智能体循环如何工作,以及何时工具使用是正确的方法。如需实践指导,请从教程或实现指南开始。
工具使用是您的应用程序与模型之间的一种契约。您指定哪些操作可用以及它们的输入和输出采用什么形式;Claude 决定何时以及如何调用它们。模型本身从不执行任何操作。它发出一个结构化请求,您的代码(或 Anthropic 的服务器)运行该操作,然后结果流回对话中。
这种契约使模型的行为不再像文本生成器,而更像您调用的函数。具有传统 API 经验的工程师可以像集成任何其他类型化接口一样集成工具使用:定义模式(schema)、处理回调、返回结果。不同之处在于,另一端的调用者是一个语言模型,它根据对话内容选择调用哪个函数。
工具之间的主要区分维度是代码在何处执行。每个工具都属于以下三类之一,而所属类别决定了您的应用程序需要负责什么。
您编写模式,您执行代码,您返回结果。这是核心场景:绝大多数工具使用流量都是用户定义的工具调用应用程序特定的逻辑。
当 Claude 决定使用您的某个工具时,API 响应会包含一个 tool_use 块,其中包含工具名称和一个参数的 JSON 对象。您的应用程序提取这些参数,运行操作(数据库查询、HTTP 调用、文件写入,或该工具执行的任何操作),然后在下一个请求中通过 tool_result 块将输出发送回去。Claude 永远看不到您的实现;它只能看到您提供的模式和您返回的结果。
对于少数常见操作(管理暂存内存、运行 shell 命令、编辑文件、控制浏览器),Anthropic 发布工具模式,而您的应用程序负责执行。此类别中的工具包括 memory、bash、text_editor 和 computer。
执行模型与用户定义的工具完全相同:响应包含一个 tool_use 块,您的代码运行操作,然后您发送回一个 tool_result。使用 Anthropic 模式工具而不是自己定义等效工具的原因在于,这些模式是经过训练内化的。Claude 已经在数千个使用这些确切工具签名的成功轨迹上进行了优化,因此与执行相同功能的自定义工具相比,它调用这些工具更可靠,从错误中恢复也更优雅。该模式正是模型已经预期的接口。
对于 web_search、web_fetch、code_execution 和 tool_search,由 Anthropic 运行代码。您在请求中启用该工具,服务器处理其余一切。您永远不需要为这些工具构造 tool_result 块。当某个回合仅调用服务器工具时,服务器端循环会执行操作并在响应到达您之前将输出反馈给模型,除非循环在完成之前停止(最常见的情况是暂停)。
您收到的响应包含 server_tool_use 块,显示运行了什么以及返回了什么。在常见情况下,当您看到它们时执行已经完成,您的应用程序的任务是启用工具并读取最终答案,而不是参与执行循环;主要的例外情况是暂停的循环(pause_turn)以及同时调用了客户端工具的回合。
客户端执行的工具(包括用户定义的和 Anthropic 模式的)需要您的应用程序驱动一个循环。模型无法运行您的代码,因此每次工具调用都是一次往返:模型发出请求,您执行,您报告结果,模型继续。
标准形式是一个以 stop_reason 为键的 while 循环:
tools 数组和用户消息的请求。stop_reason: "tool_use" 和一个或多个 tool_use 块作为响应。tool_result 块。tool_result 块的用户消息。stop_reason 为 "tool_use" 时,从第 2 步开始重复。实际上,这可以理解为:当 stop_reason == "tool_use" 时,执行工具并继续对话。循环在遇到任何其他停止原因("end_turn"、"max_tokens"、"stop_sequence" 或 "refusal")时退出,这意味着 Claude 要么已生成最终答案,要么因其他原因停止,您的应用程序应对此进行处理。
有关构建请求、处理并行工具调用和格式化结果的具体机制,请参阅处理工具调用。
服务器执行的工具在 Anthropic 的基础设施内部运行自己的循环。来自您应用程序的单个请求可能会在响应返回之前触发多次网络搜索或代码执行。模型搜索、读取结果、决定再次搜索,并不断迭代直到获得所需内容,整个过程无需您的应用程序参与。
这个内部循环有迭代次数限制。如果模型在达到上限时仍在迭代,响应将以 stop_reason: "pause_turn" 而非 "end_turn" 返回。暂停的回合意味着工作尚未完成;重新发送对话(包括暂停的响应)以让模型从中断处继续。有关继续模式,请参阅服务器工具。
如果 Claude 在同一组并行工具调用中同时调用了服务器工具和客户端工具,循环也会在服务器工具运行之前将控制权交还给您。此时响应会以 stop_reason: "tool_use" 返回,并包含一个尚无结果块的 server_tool_use 块;API 会在您返回客户端工具结果后运行它。有关确切的契约,请参阅停止原因和回退。
当任务需要模型仅凭文本无法完成的事情时,工具使用是合适的:
判断您应该使用工具的信号:如果您正在编写正则表达式从模型输出中提取决策,那么该决策本应是一次工具调用。解析自由格式文本以恢复结构化意图,表明该结构应该放在模式中。
以下情况不适合使用工具:
| 方法 | 何时使用 | 预期情况 | 了解更多 |
|---|---|---|---|
| 用户定义的客户端工具 | 自定义业务逻辑、内部 API、专有数据 | 您处理执行和智能体循环 | 定义工具 |
| Anthropic 模式客户端工具 | 标准开发操作(bash、文件编辑、浏览器控制) | 您处理执行;由于模式已训练内化,Claude 能可靠地调用该工具 | 工具参考 |
| 服务器执行的工具 | 网络搜索、代码沙箱、网页获取 | Anthropic 处理执行;您读取结果而不是生成结果 | 服务器工具 |
Was this page helpful?