1. 概述
Function Calling 是大语言模型(LLM,例如 GPT 系列)提供的一种机制,使模型能够在对话过程中调用外部函数、API 或本地方法。
它解决了模型 只会回答、不知道外部世界最新信息 的局限,让 LLM 从"聊天助手"变成"可操作的智能代理"。
2. 工作原理
基本流程
-
开发者注册函数
- 定义函数名称、描述(description)、参数结构(parameters)。
-
用户发起自然语言请求
- 模型分析语义。
-
模型决定是否调用函数
- 如果与函数描述匹配 → 输出 JSON 调用请求。
- 如果能直接回答 → 直接输出自然语言。
-
系统执行函数
- 根据 JSON 参数调用外部逻辑/API。
-
返回结果给模型
- 模型基于结果生成用户可读的回答。
3. 函数描述的作用
函数描述(description + parameters)相当于 本地的 Prompt,指导模型何时使用函数、如何构造参数。
例如:
json
{
"name": "getWeather",
"description": "获取指定城市和日期的天气情况(气温、晴雨、多云、雪)。当用户提到天气、气温、冷热、是否下雨时调用。",
"parameters": {
"type": "object",
"properties": {
"city": { "type": "string", "description": "城市名称,例如 北京" },
"date": { "type": "string", "description": "日期,格式 YYYY-MM-DD" }
},
"required": ["city"]
}
}
- description → 像局部 Prompt,告诉模型什么时候用。
- parameters → 约束输入,避免模型乱传参。
4. 识别机制
模型判断是否调用函数,主要依赖以下三点:
-
函数描述(本地 Prompt)
- 描述越清晰,调用越精准。
-
用户语义
- 模型先理解用户输入,再匹配函数用途。
-
上下文/系统 Prompt
- 可以在系统消息中指导模型"仅在必要时调用函数"。
5. 设计函数描述的最佳实践
-
明确用途
- 写清楚函数能解决什么问题。
-
触发条件
- 描述用户可能使用的关键词或场景。
-
参数语义化
- 给每个参数写清楚含义、示例。
-
避免模糊
- 不要只写"天气查询",要写"气温、晴雨、多云、雪"。
-
覆盖常见问法
- 例如天气函数可以提及"天气、气温、冷热、下雨"。
6. 示例
例 1:查询天气
用户:
"北京明天会下雨吗?"
模型输出调用:
json
{
"name": "getWeather",
"arguments": { "city": "北京", "date": "2025-09-03" }
}
系统执行 API → 返回:
json
{ "temperature": 28, "condition": "小雨" }
模型回答:
北京明天 28°C,有小雨。
例 2:查订单状态
用户:
"订单 12345 的物流情况?"
模型输出调用:
json
{
"name": "getOrderStatus",
"arguments": { "orderId": "12345" }
}
7. 总结
- Function Calling = 模型调用外部函数的机制
- 函数描述 = 本地 Prompt,决定模型是否、如何调用函数
- 本质:自然语言理解 → 函数选择 → 参数生成 → 系统执行 → 结果转化
它让 LLM 从"会聊天"升级为"会办事",是构建智能应用的关键能力。