
Function Calling(常被称为函数调用或工具调用)让大模型从"只会聊天"升级成"能动手做事":它输出的是"要调用的函数和参数",真正执行的却是你的代码。你让模型"查北京明天天气",它若只能凭记忆编温度就毫无价值;而支持 Function Calling 的应用能真的返回实时天气。靠的不是模型自己知道,而是它学会了用结构化方式表达"我需要调一个查天气的接口",把"干活"这件事交还给你的程序。理解它,是看懂现代 AI 应用怎么接上真实世界的第一步。

先看结论
| 你以为的 AI | 实际该做的 AI | Function Calling 的作用 |
|---|---|---|
| 模型自己"知道"答案 | 模型承认不知道,转而调工具 | 把"动作"从模型里剥离出来 |
| 答案靠记忆,易错 | 答案来自真实接口返回 | 结果可验证、可实时 |
| 纯文本输入输出 | 结构化输出函数名+参数 | 你的程序能直接执行 |
如果你希望 AI 能查实时数据、操作业务系统,而不是只陪聊,Function Calling 是绕不开的基础能力。
它解决了什么问题
大模型本质上是"文本进、文本出"的概率模型。它擅长语言,但不擅长两件事:一是获取训练数据之外的新鲜信息(天气、股价、库存),二是执行动作(调用外部工具、下单、发邮件、改数据库)。硬要让它"直接回答",它只能靠记忆编,也就是幻觉。想看 Function Calling 怎么落地到开发,可参考 AI 编程技能教程。
Function Calling 的解法是:把"执行动作"这件事从模型身上拿掉,改成让模型输出一个结构化指令——"我想调用 get_weather,参数是城市=北京"。至于这个函数怎么查、查哪个接口,全由你的代码实现。模型只负责"在什么情况下该调哪个函数、填什么参数",真正产生真实结果的是你的程序。
核心概念与三个角色
理解 Function Calling,关键是分清三方职责:
- 函数声明(Schema):你提前告诉模型"有哪些函数可用、每个要什么参数"。这通常是一段 JSON(可看 JSON 教程 了解格式),描述函数名、用途和参数类型,相当于给模型一份"工具清单"。
- 模型:读用户问题和工具清单,决定调不调、调哪个、填什么参数,并输出结构化结果(而不是最终答案)。
- 你的执行代码:收到模型给的函数名和参数,真正去调用 API、查库、执行动作,再把结果返回给模型。
注意:Function Calling 里模型从不亲自执行函数,它只是"建议调用"。是否执行、怎么执行,完全在你的代码手里,这也是安全控制的落点。

一次调用是怎么发生的
以"查北京天气"为例,完整链路是:
- 你先把
get_weather的函数声明连同用户问题一起发给模型。 - 模型判断:要回答这个问题,需要调
get_weather,参数是city=北京,于是输出结构化调用请求。 - 你的程序解析这个请求,真正去请求天气接口,拿到"晴,22℃"。
- 你把"晴,22℃"作为新消息回传给模型。
- 模型用这个真实结果组织成自然语言回答用户。
整个过程里,模型两次出场:第一次决定"调什么",第二次把"真实结果"翻译成人话。真正发生网络请求的是第 3 步的你方代码。
怎么开始用
对开发者来说,最小可跑的骨架是先声明函数,再解析模型的输出。示意如下:
{
"name": "get_weather",
"description": "查询指定城市的当前天气",
"parameters": {
"type": "object",
"properties": {
"city": { "type": "string", "description": "城市名" }
},
"required": ["city"]
}
}
落地 Function Calling 记住三点:一是函数描述要写清楚用途和参数,模型靠它判断何时调用;二是执行前做权限与参数校验,别让模型传来的内容直接进危险操作;三是把函数返回结果再喂回模型做润色,而不是直接把原始 JSON 丢给用户。
配置好函数声明后,先安装对应 SDK 并运行一次最小示例:检查模型是否输出了预期的函数名和参数;若调用失败或参数缺失,按报错修复后重试验证。(以下示例依据各家大模型官方文档,具体字段以你用的 SDK 版本为准。)
总结
Function Calling 是"让 AI 动手"的基石:它让模型学会用结构化方式表达"我想调某个函数",而真实执行交给你的代码。它既解决了模型知识截止、不会实时数据的问题,又把安全与可控性留在开发者手里。理解了它,也就理解了为什么今天的 AI 能查天气、能下单、能操作你的系统。
常见问题
Q:Function Calling 和 Agent 是一回事吗?
不是。Function Calling 是"模型会请求调函数"这一项能力;Agent(智能体)是更高层的概念,通常指模型反复调用函数、自己规划多步任务。Agent 往往建立在 Function Calling 之上。
Q:模型会乱调函数吗?
可能。所以要在函数声明里写清用途,并在你的代码层做白名单和参数校验,只执行预期内的调用。
Q:所有模型都支持吗?
主流大模型的 Function Calling 大多支持,但具体格式(比如 JSON 结构、是否支持并行调用)各家的 SDK 略有差异,接之前看对应文档。
Q:返回结果很长会怎样?
建议函数只返回模型需要的精简字段,原始大报文留在你方处理,避免把上下文撑爆。
延伸学习
- AI 智能体与自主执行一次讲清 — 想知道 Agent 怎么在 Function Calling 之上自己跑任务,看这篇。
- CodeBuddy 实战课 — 想动手做 AI 项目,这门实战课更系统。
- OpenClaw 中文教程 — 顺手看一个 AI 编码工具的真实用法。

TRAE-AI编程



