工具调用是一个多步骤循环
应用先发送工具名称、用途和 JSON 参数结构;模型返回工具调用意图;服务端验证参数并执行允许的函数;最后把工具结果作为新消息回传给模型生成答复。
模型输出只是待验证的数据,不是可信命令。工具名称必须来自服务端白名单,参数必须经过类型、范围和权限校验。
- 声明工具 Schema
- 接收工具调用
- 校验权限与参数
- 执行并回传结果
保持工具定义清晰且范围有限
工具说明应明确何时使用、必填字段和限制条件。参数结构越模糊,模型越容易选择错误字段或产生无法执行的值。一次提供过多相似工具也会降低选择稳定性。
涉及删除、支付、发布、权限变更或外部消息的工具必须在执行前增加业务确认,不能因为模型返回调用就直接完成高风险操作。
{
"type": "function",
"function": {
"name": "get_order_status",
"description": "查询当前用户有权访问的订单状态",
"parameters": {
"type": "object",
"properties": {"order_id": {"type": "string"}},
"required": ["order_id"],
"additionalProperties": false
}
}
}处理重复调用和失败结果
为有副作用的工具设计幂等键,记录调用标识和执行状态。网络重试、模型再次请求或用户重复提交都不应造成重复扣款、重复发信或重复创建资源。
工具失败时返回结构化、可理解但不包含内部敏感信息的错误。限制最大工具循环次数,避免模型在无法解决的问题上持续调用。
常见问题
关于AI API Function Calling 与工具调用的常见问题
模型会直接执行函数吗?
不会。模型生成调用意图和参数,应用服务端负责校验、授权和实际执行。
工具参数可以直接信任吗?
不可以。必须像处理外部用户输入一样校验类型、范围、权限和业务状态。
如何避免重复外部操作?
为有副作用的工具使用幂等键、状态记录和执行前确认,并限制重试与循环次数。