Function Calling

大语言模型调用外部工具的核心协议机制,让 LLM 从”只能说”升级为”能做事”

简介

Function Calling(函数调用)是 OpenAI 在 2023 年 6 月随 GPT-3.5 Turbo 首次引入、后在 GPT-4 Turbo 中大幅增强的核心能力。它允许大语言模型在对话过程中识别何时需要调用外部函数,并生成结构化的函数调用请求(包含函数名和参数),由应用程序执行后将结果返回给模型继续推理。

Function Calling 是 AI Agent 能够”做事”的核心基础设施——没有它,LLM 只能生成文本;有了它,LLM 可以读邮件、查天气、操作数据库、调用 API 等。

工作原理

调用流程

  1. 定义工具:开发者在 API 请求中提供可用函数的 JSON Schema 描述(函数名、参数类型、参数说明)
  2. 模型决策:LLM 根据用户意图判断是否需要调用函数、调用哪个函数、传什么参数
  3. 生成调用:模型输出结构化的函数调用请求(不直接执行)
  4. 应用执行:应用程序接收调用请求,在本地执行函数
  5. 结果回传:将函数执行结果返回给模型
  6. 继续推理:模型基于函数结果生成最终回复

关键特性

  • 模型不直接执行函数:模型只生成调用请求,实际执行由应用代码完成
  • 支持并行调用:一次响应中可以包含多个函数调用请求
  • 结构化输出:参数以 JSON 格式传递,类型安全
  • 与对话历史集成:函数调用和结果成为对话历史的一部分

关键信息

  • 类型:技术协议/能力
  • 提出者:OpenAI(2023年6月)
  • 支持模型:GPT-4 Turbo、GPT-4o、GPT-3.5 Turbo(后续版本)
  • 竞争方案:Anthropic Tool Use、Google Gemini Extensions、MCP(Model Context Protocol)
  • 底层依赖:JSON Schema 描述函数签名

不同素材中的观点

来自 2026-06-13-langchain-openai-agent-tutorial

  • Function Calling 是 Agent 调用外部工具的核心机制,通过 @tool 装饰器自动将 Python 函数转换为 Function Calling 格式
  • LangChain 的 create_openai_functions_agent 基于 Function Calling 构建 Agent,封装了工具定义→调用生成→执行→结果回传的完整流程
  • 实战中用于构建邮件助手:Agent 通过 Function Calling 读取邮件(read_emails)、起草回复(draft_reply)、发送邮件(send_email)
  • 系统提示词配合 Function Calling 决定 Agent 的行为边界(如”发送前必须得到用户确认”)

与 MCP 的关系

Function Calling 是单模型-单应用的工具调用机制,而 MCP(Model Context Protocol)是跨模型、跨应用的标准化工具调用协议。两者互补:

  • Function Calling 定义了”模型如何请求调用工具”
  • MCP 定义了”工具如何被发现、连接和标准化调用”

实用信息

工具定义示例

@tool
def read_emails(folder: str = "inbox") -> list:
    """
    读取邮箱中的邮件
 
    Args:
        folder: 邮箱文件夹名称(inbox, sent, draft)
 
    Returns:
        邮件列表,每封邮件包含 subject, from, body
    """
    # 实际实现
    return emails

适用场景

  • 需要 LLM 与外部系统交互的应用
  • 多步骤任务自动化(Agent)
  • 数据查询和操作
  • API 编排和集成

相关页面