Claude Platform Docs
Messages工具

处理工具调用

解析 tool_use 块,格式化 tool_result 响应,并使用 is_error 处理错误。

本页介绍工具调用的生命周期:从 Claude 的响应中读取 tool_use 块,在您的回复中格式化 tool_result 块,以及发出错误信号。有关自动处理这些操作的 SDK 抽象,请参阅 Tool Runner。

Claude 的响应会根据它使用的是客户端工具还是服务器工具而有所不同。

处理客户端工具的结果

响应的 stop_reason 将为 tool_use,并包含一个或多个 tool_use 内容块,其中包括:

  • id:此特定工具使用块的唯一标识符。稍后将用于匹配工具结果。
  • name:正在使用的工具的名称。
  • input:一个对象,包含传递给工具的输入,符合工具的 input_schema。

属于 computer use(计算机使用)或 browser use(浏览器使用)工具集成员的 tool_use 块还带有一个 toolset_name 字段("computer" 或 "browser")。其 name 是 Claude 正在调用的成员工具,例如 screenshot 或 navigate,因此请根据这两个字段来分派这些块。

当您收到客户端工具的工具使用响应时,您应该:

  1. 从 tool_use 块中提取 name、id 和 input。
  2. 在您的代码库中运行与该工具名称对应的实际工具,并传入工具的 input。
  3. 通过发送一条 role 为 user 的新消息来继续对话,其中的 content 块包含 tool_result 类型和以下信息:
    • tool_use_id:此结果所对应的工具使用请求的 id。
    • content(可选):工具的结果,可以是字符串(例如 "content": "15 degrees")、嵌套内容块列表(例如 "content": [{"type": "text", "text": "15 degrees"}])或文档块列表(例如 "content": [{"type": "document", "source": {"type": "text", "media_type": "text/plain", "data": "15 degrees"}}])。这些内容块可以使用 text、image、document 或 search_result 类型。
    • is_error(可选):如果工具执行导致错误,则设置为 true。

回应 computer use 或 browser use 成员块的 tool_result 还必须回传与 tool_use 块相同的 toolset_name 值;省略该值的成员结果将被拒绝。其 content 的范围也更窄:成员结果只能包含 text 和 image 块,而 browser use 结果可以额外添加一个 browser_state 块(标签页管理成员仅返回该块)。

收到工具结果后,Claude 将使用该信息继续生成对原始用户提示的响应。

处理服务器工具的结果

Claude 在内部执行工具,并将结果直接整合到其响应中,无需额外的用户交互。

使用 is_error 处理错误

在 Claude 中使用工具时,可能会出现几种不同类型的错误:

后续步骤

处理 Claude 在单个轮次中调用多个工具的响应。

让 SDK 为您管理 tool_use 循环、结果格式化和重试。

编写能够引导 Claude 选择正确工具的 schema 和描述。

Was this page helpful?