Skip to main content
函数调用让模型决定何时需要外部数据或业务操作。模型不会执行你的函数,也不会访问你的数据库、天气服务或订单系统;它只会返回结构化的调用意图。你的服务端负责验证参数、执行函数,并将结果发回模型。

调用流程

1. 声明工具并请求模型

下面的例子声明了一个由你的服务实现的 get_weather 函数:
强制调用 get_weather

2. 接收模型的工具调用

当模型决定调用工具时,通常会返回 finish_reason: "tool_calls"。函数参数位于 function.arguments,其类型是 JSON 字符串,需要先解析再校验。

3. 执行函数后,构造下一轮请求 Body

假设你的服务已执行 get_weather,得到如下业务结果:
下一次请求需要保留第一轮的 developeruser、以及模型返回的完整 assistant 消息;随后追加一个 role: "tool" 消息。tool_call_id 必须与第一轮响应里的 id 完全一致。
模型随后基于工具结果生成最终回答:

安全要求

  • 函数名称和参数都来自模型输出,必须在服务端维护允许调用的工具白名单。
  • function.arguments 视为不可信输入:先 JSON.parse,再按 JSON Schema 或业务规则校验。
  • 不要让模型直接拼接 SQL、Shell 命令、文件路径或任意 URL 后执行。
  • 工具结果同样会进入模型上下文;不要回传密码、密钥、完整个人信息或内部系统凭据。
  • 设定工具调用轮数、超时与并发上限,避免异常循环和资源耗尽。