Function Calling(函数调用)介绍和示例
摘要: Function Calling 是一种机制,使大语言模型(如ChatGPT)能够通过调用外部函数/API来获取实时数据或执行操作,而非仅生成文本。其工作流程分为四步:开发者定义工具函数→模型解析用户请求并返回调用指令→应用程序执行函数→模型整合结果生成回答。例如,查询天气时,模型识别需求后调用天气API,最终返回结构化数据。该机制可连接实时数据、减少幻觉、执行操作并提取结构化信息。主流模
目录
2. Function Calling 的工作流程(四步曲)
1. 核心概念
通常情况下,大模型(如 ChatGPT)只能生成文本。当你问它“今天北京天气怎么样?”时,如果它没有联网,它只能说“我不知道,我的数据截止到 2023 年”。
Function Calling 的机制是:
开发者告诉 AI:“我有这些工具(函数/API),如果用户的问题需要用到这些工具,请不要直接胡编乱造,而是告诉我你需要调用哪个工具,以及参数是什么。”
注意: AI 不会直接运行代码。它只是输出一个 JSON 格式的指令,告诉开发者去运行什么代码。
2. Function Calling 的工作流程(四步曲)

图中的应用层实际可以是一个中台,暴露给LLM的输入输出功能介绍应该尽可能清晰。而调用的函数内容可以非常复杂来完成一个复杂的任务。在具体实践中实际上花的主要时间是在应用这一层关于LLM调用了api之后怎么处理输入得到输出的函数功能。
这是一个闭环的过程,通常包含以下 4 个步骤:
-
定义工具 (Define):开发者在发送请求给 LLM 时,附带一份“工具说明书”(通常是 JSON Schema 格式),描述有哪些函数可用、每个函数的作用、需要什么参数。
-
模型决策 (Decision):LLM 分析用户的 Prompt。如果它认为需要使用工具才能回答,它不会输出普通文本,而是输出一个结构化的函数调用请求(Function Call)。
-
执行代码 (Execute):这是关键一步。 你的应用程序(后端代码)接收到 LLM 的请求,在本地或服务器上真正执行这个函数(比如调用天气 API、查询数据库)。
-
生成回答 (Response):应用程序将函数的执行结果再次发回给 LLM。LLM 结合用户的原始问题和函数的执行结果,生成最终的自然语言回答。
3. 具体例子:查询天气
假设我们正在开发一个 AI 客服助手,用户问:“波士顿现在的天气怎么样?”
如果没有 Function Calling,模型无法回答。现在我们来看看有了 Function Calling 后的全过程。
第一步:开发者定义函数
我们在调用 LLM 接口时,告诉它我们有一个查天气的函数 get_current_weather。
(伪代码/JSON 结构示意)
// 发送给 AI 的可用工具列表
tools = [
{
"type": "function",
"function": {
"name": "get_current_weather",
"description": "获取指定城市的当前天气",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "城市名称,例如:San Francisco, CA"
},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"]
}
},
"required": ["location"]
}
}
}
]
第二步:用户提问 & 模型解析
用户输入:“波士顿天气如何?”
LLM 接收到问题和上面的工具列表。它经过“思考”,认为这个问题适合用 get_current_weather 来解决。于是,LLM 不返回“我不清楚”,而是返回如下数据:
// LLM 的回复 (Function Call)
{
"content": null,
"tool_calls": [
{
"function": {
"name": "get_current_weather",
"arguments": "{\"location\": \"Boston, MA\"}"
}
}
]
}
第三步:代码执行 (Application Layer)
你的后端程序捕获到 LLM 想要调用函数。
程序读取 name 是 get_current_weather,参数是 Boston, MA。
程序调用第三方的天气 API(例如 OpenWeatherMap)。
API 返回结果: {"temperature": "22", "unit": "celsius", "description": "sunny"}
第四步:最终回答
你的程序将 API 的结果构造成一条新的消息,发回给 LLM。
发送给 LLM 的上下文:
-
用户:波士顿天气如何?
-
助手:(调用函数 get_current_weather, 参数 Boston)
-
系统(Function 结果): {"temperature": "22", "unit": "celsius", "description": "sunny"}
LLM 看到结果后,用自然语言组织最终答案:
“波士顿现在天气晴朗,气温大约是 22 摄氏度。”
4. 为什么要用 Function Calling?
-
连接实时数据:让 LLM 能够回答“现在的股价”、“今天的头条新闻”、“我的快递到哪了”等实时问题。
-
执行操作:不仅仅是聊天,还能让 AI 真正做事。比如“帮我把这封邮件发给张三”、“帮我在日历上定个明天下午 3 点的会”。
-
结构化数据提取:你可以定义一个提取信息的函数(比如 extract_user_info),强迫 LLM 将一段乱糟糟的文本(“我叫小明,住在北京,电话是123”)转化为完美的 JSON 格式。
-
减少幻觉:通过依靠确定的 API 返回值,而不是依靠模型“脑补”,可以大大提高回答的准确性。
5. 主流模型支持
需要注意的是,不是所有的模型都支持Function Calling功能,具体需要查看相关模型的文档或SDK。例如文心一言支持:ERNIE-Bot-SDK/docs/guides/function_calling.md at develop · peterlcm/ERNIE-Bot-SDK · GitHub
目前,由于Openai提出的协议功能影响范围太广。新出的模型大多支持该功能。另外,还有一些专门为 Function Calling 微调的小模型用来支持资源有限的设备部署。
6. 参考文献
一文搞懂 Function Calling(函数调用) - 知乎
Google Gemini 3 Pro
更多推荐



所有评论(0)