我来为你详细介绍 Function Calling(函数调用)这一重要概念。
什么是 Function Calling?
Function Calling 是一种让大语言模型(LLM)能够调用外部工具或函数的能力。它使模型不仅能生成文本,还能与外部系统交互,执行计算、查询数据库、调用 API 等操作。
简单来说,它让 AI 从"只会说话"变成了"能动手做事"。
核心工作原理
scss
体验AI代码助手
代码解读
复制代码
┌─────────────┐ 1. 用户请求 ┌─────────────┐
│ 用户 │ ───────────────────> │ LLM │
└─────────────┘ └──────┬──────┘
│
▼
┌───────────────┐
│ 分析是否需要 │
│ 调用工具/函数 │
└───────┬───────┘
│
┌─────────────┴─────────────┐
▼ ▼
┌──────────┐ ┌──────────┐
│ 需要调用 │ │ 直接回答 │
└────┬─────┘ └────┬─────┘
│ │
▼ ▼
┌─────────────────┐ ┌─────────────┐
│ 生成函数调用参数 │ │ 返回文本 │
│ (函数名+参数) │ │ 回答 │
└────────┬────────┘ └──────┬──────┘
│ │
▼ │
┌─────────────────┐ │
│ 系统执行函数 │ │
│ (获取结果) │ │
└────────┬────────┘ │
│ │
▼ │
┌─────────────────┐ │
│ 将结果返回给 │─────────────────┘
│ LLM │
└─────────────────┘
典型应用场景
| 场景 | 说明 | 示例 |
|---|---|---|
| 实时信息获取 | 模型知识有截止日期,需要查询最新数据 | 查询天气、股票价格、新闻 |
| 精确计算 | 大模型数学计算容易出错 | 复杂数学运算、数据分析 |
| 数据库操作 | 需要查询或操作结构化数据 | SQL 查询、用户信息检索 |
| 外部 API 调用 | 与第三方服务集成 | 发送邮件、创建日程、下单 |
| 代码执行 | 运行代码获取结果 | Python 计算、代码验证 |
实际示例
示例:天气查询助手
用户输入:
"北京今天天气怎么样?"
Function Calling 流程:
-
模型判断:需要调用
get_weather函数 -
生成调用参数:
json 体验AI代码助手 代码解读 复制代码 { "function": "get_weather", "arguments": { "city": "北京", "date": "2026-03-08" } } -
系统执行:调用天气 API,返回结果
json 体验AI代码助手 代码解读 复制代码 { "temperature": "15°C", "condition": "晴", "humidity": "45%" } -
模型生成最终回答:
"北京今天天气晴朗,气温 15°C,湿度 45%,是个适合外出活动的好天气!"
技术实现要点
1. 函数定义(Schema)
需要向模型提供可用函数的详细描述:
json
体验AI代码助手
代码解读
复制代码
{
"name": "get_weather",
"description": "获取指定城市的天气信息",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "城市名称,如'北京'"
},
"date": {
"type": "string",
"description": "日期,格式YYYY-MM-DD"
}
},
"required": ["city"]
}
}
2. 调用与响应流程
python
体验AI代码助手
代码解读
复制代码
# 伪代码示例
def chat_with_functions(user_message):
# 1. 发送用户消息 + 可用函数列表给模型
response = llm.chat(
messages=[{"role": "user", "content": user_message}],
functions=[get_weather_schema, calculate_schema]
)
# 2. 检查模型是否要求调用函数
if response.function_call:
function_name = response.function_call.name
arguments = response.function_call.arguments
# 3. 执行函数
result = execute_function(function_name, arguments)
# 4. 将结果返回给模型,生成最终回答
final_response = llm.chat(
messages=[
{"role": "user", "content": user_message},
{"role": "assistant", "function_call": response.function_call},
{"role": "function", "name": function_name, "content": result}
]
)
return final_response.content
# 无需调用函数,直接返回答案
return response.content
主要优势
| 优势 | 说明 |
|---|---|
| 准确性 | 通过外部工具获得精确结果,而非依赖模型"猜测" |
| 时效性 | 突破知识截止日期限制,获取实时信息 |
| 扩展性 | 无限扩展模型能力,连接任意系统 |
| 可靠性 | 确定性操作(如计算、数据库查询)更准确 |
| 安全性 | 敏感操作在系统侧控制,而非模型直接执行 |
主流模型的支持情况
- OpenAI GPT-4/GPT-3.5:原生支持 Function Calling
- Claude (Anthropic) :支持 Tool Use
- Google Gemini:支持 Function Calling
- 开源模型(如 Llama、Qwen 等):通过微调或特定格式支持
与类似概念的区别
| 概念 | 区别 |
|---|---|
| RAG (检索增强生成) | RAG 是先检索文档再生成回答;Function Calling 是调用可执行函数 |
| 插件 (Plugins) | 插件通常是预定义的集成;Function Calling 更灵活,可动态定义函数 |
| Agent (智能体) | Function Calling 是 Agent 的核心能力之一,Agent 还包含规划、记忆等更复杂的逻辑 |
总结
Function Calling 是连接大语言模型与外部世界的桥梁,它让 AI 从"纸上谈兵"进化为"知行合一"。这是构建实用 AI 应用的关键技术,也是实现更强大 AI Agent 的基础能力。
链接:https://yuanzhuo.bnu.edu.cn/user/923073fd820cd15a12a9fbb84b15804dc06e605e/about 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
