简介:工具调用(Function Call)是大模型与外部世界交互的核心机制,让模型从“能说”进化为“会做”。本文从定义出发,系统讲解工具调用的背景价值、核心组成、完整工作流程与底层原理,并结合天气查询实例逐步拆解交互细节,同时梳理典型应用场景、易混概念辨析与落地注意事项,帮助开发者快速建立完整认知。
工具调用(Function Call,也称函数调用、Tool Use、工具使用)是大型语言模型(LLM)与外部世界交互的一种标准机制。它允许模型在生成回复的过程中,根据用户意图“主动”发起对预定义函数或工具的调用请求,由外部程序执行后将结果回传给模型,最终整合为自然语言答案。
一句话概括:它让模型不仅能“说”,还能“做”。
理解这一机制的关键,在于分清模型与外部程序的职责边界:
与传统的纯文本生成不同,工具调用引入了“结构化交互”:模型输出的不是一段自然语言,而是一份结构化的调用请求(通常是JSON格式,包含函数名与参数),外部系统解析并执行后,再将结果以约定格式送回对话上下文。
可以从三个视角加深理解:
传统大模型存在几类天然局限,工具调用正是为弥补这些短板而生:
工具调用带来的价值:
从工程角度看,它还有一个重要价值:能力扩展无需重训。开发者只需在请求中声明新的工具(一段描述加参数结构),模型即可“学会”使用它,显著提升大模型应用的迭代速度。
大模型工具调用最重要的两个组成成分是工具的定义与工具的执行。
开发者预先向模型声明可调用的工具,包含三要素:
示意性的工具定义(业界通用的JSON格式):
{"name": "get_weather","description": "查询指定城市在指定日期的天气情况","parameters": {"type": "object","properties": {"location": { "type": "string", "description": "城市名称" },"date": { "type": "string", "description": "日期,如'今天'" }},"required": ["location", "date"]}}
由开发者的代码完成:接收到模型给出的工具名与参数后,程序负责校验参数、调用真实的服务或接口、处理异常,并把执行结果整理成模型可读的形式回传。
需要注意一个常见误区:大模型本身不执行任何工具。它只输出“我想调用什么、用什么参数”的意图,执行权完全掌握在开发者程序手中——这正是这套机制安全可控的基础。
以经典场景“北京今天多少度?”为例,将整个链路逐步拆解:
第1步:请求发起。 用户通过LLM API向模型提出问题,同时把可用工具的描述信息(工具名 get_weather 及参数 location、date 的定义)随请求一并发送给模型。
第2步:模型决策。 模型结合用户问题与工具清单判断:这是实时天气问题,自身静态知识无法回答,且存在匹配的工具,于是决定调用天气工具。(若模型判断无需借助工具,则直接生成自然语言回复,流程提前结束。)
第3步:生成调用请求。 模型输出结构化调用请求:工具名 get_weather,参数 location=”北京”、date=”今天”。此时模型输出的是结构化数据,而非给用户的最终答案。
第4步:客户端执行。 客户端程序解析出工具名与参数,实际执行 get_weather 工具(例如内部再请求某个天气服务),得到结构化结果:{“temperature”: 28, “unit”: “℃”}。
第5步:结果回传。 客户端将工具执行结果通过LLM API再次发送给模型,作为对话上下文的一部分(通常以“工具结果”角色的消息附加在消息列表中)。
第6步:整合作答。 模型基于工具结果与历史交互信息,生成面向用户的自然语言回答:“北京今天气温28℃。”客户端将其呈现给用户。
几点延伸理解:
以百度智能云为代表的大模型服务平台,通常在模型API中原生支持函数调用/工具调用能力,开发者按照文档组装工具描述与消息结构即可接入,无需自行微调模型。
回到定义本身:大模型工具调用(Function Call / Tool Use)是让LLM从“文本生成器”进化为“任务执行者”的关键机制——模型负责决策(是否调用、调用什么、传什么参数),开发者程序负责执行,结果回传后由模型整合为自然语言回复。
它的价值在于弥补大模型知识静态、计算不精、无法触达外部系统的三大局限,并以“声明即可扩展”的方式让应用快速获得新能力;它的边界在于依赖工具描述质量、参数可靠性与执行侧的安全管控。理解了“模型决策、程序执行、结果回流”这一闭环,也就抓住了大模型工具调用的本质,进而为构建检索增强应用、智能体以及更复杂的企业级AI系统打下坚实基础。