Function Calling:大模型怎么调用工具,为什么是Agent的基础
什么是Tool/Function?
在大模型应用的语境下,Tool(工具)或Function(函数),本质上是一段预先定义好的代码逻辑,大模型本身并不执行它,而是告诉应用程序该执行哪行代码
Function Calling即调用外部函数
大模型是在一个巨大的静态数据集上训练的,知识能力精确性都有局限性
Function Calling就是给这个聪明的“大脑”配备了手和脚,让他能够与外部世界互动,从而克服上述局限性
和普通回答有什么区别?
普通回答和Function Calling 有本质区别,普通回答是说,Function Calling是做
| 维度 | 普通问答 (Chat Completion) | Function Calling (Tool Use) |
|---|---|---|
| 输出内容 | 纯自然语言文本 | 结构化数据(JSON/Object),明确指定函数名和参数 |
| 知识来源 | 仅依赖训练数据 (截止训练日) | 实时外部数据(通过工具获取) |
| 准确性 | 容易幻觉 (瞎编数据) | 高可信度(基于真实 API 返回) |
| 执行动作 | 无法执行动作,只能“说” | 可以触发行动(下单、发邮件、查库) |
| 可控性 | 输出格式难以严格约束 | 输出格式严格遵循JSON,便于程序解析 |
| 典型场景 | 闲聊、写作、翻译、总结 | 查询实时信息、操作业务系统、多步任务规划 |
调用工具本质上发生了什么?
第一步:开发者定义和提供工具
在最开始,你需要告诉大模型他有那些工具可用,就像你给助手一个工具箱,并告诉它每个工具的作用
第二步:大模型响应,返回函数调用指令
当用户提出一个请求,你的应用程序将用户问题和上述工具一并发给大模型,大模型在处理请求后,会识别出它需要调用一个外部工具来获取信息,他的响应不会是常规的文本回复,而是一个结构化的函数调用参数
第三步:应用程序执行函数并再次调用大模型
这是整个流程中最关键的步骤,你的应用程序代码接收到大模型的响应之后,需要完成检查响应、解析指令、执行函数、再次调用大模型等工作
最后一步
大模型接收到所有的信息后,利用函数执行的结果,生成一个自然流畅的最终回复给用户
为什么Function Calling是Agent的基础
如果说大模型是“大脑”,那么Function Calling就是“神经系统”,连接着大脑和手脚(工具),没有它,Agent就只是一个只会动嘴,不会动手的小笨蛋
被动回答->主动回答
没有Function Calling:你问他“怎么订会议室”,他会给你写一篇《订会议室指南》,有了Function Calling之后,你问他”帮我定明天下午3点的会议室“,他会调用开发者设定好的函数,真正完成预定,并返回订单号
这就是Agent(智能体)产生的质变—能够感知环境并采取行动以实现目标的实体
复杂任务规划的前提(ReAct模式)
高级Agent往往需要多步推理。需要模型具备链式调用能力,连续准确的选择工具并提取参数
如果Function Calling不准,整个链条就会断裂
解决”幻觉“与”时效性“的有效方案
Agent的核心价值是解决实际问题,而实际问题往往涉及私有数据或者实时状态
靠微调让模型记住所有库存信息不可能,数据天天变。靠Prompt把几百万行数据塞进去,也不太现实。通过Function Calling,让模型在需要时按需求定向查询,这让Agent拥有了”无限的知识库“和”实时感知力“