Function Calling是什么?
你有没有想过,AI聊天机器人明明什么都不会做,却能帮你查天气、订机票、写代码?
秘密就在一个听起来很技术的词里:Function Calling(函数调用)。
用一句话定义:Function Calling 是让大语言模型"调用外部工具"的能力。模型本身不会干活,但它能判断你需要什么,然后替你调用对应的函数去执行。
打个比方:AI是前台,函数是员工
想象你去餐厅吃饭。你是用户,餐厅服务员是AI,厨房里的厨师和收银台是各种"函数"。
你不会直接冲进厨房炒菜,对吧?你会跟服务员说:“我要一份宫保鸡丁。”
服务员(AI)听懂了你的需求,然后去厨房(调用函数)下单。厨师做好菜后,服务员把结果端给你。
在这个过程中:
- 服务员不炒菜,但知道该叫谁炒菜
- 厨师不知道你是谁,但能把菜做好
- 你不用认识厨师,跟服务员说一声就行
Function Calling 就是这个道理。AI负责"理解意图+决策调用",函数负责"具体执行"。
它是怎么工作的?
整个过程分三步:
第一步:你把函数"告诉"AI
调用AI API时,除了传用户的问题,还要传一份"函数清单"。比如:
{
"functions": [
{
"name": "get_weather",
"description": "查询指定城市的当前天气",
"parameters": {
"city": {"type": "string", "description": "城市名称"}
}
},
{
"name": "create_todo",
"description": "创建一个待办事项",
"parameters": {
"title": {"type": "string", "description": "事项标题"},
"due_date": {"type": "string", "description": "截止日期"}
}
}
]
}
这就像给服务员一本菜单——告诉他有哪些菜可以做。
第二步:AI决定调哪个函数
用户问:“北京今天天气怎么样?”
AI分析后,决定调用 get_weather(city="北京")。它会返回一段结构化的响应,告诉系统"我需要调这个函数,传这些参数"。
第三步:系统执行函数,把结果喂回AI
你的程序拿到这个决定,真正去调用 get_weather 函数,拿到天气数据(比如"北京,晴,25°C"),再把结果放回对话里。
AI最后生成自然语言回复:“北京今天晴天,气温25度,适合出门。”
整个过程对你来说几乎是透明的——你只管说话,AI负责协调。
Function Calling能干什么?
🌤 查实时数据
AI本身不会联网,但可以调用天气API、股票API、新闻API。你问"今天金价多少",AI帮你调金融数据接口,再把结果用自然语言告诉你。
📝 操作你的工具
AI帮你写待办事项、发邮件、创建日历事件。它不需要知道每个工具的细节,只要你能把接口定义好,它就能用。
💻 写代码和执行代码
这是目前最热门的应用。AI读你的代码,调用代码执行函数,运行结果,再根据反馈修正代码。很多AI编程工具就是这么工作的。
🤖 构建AI Agent
单个Function Calling只能做一件事。但当你给AI一堆函数——查数据库、操作文件系统、调用外部API——它就变成了一个能自主完成任务的"代理"。这就是AI Agent的基础。
和"普通聊天"有什么区别?
| 对比项 | 普通聊天 | Function Calling |
|---|---|---|
| 输入 | 你的问题 | 你的问题 + 函数清单 |
| AI输出 | 文字回复 | 函数调用指令 或 文字回复 |
| 能力边界 | 模型训练时的知识 | 你给的所有工具 |
| 实时性 | 只能用训练数据 | 可以获取实时信息 |
| 执行能力 | 只能说话 | 可以真正做事 |
实际代码长什么样?
以OpenAI的API为例,调用Function Calling只需要多传一个 functions 参数:
import openai
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[
{"role": "user", "content": "帮我查一下上海的天气"}
],
functions=[
{
"name": "get_weather",
"description": "获取城市天气",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string"}
},
"required": ["city"]
}
}
]
)
AI返回的不是文字,而是一个 function_call 对象,告诉你它想调用什么函数、传什么参数。你的程序再执行这个函数,把结果送回API,AI就能生成最终回复了。
新手要注意的3个坑
⚠️ 函数描述要写清楚
AI是根据你写的 description 来决定是否调用这个函数的。描述写得模糊,AI就会犹豫或者用错。比如写"获取信息"就不如写"查询指定城市的实时天气和温度"准确。
⚠️ 参数定义要完整
函数清单里的 parameters 是AI判断怎么传参的依据。如果参数定义不全,AI可能会漏传必要字段,或者传错类型。
⚠️ 要有容错处理
AI不是百分百准确。它可能调错函数、传错参数、或者在该调用时选择不调用。你的程序要做好这些情况的兜底处理。
总结
Function Calling 是AI从"聊天玩具"变成"实用工具"的关键一步。
它让AI拥有了"手脚"——不再只是空谈,而是能真正帮你查数据、写代码、操作工具。理解了这个概念,你就理解了几乎所有AI Agent、AI编程助手、AI自动化流程的底层原理。
下次你用AI帮你做事的时候,不妨想一想:它背后是不是在调某个函数?