调用流程
1. 声明工具并请求模型
下面的例子声明了一个由你的服务实现的get_weather 函数:
强制调用
get_weather:
2. 接收模型的工具调用
当模型决定调用工具时,通常会返回finish_reason: "tool_calls"。函数参数位于 function.arguments,其类型是 JSON 字符串,需要先解析再校验。
3. 执行函数后,构造下一轮请求 Body
假设你的服务已执行get_weather,得到如下业务结果:
developer、user、以及模型返回的完整 assistant 消息;随后追加一个 role: "tool" 消息。tool_call_id 必须与第一轮响应里的 id 完全一致。
安全要求
- 函数名称和参数都来自模型输出,必须在服务端维护允许调用的工具白名单。
- 将
function.arguments视为不可信输入:先JSON.parse,再按 JSON Schema 或业务规则校验。 - 不要让模型直接拼接 SQL、Shell 命令、文件路径或任意 URL 后执行。
- 工具结果同样会进入模型上下文;不要回传密码、密钥、完整个人信息或内部系统凭据。
- 设定工具调用轮数、超时与并发上限,避免异常循环和资源耗尽。