函数调用的标准闭环是:定义工具 schema → 模型返回 tool_call → 你的代码执行函数 → 把结果作为 tool 消息回喂 → 模型给出最终回答。模型只负责「选工具、填参数」,真正执行永远在你的代码里。工具要小而专(get_user_profile、get_user_orders、create_ticket),不要做一个 do_everything;可用 tool_choice 强制/禁止调用,独立的多个调用可并行,有副作用或有顺序依赖的必须串行。

适用场景:让助手查订单、查库存、建工单、订会议等需要连真实业务系统的功能。

function-calling tool-calling agent tools

操作步骤

  1. 每个工具写清 name、description(模型靠它选工具,要像写给同事看)和参数 schema,能 strict 就 strict。
  2. 执行前校验参数并鉴权:这个用户有没有权调用这个工具、查这条数据。
  3. 把函数结果(或错误信息)按 tool 角色回喂,并把完整的 assistant 消息(含 tool_calls 字段)保留在历史里,多轮工具对话漏了这一步容易断链。
  4. 建一组「提示词→期望工具→期望参数」的标注样本,每次换模型/改提示词都回归测一遍调用准确率。
代码示例
  tools = [{
      "type": "function",
      "function": {
          "name": "get_order_status",
          "description": "Query the delivery status of an order by its order id.",
          "parameters": {"type": "object", "properties": {"order_id": {"type": "string"}}, "required": ["order_id"]},
      },
  }]
  # resp = client.chat.completions.create(model="your-model-id", messages=msgs, tools=tools)
  # 若 resp.choices[0].message.tool_calls 非空:执行你的函数,再把结果以 role="tool" 回喂后二次调用
接入本站 API:先确认本站目标模型支持 tool calling(拿上面最小例子实测),支持程度因模型而异;客服等场景默认只开放只读工具,写操作加二次确认。

注意事项

  • ⚠️ 常见翻车五件套:参数不是合法 JSON、编造不存在的工具名、漏必填参数、参数类型错、提示词注入骗模型调用危险工具
  • ⚠️ 工具描述含糊导致选错工具——先改描述再怪模型
  • ⚠️ 并行调用里混入有副作用的工具

来源:https://www.kommunicate.io/blog/openai-function-calling/