Function Calling与工具调用
Function Calling 是让模型以结构化方式选择并调用外部函数或工具的能力。它让模型从“只会说”扩展为“可以请求执行动作”。
# 1. 工具调用流程
用户请求
-> 模型判断是否需要工具
-> 生成工具名和参数
-> 应用程序校验参数
-> 执行工具
-> 返回工具结果
-> 模型基于结果继续回答
注意:真正执行工具的是应用程序,不是模型本身。
# 2. 工具描述
工具需要向模型描述清楚。
{
"name": "query_order",
"description": "根据订单号查询订单状态",
"parameters": {
"order_id": {
"type": "string",
"description": "订单号"
}
}
}
描述越清晰,模型越容易选择正确工具和参数。
# 3. 工具类型
| 工具 | 示例 |
|---|---|
| 查询工具 | 搜索、数据库查询、订单查询 |
| 计算工具 | 数学计算、汇率换算 |
| 文件工具 | 读取、写入、转换文件 |
| 业务工具 | 创建工单、发送通知、审批流 |
| 开发工具 | 运行测试、执行命令、代码分析 |
# 4. 参数校验
模型生成的参数不能直接信任。
必须校验:
- 必填字段是否存在。
- 类型是否正确。
- 枚举是否有效。
- 当前用户是否有权限。
- 参数范围是否安全。
- 是否需要人工确认。
# 5. 工具调用安全
| 风险 | 防护 |
|---|---|
| 调用高风险工具 | 工具白名单和权限控制 |
| 参数注入 | 参数校验和转义 |
| 越权查询 | 按用户身份过滤 |
| 重复执行 | 幂等键和执行记录 |
| 错误执行 | 人审和二次确认 |
# 6. 工程建议
- 工具粒度不要太大,避免一个工具承担过多隐含逻辑。
- 工具描述要写清楚适用场景和限制。
- 只把必要工具暴露给模型。
- 工具返回结果要结构化,避免模型误读。
- 每次工具调用都记录日志,便于审计。
# 7. Tips 快问快答
Q:模型可以直接执行函数吗?
A:不应该。模型只生成调用意图和参数,应用程序负责校验和执行。
Q:工具越多越好吗?
A:不是。工具太多会增加模型选择错误的概率。要按任务场景暴露最小工具集。
Q:工具调用结果还需要模型处理吗?
A:通常需要。工具返回事实或数据,模型负责解释、总结或继续任务,但关键业务判断仍要有规则兜底。
上次更新: 2026/06/25, 17:53:09