Tool Calling(工具调用) 工具与循环

别名: 函数调用 · Function Calling

模型在回复中声明「我想调用某个工具、参数是什么」,而真正的执行永远发生在我们的进程里。完整闭环:模型返回 `tool_calls` → 解析参数 → 执行工具 → 把结果作为 `tool` 消息按 `tool_call_id` 配对回填 → 带扩展后的消息数组发起第二次请求。这是所有 Agent 行动的起点,见[第 06 章](/chapters/06-tool-calling/)。

它是什么

Tool Calling(工具调用,也叫 Function Calling)是模型在回复中以结构化数据声明「我想调用哪个工具、参数是什么」的能力——模型不会真正执行任何东西,执行永远发生在你的进程里。一次完整调用由三个参与者构成:工具声明tools 数组,模型只能看到这份 schema)、模型请求(响应里的 tool_calls)、harness 执行(我们的代码解析参数、运行实现、回填结果)。

完整闭环:解析 → 执行 → 回填 → 二次请求

第 06 章手写的最小闭环分四步:

  • 请求带 tools,模型返回 tool_callsid / name / arguments,其中 argumentsJSON 字符串,必须先 JSON.parse 再校验);
  • 执行工具:按名字查表调用实现,结果必须是字符串(模型只能读文本);
  • 回填:把带 tool_calls 的 assistant 消息原样追加,再为每个调用配一条 role: 'tool' 消息,用 tool_call_id 与调用 id 一一配对;
  • 用扩展后的消息数组原样发起第二次请求——模型是无状态的,丢掉任何一环,第二轮就会「失忆」答非所问。

边界与厂商差异

工具调用把「行动的选择权」交给模型、「执行权」留给 harness,安全边界就在这里:模型可以提出任何请求(包括危险的),放行与否由我们的代码决定(权限设计在第 18 章展开)。OpenAI 的 tool_calls / role: 'tool' 与 Anthropic 的 tool_use block / tool_result 载体不同,但「拿到请求 → 解析 → 执行 → 按 id 配对回填 → 二次请求」的闭环逻辑相同——这正是第 04 章的 Provider 抽象要翻译的那一层。

小结

一句话:模型负责思考,你负责动手。Tool Calling 是所有 Agent 行动的起点——把它装进一个 while 循环,就成了第 07 章的 Agent Loop。

相关词条

出现在这些章节