Skip to content

核心概念

Tool Calls 的本质

Tool calling 是一种结构化输出机制,让模型能够:

  1. 识别意图 - 判断是否需要调用外部工具
  2. 生成参数 - 按预定义 schema 构造调用参数
  3. 等待执行 - 暂停等待外部系统返回结果
  4. 处理结果 - 将工具返回值融入对话上下文

关键术语

术语说明
Tool Definition工具的定义,包括名称、描述、参数 schema
Tool Call模型发起的一次工具调用请求
Tool Result工具执行后返回的结果
Tool Choice控制模型是否必须调用工具的选项

工具定义结构

json
{
  "type": "function",
  "function": {
    "name": "search_web",
    "description": "在互联网上搜索信息",
    "parameters": {
      "type": "object",
      "properties": {
        "query": {
          "type": "string",
          "description": "搜索关键词"
        },
        "limit": {
          "type": "integer",
          "description": "返回结果数量",
          "default": 5
        }
      },
      "required": ["query"]
    }
  }
}

对话循环

┌─────────────┐
│   用户消息   │
└──────┬──────┘

┌─────────────┐
│  模型处理    │
└──────┬──────┘

┌─────────────────┐     否
│ 需要调用工具?  │─────────┐
└──────┬──────────┘         │
       │ 是                 │
       ▼                    ▼
┌─────────────┐      ┌─────────────┐
│ 返回tool_calls│      │  直接回复   │
└──────┬──────┘      └─────────────┘

┌─────────────┐
│ 执行工具     │
└──────┬──────┘

┌─────────────┐
│ 返回结果     │
└──────┬──────┘

┌─────────────┐
│ 模型生成回答 │
└─────────────┘

Tool Choice 选项

行为
auto模型自主决定是否调用工具(默认)
none不调用任何工具
required必须调用至少一个工具
{"type": "function", "function": {"name": "xxx"}}强制调用指定工具

多工具并行调用

模型可以一次性请求调用多个工具:

json
{
  "tool_calls": [
    {"id": "call_1", "function": {"name": "get_weather", "arguments": "{\"city\": \"Beijing\"}"}},
    {"id": "call_2", "function": {"name": "get_weather", "arguments": "{\"city\": \"Shanghai\"}"}}
  ]
}

这些调用之间没有依赖关系,可以并行执行。

Released under the MIT License.