← 返回 教程
标签#教程#Function Calling#Agent
本页目录(6)
开发教程QSTAR 内容团队·2026-10-16·10 分钟

给 AI 装上双手:OpenAI 兼容接口的 Function Calling 完整教程

从工具声明、模型决策、参数校验到结果回灌,手把手实现一个可运行的函数调用闭环,附常见失败排查表。

Function Calling(工具调用)是让模型从「会说」变成「会做」的关键一步。模型不直接执行代码,而是输出「我想调用哪个工具、参数是什么」,由你的程序去执行并把结果回灌给模型。本文用 OpenAI 兼容接口走完整个闭环。

步骤一:声明工具

用具名函数 + JSON Schema 描述工具。描述写得好不好,直接决定模型会不会在正确的时机调用它——把「什么时候该用」写进 description,比写参数更有用。

  • name:动词开头、语义明确,如 query_order_status
  • description:说明用途与适用时机,必要时给出反例
  • parameters:JSON Schema,字段必填性与枚举要写全

步骤二:发起请求并解析 tool_calls

请求里带上 tools 与 tool_choice(auto / 指定 / none)。响应中若出现 tool_calls,说明模型决定调用工具;arguments 是字符串形式的 JSON,必须 try/catch 解析,不要直接 JSON.parse 就完事。

步骤三:执行并做参数校验

永远不要相信模型给的参数。执行前按 Schema 校验类型与范围,越权参数直接拒绝。工具返回值要精简,只回传模型下一步需要的字段——回传一整张宽表是最浪费 Token 的做法之一。

步骤四:结果回灌与二次生成

把工具结果以 role=tool 的消息追加进上下文,再次请求,模型会基于结果生成最终回答。注意带上 tool_call_id,否则多工具并发时会串线。

步骤五:多轮循环与兜底

真实任务常常需要连续调用多个工具。设置最大轮次(如 5 轮)与超时;超过上限时改为向用户追问,而不是无限循环烧钱。

常见失败排查表

模型不调用工具,通常是 description 太弱或 tool_choice 被设为 none;参数总是缺字段,通常是 schema 没标 required;结果被忽略,通常是漏了 tool_call_id 或消息顺序错乱。

  • 不调用 → 强化 description、改 tool_choice=auto
  • 参数错 → 补 required / enum / 示例
  • 结果丢失 → 检查 tool_call_id 与消息顺序
  • 死循环 → 设最大轮次 + 超时 + 追问兜底

把这套闭环跑通,你就拥有了一个最小可用的智能体骨架。下一步可以叠加规划、记忆与多智能体分工,参见智能体编排教程。

在 QSTAR 上直接体验工具调用型智能体

分享X微博LinkedIn