核心概念
Tool Calls 的本质
Tool calling 是一种结构化输出机制,让模型能够:
- 识别意图 - 判断是否需要调用外部工具
- 生成参数 - 按预定义 schema 构造调用参数
- 等待执行 - 暂停等待外部系统返回结果
- 处理结果 - 将工具返回值融入对话上下文
关键术语
| 术语 | 说明 |
|---|---|
| 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\"}"}}
]
}这些调用之间没有依赖关系,可以并行执行。