Function Calling
大语言模型调用外部工具的核心协议机制,让 LLM 从”只能说”升级为”能做事”
简介
Function Calling(函数调用)是 OpenAI 在 2023 年 6 月随 GPT-3.5 Turbo 首次引入、后在 GPT-4 Turbo 中大幅增强的核心能力。它允许大语言模型在对话过程中识别何时需要调用外部函数,并生成结构化的函数调用请求(包含函数名和参数),由应用程序执行后将结果返回给模型继续推理。
Function Calling 是 AI Agent 能够”做事”的核心基础设施——没有它,LLM 只能生成文本;有了它,LLM 可以读邮件、查天气、操作数据库、调用 API 等。
工作原理
调用流程
- 定义工具:开发者在 API 请求中提供可用函数的 JSON Schema 描述(函数名、参数类型、参数说明)
- 模型决策:LLM 根据用户意图判断是否需要调用函数、调用哪个函数、传什么参数
- 生成调用:模型输出结构化的函数调用请求(不直接执行)
- 应用执行:应用程序接收调用请求,在本地执行函数
- 结果回传:将函数执行结果返回给模型
- 继续推理:模型基于函数结果生成最终回复
关键特性
- 模型不直接执行函数:模型只生成调用请求,实际执行由应用代码完成
- 支持并行调用:一次响应中可以包含多个函数调用请求
- 结构化输出:参数以 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 编排和集成
相关页面
- AI Agent 智能体 — Function Calling 是 Agent 的核心能力
- LangChain — 封装了 Function Calling 的开发框架
- OpenAI — Function Calling 的提出者
- MCP 模型上下文协议 — Function Calling 的标准化扩展
- AI编程开发