F2.3 F2

tool_use Block:模型想调工具时发出来的东西

模型决定调用工具时,它不会执行任何东西。它在响应里生成一个 tool_use content block——一个结构化请求,意思是”请用这些参数跑这个工具”。

每个 tool_use block 的三个字段

  • id — 这次工具调用的唯一标识符(比如 "toolu_abc123")。送回结果的时候你会用到它。
  • name — 模型想调用哪个工具。跟你工具定义里的 name 一一对应。
  • input — 模型生成的参数,遵循工具的 input_schema
{
  "type": "tool_use",
  "id": "toolu_01A09q90qw90lq917835lq9",
  "name": "get_weather",
  "input": {"location": "San Francisco", "unit": "celsius"}
}

id 是一个关联机制

id 字段只有一个用途:把请求和结果关联起来。你送回 tool_result 时,它的 tool_use_id 必须和 tool_use block 的 id 严格匹配。这对配对关系告诉模型哪个结果属于哪个请求——在同一轮有多个工具调用时尤为关键。

input 是实例,input_schema 是蓝图

工具定义里的 input_schema 描述的是结构——类型、必填字段、约束条件。tool_use block 里的 input 是实际的实例——模型按照那个结构生成的具体值。schema 说”ticker 必须是 string”,input 说 {"ticker": "AAPL"}

不要修改对话历史中的 tool_use block

把对话传回 API 进行下一轮时,assistant 消息里的 tool_use block 应该保持原样。你执行工具时可以用修改后的输入(出于安全、清洗等原因),但对话历史里存的 tool_use block 应该如实反映模型原本请求的内容。改了它会导致模型以为自己请求的内容和历史记录对不上。


一句话总结: tool_use block 是模型发出的结构化请求——取 nameinput 去执行工具,记住 id 用来关联返回的结果。