核心概念
- 本质:Function Calling是大模型连接外部世界的“通道”。它让大模型能调用外部函数/API,从而获取实时信息、执行精确计算或操作本地系统。
- 常见形式:Plugins、OpenAI Actions、Tools工具集、GPTs(如联网检索、代码解释器)都是其应用。
大模型的三大缺陷(为什么需要Function Calling)
- 知识不全:无法覆盖所有垂直、非公开数据。
- 信息滞后:训练数据有截止日期,不知最新信息。
- 缺乏真逻辑:依赖统计规律,在精确计算(如数学)和确定性任务上不可靠。
解决方案:让大模型调用外部“真逻辑系统”(如计算器、数据库、地图API)来弥补这些缺陷。
Function Calling在架构中的位置
- 无FC:用户 → 大模型 → 回复(仅依赖模型内部知识)
- 有FC:用户 → 大模型 → 识别意图并返回函数调用指令 → 本地执行函数 → 将结果返回大模型 → 大模型生成最终自然语言回复
工作流程(4步)
- 定义函数:在本地写好要调用的函数(如XXX算法、查询天气、搜索地图)。
- 描述函数:用JSON格式告诉大模型这个函数叫什么、有什么参数、分别代表什么含义(这段描述本身也是Prompt,需要调优)。
- 大模型决策:用户输入自然语言任务后,大模型判断是否需要调用函数,并返回函数名和提取好的参数。
- 本地执行与回传:你的代码解析函数名和参数 → 调用真实的本地函数 → 将执行结果返回给大模型 → 大模型用自然语言组织最终答案。
多函数调用(链式调用)
大模型可以自动规划先调用哪个函数、后调用哪个函数。例如:
- 用户问:“北京三里屯附近的咖啡馆”
- 大模型先调用
get_location_coordinate获取三里屯的经纬度 - 拿到结果后,再自动调用
search_nearby_pois搜索该坐标附近的咖啡馆 - 最后整理成自然语言回答
关键要点
- 函数描述是另一种Prompt:写得不清晰,大模型可能选错函数或提取错参数。
- 上下文管理:每次函数调用的请求、响应都要加入到
messages对话历史中,大模型才能“记住”之前调用了什么、得到了什么结果。 - 支持并行/串行调用:现代模型(如GPT-3.5-turbo-1106后)可以一次返回多个函数调用请求。
总结一句话
Function Calling = 让大模型学会“调用工具”——它不自己计算结果,而是告诉你该用什么工具、传什么参数,你执行后再把结果给它,由它组织成你听得懂的话。