核心概念
Tool Definition
工具定义就是你给模型看的“能力说明书”,一般包含:
- 名称
- 描述
- 参数 schema
- 可选的约束信息
模型不会真正执行工具,它只会根据说明书决定:
- 要不要调用
- 调哪个工具
- 参数填什么
Tool Call
Tool call 是模型发出的结构化调用请求,不是代码执行本身。
例如:
json
{
"id": "call_123",
"type": "function",
"function": {
"name": "search_docs",
"arguments": "{\"query\":\"tool_calls\"}"
}
}这段结构的含义是:模型建议宿主程序调用 search_docs,参数为 query=tool_calls。
Tool Result
执行工具的是宿主程序,不是模型。执行后返回的结果叫 tool result。
tool result 可能是:
- 正常业务结果
- 结构化错误
- 拒绝执行信息
- 部分成功信息
Tool Loop
tool loop 是实际应用里最关键的一环:
- 发请求
- 看模型是否请求工具
- 执行工具
- 回填结果
- 再次请求模型
- 直到模型输出最终自然语言回答
Tool Choice
tool choice 用来控制模型的自由度:
| 值 | 含义 |
|---|---|
auto | 模型自行决定是否调用工具 |
none | 明确不允许工具调用 |
required | 必须至少调用一个工具 |
| 指定工具名 | 强制调用某个工具 |
为什么 schema 重要
模型不是类型系统。schema 写得越模糊,模型越容易:
- 漏字段
- 字段类型错
- 编出并不存在的参数
- 把多个意图塞进一个字段
所以好的 tool schema 通常有这些特点:
- 字段名短但明确
- description 足够具体
- enum 能收窄时就收窄
- required 只保留真正必要字段
- 避免一个字段承载多个含义
并行调用
有些模型支持一次返回多个独立 tool calls。适合:
- 多城市天气查询
- 多数据源聚合
- 多文件并行读取
但前提是这些调用彼此独立且宿主支持并发执行。