大模型工具调用(Function Calling)是什么?原理与实战
大模型工具调用(Function Calling)是指:让大模型在回答时不直接编造答案,而是输出”该调用哪个函数 + 一段 JSON 参数”,由你的程序真正执行这个函数,再把结果回填给模型继续作答。 一句话——模型负责”决定调用什么、传什么参数”,程序负责”真正去做、拿到结果”,两者配合就能让大模型查数据库、调 API、发邮件、查天气,而不只是聊天。
这篇讲清它的工作原理、一个最小实战流程、和相邻概念的区别,以及为什么它是 AI 智能体(Agent) 的基础能力。读完你能看懂主流大模型的 Function Calling 文档,并知道接入时容易踩哪些坑。
为什么需要工具调用
大模型本质是一个”文字接龙”的概率模型,它有两个天生短板:
- 不知道实时信息:训练数据有截止时间,问它”今天北京天气""这个订单发货了吗”,它只能瞎猜。
- 不能改变世界:它能写出一封邮件的内容,但没法真的把邮件发出去,也没法真的下单、写数据库。
工具调用就是给模型装上”手和眼睛”。你预先告诉模型有哪些函数可用(名字、用途、参数格式),模型在需要时主动说”请帮我调用 get_weather,参数是 {"city": "北京"}”,剩下的查询和执行交给你的代码。这样模型既能拿到准确的实时数据,又能驱动真实动作。
工具调用是怎么工作的
整个过程是一次”模型和程序的接力”,拆成有序步骤就清晰了:
- 你声明工具:在请求里附上一份工具清单,每个工具包含函数名、自然语言描述、参数的 JSON Schema(哪些字段、什么类型、是否必填)。描述写得越清楚,模型越知道什么时候该用它。
- 模型决定是否调用:模型读完用户问题,判断”光靠我答不了,需要某个工具”。它不会真的执行函数,而是输出一个结构化结果——要调哪个函数、以及一段符合 Schema 的 JSON 参数。
- 程序执行函数:你的后端代码拿到这段 JSON,解析出函数名和参数,真正去调用对应的代码或第三方 API,拿到返回结果(比如天气数据、订单状态)。
- 结果回填给模型:你把执行结果作为一条新消息塞回对话,再次请求模型。
- 模型组织最终回答:模型拿到真实数据后,用自然语言整理成给用户看的答案。
打个比方:模型像一个坐在前台、手边有一摞功能按钮说明书的接待员。客人问问题时,它不亲自跑去后厨,而是填一张”请帮我按这个按钮、参数是这些”的工单(JSON),后台员工(你的程序)按工单办事、把结果递回来,接待员再笑着告诉客人。模型从头到尾只负责”读懂需求、填对工单、解释结果”。
关键点:模型输出的只是”调用意图”,执行权和安全控制始终在你手里。这意味着你可以校验参数、加权限判断、拒绝危险操作——而不是让模型为所欲为。
一个最小实战流程
以”查天气”为例,走一遍完整链路(具体的 API 字段名、端点以官方文档为准):
第一步,定义工具。用 JSON Schema 描述函数:
{
"name": "get_weather",
"description": "查询指定城市的实时天气",
"parameters": {
"type": "object",
"properties": {
"city": { "type": "string", "description": "城市名,如 北京" }
},
"required": ["city"]
}
}
第二步,发请求。把用户问题”北京今天热不热”和上面的工具清单一起发给模型。
第三步,接住模型的调用意图。模型不会直接回答,而是返回类似:
{ "tool_call": { "name": "get_weather", "arguments": { "city": "北京" } } }
第四步,执行并回填。你的代码解析出 city=北京,调用真实的天气接口,拿到”32 度、晴”,再把这条结果发回模型。
第五步,模型作答。模型综合数据回复:“北京今天 32 度、晴,挺热的,注意防晒。”
一轮工具调用就完成了。复杂场景里模型可能连续多轮调用(先查用户 ID,再用 ID 查订单),这正是 Agent 的雏形。
工具调用、Agent、MCP 怎么区分
这几个概念常被混着说,给你一组判断口诀:
| 概念 | 一句话定位 | 关系 |
|---|---|---|
| 工具调用 / Function Calling | 模型一次”调函数、传参数”的能力 | 最底层的原子能力 |
| AI Agent(智能体) | 模型自主地多轮规划、连续调工具、直到完成目标 | 把工具调用串成循环 |
| MCP | 一套标准协议,规范”工具怎么对接给模型” | 工具调用的”统一插座” |
简单说:工具调用是”会用一个工具”,Agent 是”自己想清楚先用哪个再用哪个”,MCP 是”让各种工具用同一种插法接进来”。想搞懂 Agent 如何用循环把工具调用串起来,可以读 ReAct 智能体原理(规划中)。
能用工具调用做什么
只要”模型需要外部数据或要触发真实动作”,工具调用就派上用场:
- 查实时/私有数据:天气、股价、内部订单、知识库、数据库记录。
- 触发动作:发邮件、建工单、下单、更新 CRM、调用内部审批流。
- 结构化输出:让模型严格按 Schema 吐出 JSON,方便程序消费(这也是 Function Calling 的常见妙用)。
- 搭数字员工:客服、销售助理、运维机器人——本质都是”大模型 + 一堆工具”。
怎么上手
不必从零写代码。先用平台体验:主流对话工具和低代码平台都内置了工具/插件机制,能让你直观感受”模型自己决定调用”的过程。想动手搭一个能调工具的助手,可以从可视化 Agent 平台入手;要把它做成企业里真正干活的数字员工,再考虑工程化接入和权限控制。
常见问题
问:工具调用就是模型自己去执行函数吗? 不是。模型只输出”要调哪个函数、参数是什么”这段 JSON,真正执行的是你的程序。模型没有执行权,这恰好是安全可控的关键。
问:模型生成的参数 JSON 会出错吗?怎么办? 会。模型偶尔漏字段、传错类型或把可选项当必填。务必在执行前用 Schema 校验参数,校验失败就把错误信息回传给模型让它重试,别直接拿去执行。
问:Function Calling 和直接让模型输出 JSON 有什么区别? 直接让模型”输出 JSON”全凭它自觉,格式容易跑偏;Function Calling 是模型原生支持的结构化通道,有 Schema 约束,稳定性高得多,还能让模型自主判断”这次该不该调、调哪个”。
问:一次能调用多个工具吗? 可以。多数模型支持单轮返回多个调用,或多轮连续调用。多轮连续调用 + 自主规划,就是 Agent 的核心机制。
问:哪些大模型支持工具调用? 主流大模型基本都支持,但参数命名、返回结构、是否支持并行调用各有差异,接入时以你所选模型的官方文档为准,别照搬别家的字段名。
👉 看看 AI 数字员工落地指南,或了解 数字员工搭建实战课。需要为企业落地方案,欢迎找我们聊 企业服务。