Function Calling

大语言模型如何按给定工具定义生成结构化调用请求,并由外部系统真正执行工具。

#tech / ai #resource / function-calling #type / concept #status / growing

[!info] related notes

Function Calling

Function calling | OpenAI API

Function Calling 的本质不是“模型真的去执行函数”,而是:

  • 你把可用工具的名称、参数结构告诉模型
  • 模型判断当前问题是否需要调用工具
  • 如果需要,它生成一段结构化的调用请求
  • 真正执行工具的是你的后端或宿主程序
  • 工具结果再回给模型,模型继续组织最终回答

一句话定义

Function Calling 是让模型按给定的工具描述,输出结构化参数请求,再由外部系统代它执行工具的一种机制。

为什么需要它

模型本身擅长语言理解,但不一定擅长:

  • 精确计算
  • 查询实时数据
  • 调用业务系统
  • 执行数据库、搜索、发消息之类的动作

这时就需要把“理解用户意图”和“真正执行动作”拆开。

最简流程

  1. 用户提问,同时系统把可用工具定义发给模型
  2. 模型判断要不要调用工具
  3. 如果要调用,模型返回工具名和参数
  4. 你的程序执行工具
  5. 工具结果返回给模型
  6. 模型基于结果生成最终回答

一个最小例子

比如你提供一个天气工具:

{
  "name": "get_weather",
  "description": "根据城市获取天气",
  "parameters": {
    "type": "object",
    "properties": {
      "city": { "type": "string" }
    },
    "required": ["city"]
  }
}

用户问:

杭州今天什么天气?

模型可能返回:

{
  "tool_name": "get_weather",
  "arguments": {
    "city": "杭州"
  }
}

然后你的服务端去真的调用天气接口。

面试里最容易被追问的点

它和普通 prompt 有什么区别

普通 prompt 只是让模型输出文字;Function Calling 让模型输出“结构化工具调用意图”。

模型会自己执行函数吗

不会。模型只负责“决定调用什么”和“参数是什么”,真正执行的是宿主系统。

它适合做什么

  • 查天气
  • 查数据库
  • 调业务接口
  • 执行搜索
  • 调用内部工具链

和 MCP 的区别

  • Function Calling 更像“单次工具调用机制”
  • MCP 更像“让模型客户端以统一协议接入很多工具和资源的标准”

可以粗暴理解成:

  • Function Calling 解决“这次该怎么调工具”
  • MCP 解决“工具怎么以标准方式被接进来”

参数校验与兜底机制

模型返回的参数不能直接信任。工程上需要两层校验:

  • 模型侧:通过 JSON Schema 约束参数类型、必填项、枚举值
  • 运行时侧:用 Zod / Ajv 做结构校验,校验失败进入 repair-and-retry 流程

高风险操作(退款、删除、支付)还需要幂等设计、业务校验、二次确认和审计日志。

详见 Function Calling 参数校验与重试机制

面试里的最短答法

Function Calling 不是模型自己执行函数,而是模型根据给定的工具定义,输出结构化调用请求,再由外部系统真正执行工具并把结果回传。它适合把模型的语言理解能力和外部系统的真实执行能力接起来。

创建于 2025/9/1 更新于 2026/5/27