“Function Calling(函数调用)”是大语言模型(LLM)中一项非常重要的能力,它让模型不再只是“聊天”,而是能主动调用开发者提供的函数、API 或插件来完成任务。
Function Calling 是让大模型根据你的输入,自动调用你定义的函数,并用真实数据返回结果的机制。
核心思想就是:统一格式、规范描述
想象你和 AI 说:
“查一下上海明天的天气。”
以前的模型只能根据训练数据“编造”天气内容。 有了 Function Calling,它会:
理解你想“查天气”
生成一个“函数调用请求”,比如:
{
"name": "get_weather",
"arguments": { "location": "上海", "date": "2025-07-25" }
}
调用你后台定义好的 get_weather
函数(如调用真实天气
API)
把结果传给模型,让它组织成自然语言回答你:
“明天上海多云,最高温度 31°C,最低温度 26°C。”
用户 → 模型 → [生成函数调用意图] → 开发者提供的函数 → 获取结果 → 模型生成回应
你定义一个函数接口:
{
"name": "get_stock_price",
"description": "获取指定股票的当前价格",
"parameters": {
"type": "object",
"properties": {
"symbol": {
"type": "string",
"description": "股票代码,比如 AAPL 或 TSLA"
}
},
"required": ["symbol"]
}
}
用户说:
“帮我查一下特斯拉的股价。”
模型就会返回:
{
"function_call": {
"name": "get_stock_price",
"arguments": "{ \"symbol\": \"TSLA\" }"
}
}
开发者接收到后,调用实际的股价 API,然后把结果返回模型。模型最后会说:
“特斯拉当前股价为 288.64 美元。”
应用场景 | 调用函数 |
---|---|
查天气、查汇率、查股价 | 实时数据 API |
安排日程、添加事项 | 日历接口 |
搜索数据库 | 各类 SQL / 检索函数 |
控制机器人 / 硬件 | 调用底层控制函数 |
生成图片 / 图表 | 调用绘图函数 |
AI Agent 调度 | 一个模块调用另一个模块 |
项目 | Function Calling | 插件 |
---|---|---|
粒度 | 精细(函数级) | 粗一些(整个应用) |
控制权 | 开发者自己写函数 | 第三方服务提供功能 |
部署 | 本地/私有部署方便 | 插件需要注册开放平台等 |
Function Calling 让大模型从“语言助手”升级为“多功能工具协调者”,是构建智能 Agent、企业 Copilot 等应用的核心能力之一。
从System Prompt转为FunctionCalling 可以节省token开销,也免得自己写重试逻辑。
每家的大模型的FunctionCalling格式都不一样,搞一个随便切换大模型的其实还是挺烦的。
所以市面上SystemPrompt和FunctionCalling都并存着。