微信扫码
添加专属顾问
拨开MCP迷雾,深入探究LLM工具调用的技术本质。 核心内容: 1. 大语言模型(LLM)的工具调用演变历程 2. Function Calling技术详解及其行业影响 3. MCP协议如何简化工具调用,推动LLM应用发展
如果我们把大语言模型比喻为一位拥有海量知识储备的超级学者,它上知天文下知地理无所不知,它能告诉你制作佛跳墙的详细步骤,甚至能精确到香料比例和火候控制。但这位“学究”却无法亲自拧开燃气灶,也无法伸手取出砂锅为你完成这碗佛跳墙的烹饪。这就是大语言模型(LLM)一开始出现时给人的深刻印象:只能进行问答,却无法和真实世界进行任何的连接。
在2023年之前,大模型的工具调用还处于"手工时代"。开发者需要像教小朋友用筷子一样,通过复杂的规则和代码教会模型使用每个工具。直到OpenAI推出Function Calling,才开启了工具调用的工业化时代。而2024年11月横空出世的MCP协议,则让这个过程变得像用USB接口连接设备般简单。
MCP的出现让工具调用生态变得无比繁荣,个人用户、开发者、企业都可以坐享它带来的便利。然而,在这种运动式的技术热潮之中,在LLM之上的层层封装,就像一场越来越浓,无法消散的迷雾,让我们很容易就迷失在封装的表象里,而忽略了大语言模型使用工具的本质。
我们会去关心、去争论:“MCP背后是不是用的Function Call?”、“Manus有没有用MCP?”,“MCP和Function Call有什么区别?”等等诸如此类的问题,网络上关于这类的文章数不胜数,但鲜有人会聊“影响MCP工具调用准确性的因素有哪些?”、“工具定义是如何影响LLM推理的?”。本文尝试从大语言模型的四种工具调用的技术实现范式,聊一聊工具调用的技术本质,以及对构建MCP Server和使用工具的一些关联关系。
在LLM底层(MaaS API层,不包括各类Agent构建平台和Agent框架的封装),工具调用的实现方法大体可以归纳为四大类:
2023年6月13,OpenAI正式对外发布了大语言模型第一个具有划时代意义的API特性:Function Calling。从此基于OpenAI的LLM API开发应用,可以让LLM应用实现外部工具的连接。Function Calling一经推出后,便成为了事实上的行业标准,其它大语言模型的工具调用能力,从API的参数设计、模型的训练方法几乎都借鉴和兼容了OpenAI的这套规范,是当之无愧的工具调用标准。
OpenAI在不久之后,陆续推出的Agent平台产品GPTs,并在该平台中创建自定义Agent的界面上默认集成了Function Calling和基于OpenAPI实现的工具执行能力,第一次在行业中探索了LLM + 工具调用的完整实现。 普通非技术用户,也可以通过界面简单配置便可实现完整的工具调用流程。Function Calling这个概念也从使用API的开发者进入到非技术人员的视野。久而久之,Function Calling的概念也自然进行了泛化和延伸。
《黄山迎客松》
从大语言模型问世以来,无论模态和API封装怎么变化,人模交互的模式始终没有发生改变,至始至终都是基于自然语言的交互,而自然语言的技术名词代表就是:“Prompt”。理解这一点至关重要,因为在模型之上的种种封装设计(API、产品交互等),其本质都是拼接成一个符合一定文本格式规范的“Prompt”。
Function Calling是在LLM推理引擎之上的API层接口封装,它核心解决三个问题:
譬如,我们来看一个天气查询例子从API到底层LLM推理的Prompt的映射:
Function Calling API
curl -X POST https://api.openai.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${API_KEY}" \
-d '{
"messages": [{
"role": "system",
"content": "你是一个会使用工具的助理,请结合提供的工具清单,回答用户的问题。",
},{
"content": "北京明天天气如何?",
"role": "user"
}],
"model": "gpt-4o",
"tools": [
{
"type": "function",
"function": {
"name": "get_chinese_weather",
"description": "查询中国所有城市的天气预报",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "城市或者省,如上海"
}
},
"required": [
"city"
]
}
}
},
{...其它工具定义}
],
"tool_choice":"auto"
}'最终Transformer底层推理的Prompt
(实际拼接格式取决于各家模型自身的数据规范):
<system>
你是一个会使用工具的助理,请结合提供的工具清单,回答用户的问题。
用户提供的工具清单如下:
<tool-list>
<tool>
- 工具名称:get_chinese_weather
- 工具描述:查询中国所有城市的天气预报
- 参数:{"city":{"type":"string","description":"城市或者省,如上海","required":true}}
</tool>
</tool-list>
</system>
<user>
北京明天天气如何?
</user>模型推理的响应结果如下:
{
"role": "assistant",
"content": null,
"tool_calls": [
{
"id": "call_abc123",
"type": "function",
"function": {
"name": "get_chinese_weather",
"arguments": "{\"city\": \"Beijing\"}"
}
}
]
}至此,一个完整的Function Calling API的工作就结束了,通过上面例子,我们可以清楚地认识到:
Function Calling只是工具选择,并没有包含工具执行。最终输出也不过是一个json格式的函数调用描述(上述代码蓝色区域)而已,真正调用get_chinese_weather函数需要开发者在自己的应用中自行对接。
人类因为学会使用工具而开始进入快速发展期,模型亦如是。但首先要让模型学会使用工具,也就是在给定的工具清单中,根据用户的问题,选择是否要使用工具,使用哪个工具。这个过程就是LLM训练的过程,模型需要针对性地构建上述案例中右侧拼接后的推理Prompt数据,作为训练数据喂给模型进行学习。这个过程亦有各种考量。
譬如:
一次是否可以输出多个工具调用?
先输出调用工具描述还是直接输出调用?
是否同时输出调用工具的解释和工具调用本身?
上述考量本文不做详细论述。读者只需知道Function Calling能力是需要单独训练的,这也是为什么我们看到很多模型能力虽然很强,但却不支持Function Calling,譬如大名鼎鼎的DeepSeek R1。OpenAI的O系列推理模型,从发布至今,也是经历过半年以上的时间才在近期支持了Function Calling。
模型层支持了工具调用后,工程层面要做的就是设计一个标准的Function Calling API,以便为开发者提供统一的开发体验。这个过程相当于给模型的工具调用能力提供一本标准化的操作说明书。
实际的处理需要考虑的比上述会更多,更细致,本文重在知其理,因此其它细节不再赘述,感兴趣的可以自行研究。
自从Anthropic推出的MCP(模型上下文协议)火了之后,MCP和Function Calling的关系的阐述和争论在网络上就从来没有停止过。总结起来无非如下两种观点:
MCP背后使用的是Function Calling?
MCP会取代Function Calling?
先说结论,这两种观点严格说来都是不正确的。先说第一个:
上文提到LLM工具调用的实现主要有四种方法,Function Calling只是其中之一,是以OpenAI的实现为行业标准的影响力最大的一种实现,但不是唯一的实现。MCP是一个支持工具调用的Agent上下文协议,他本身只定义了MCP Server要如何向MCP Client提供支持的工具清单的接口规范,如下所示:
// 工具清单查询请求
{
"jsonrpc":"2.0",
"id":"unique_request_id",
"method":"tools/list",
"params":{}// 通常为空对象,保留扩展性
}
// 工具清单查询的响应
{
"jsonrpc":"2.0",
"id":"original_request_id",
"result":{
"tools":[
{
"name":"get_weather",
"description":"查询指定地点的实时天气",
"input_schema":{
"type":"object",
"properties":{
"location":{"type":"string","description":"城市名称,如'北京'"},
"unit":{"type":"string","enum":["celsius","fahrenheit"]}
},
"required":["location"]
}
},
{
"name":"search_web",
"description":"互联网搜索引擎",
"input_schema":{
"type":"object",
"properties":{
"query":{"type":"string"},
"max_results":{"type":"integer","minimum":1}
},
"required":["query"]
}
}
]
}
}MCP协议并没有要求MCP Host必须要使用Function Calling来实现工具调用,作为一个协议设计者,也断然不会将协议与某种功能的实现路径直接绑定,这种设计模式本身就是有缺陷的。那么为什么网络上很多人会持有这种观点呢?原因很简单:Function Calling这个名字太过于深入人心,在很多没有深入研究的朋友记忆中,基本上把Function Calling和工具调用划等号了。 外加很多只输出What信息的媒体铺天盖地的广而告之,自然就会有这样的现象。
一个MCP应用(MCP Host,例如:Cursor、Cline)要实现基于MCP的工具调用,在工具调用的技术路径选择上是需要做很多考量的。这不是一个简简单单的选择题,而是一套复杂的工程策略,举个例子大家就明白了:
Cline作为一个开源的IDE插件,允许开发者自定义接入各种模型的API,但问题在于,并不是所有模型都支持Function Calling 能力的,尤其是像DeepSeek R1这样的推理模型,大多都不支持。因此在工程实现上,可能就会是这样的策略:
综上所述,读者应该可以自行判断为什么这个观点是不正确的了。
有了上述认知,我们就可以轻易地判断这个观点为什么是错误的了:MCP是比Function Calling大的多的概念,除了支持工具查询和调用之外,还支持Prompt、Resources等所有可以影响模型上下文的内容的抽象和通信标准定义。而Function Calling只是在MCP 应用需要执行工具时的一种技术实现而已,而且更为重要的是,Function Calling并不涉及到工具执行的层面,仅仅提供了工具调用的选择和描述。上面的例子很形象地说明了这一点。
那么为什么很多人会有这样的认知呢?这里头最主要的原因是混淆了Function Calling的定义。OpenAI 在推出Function Calling API时,也没有提供任何关于Function Calling的应用落地实践。直到推出了GPTs之后,才将Function Calling技术作为GPTs平台上默认的工具调用技术予以集成,并且在GPTs平台中,和Function Calling配合的还有基于OpenAPI规范的工具执行环节的设计。
只是很多非技术朋友搞不清楚这里面的概念边界,为了方便理解,直接把Function Calling + 基于OpenAPI的工具执行打包称之为Function Calling。 因此随着科技媒体的传播,大家也渐渐分不清楚这个词的定义边界了。类似的Case还有MCP Host和MCP Client的关系, MCP协议中非常清晰地定义了什么是MCP Client,什么是MCP Host,但随着MCP被越来越多人熟知,理解这两个概念的区别和边界颇为麻烦,传统互联网的CS架构深入人心,方便对照理解,于是这两个概念就被混为一谈了。
Function Calling作为一个LLM的能力项,它本身也是有可用性(准确性)的概念的。就像你给相同的任务和工具给到一个聪明人和一个傻子,大家对于是否该使用工具,使用哪个工具,怎么使用工具的理解都是完全不一致的,这很大程度取决于LLM的基座能力和是否有针对性地训练过这个能力。因此我们可以尝试总结一下Function Calling这个工具调用的实现技术有哪些优缺点,以方便读者在开发中进行更好的选择:
Function Calling的优点主要体现在以下几个方面:
Function Calling的缺点主要有以下几点:
上面已经讲过,细节不再赘述。因为需要训练,所以并不是所有模型都支持,而且效果也不同,这对于开发者在集成不同模型时会带来额外的选择和对比成本。
模型在输出工具调用的时候,可能生成无效参数(如字段缺失或类型错误),需开发者做额外的校验
使用了JSON Schema协议来描述工具定义,上面例子可以看到,一个函数的描述就有上百Token,如果接入工具有几十个,每次推理都需要把这一大坨工具描述传给模型推理,可想而知Token耗费有多高。
因为Function Calling的封装,开发者会下意识地认为工具选择或者参数设置有问题,是模型能力的锅。但真相是,工具定义中的name、description、parameters的内容,以及工具清单的选择,这些都会影响最终的效果。开发者在使用Function Calling的时候,需要清晰地认识到:这些不起眼的工具定义,其实正是Prompt本身。如前所述
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业
2026-07-01
一文了解|SkillScan 智能体技能安全扫描最佳实践
2026-07-01
协作的逆向演进:从 Agent 逻辑重构团队管理
2026-07-01
港科大郭毅可谈Agentic AI时代的核心命题:人机共生,人不可能退场
2026-07-01
Sonnet 5终于来了,然而Opus 4.8现在有点尴尬
2026-07-01
AI可观测性:Prompt、Tool Call、Trace、Token全链路追踪
2026-07-01
AI Infra 全景图:Agent Framework、调度、编排、沙箱、记忆管理、Tracing 分层拆解
2026-07-01
Claude Science发布:60+科学数据库一个对话搞定
2026-07-01
AI 的向量空间里藏着心理学,这是一场嵌入模型的情绪对决
2026-04-15
2026-04-07
2026-04-07
2026-04-24
2026-04-17
2026-04-05
2026-04-02
2026-04-05
2026-04-14
2026-04-24
欢迎您使用【53AI 官方网站】(以下简称“本网站”或“我们”)。本《会员服务协议》(以下简称“本协议”)是您(以下简称“会员”或“用户”)与【深圳市博思协创网络科技有限公司】之间关于注册、登录及使用本网站会员服务所订立的法律协议。
在您注册或登录前,请务必审慎阅读、充分理解各条款内容,特别是免除或限制责任的条款、知识产权条款、争议解决条款等。此类条款将以加粗形式提示您注意。 当您通过微信公众号授权、手机验证码验证或其他方式成功登录本网站时,即视为您已完全理解并同意接受本协议的全部内容。
一、 定义
本网站:指由【深圳市博思协创网络科技有限公司】运营的,域名为【53ai.com】的网站及相关移动端页面。
会员服务:指本网站向注册会员提供的知识库文章查阅、内容检索及其他相关增值服务。
知识库内容:指本网站发布的包括但不限于文字、图表、数据、研究报告、行业分析等数字化内容资源。
二、 账号注册与登录
登录方式:本网站支持以下登录方式,您可根据实际情况选择:
微信公众号授权登录:您同意将您的微信OpenID信息授权给本网站,用于创建或关联会员账号。
手机验证码登录:您需提供真实有效的手机号码,并通过短信验证码完成身份验证与登录/注册。
账号安全:您的账号仅限您本人使用,禁止赠与、借用、租用、转让或售卖。因您保管不善导致的账号被盗、密码泄露等损失,由您自行承担。
实名认证:根据相关法律法规要求,我们可能要求您在特定功能下完成实名认证。如您拒绝提供,可能无法使用部分或全部服务。
未成年人保护:若您未满18周岁,请在法定监护人的陪同下阅读本协议,并在征得监护人同意后使用本服务。
三、 服务内容与规范
知识库查阅权限:会员登录后,有权按照其会员等级对应的权限范围,在线浏览、检索本网站知识库中的相关文章及内容。
服务变更:我们有权根据业务发展需要,调整、变更或终止部分服务内容,并将以网站公告、公众号消息等方式提前通知。
禁止行为:您在使用服务时不得实施以下行为:
利用技术手段批量爬取、下载、转存知识库内容;
将知识库内容用于商业目的或未经授权地向第三方传播;
干扰本网站正常运行或侵犯其他用户合法权益;
发布违法违规信息或从事违反公序良俗的活动。
四、 知识产权声明
权利归属:本网站知识库中的排版设计、软件代码等内容的知识产权均归【公司全称】或原权利人所有,受《中华人民共和国著作权法》等法律保护。
有限许可:本网站授予会员一项非独占、不可转让、不可转授权的普通许可,仅限于个人学习、研究之目的在线查阅知识库内容。
侵权追责:未经书面许可,任何单位或个人不得以任何形式复制、转载、摘编、镜像、汇编或以其他方式使用上述内容。一经发现,我们保留追究其法律责任的权利。
五、 个人信息保护
我们重视对您个人信息的保护。关于我们如何收集、使用、存储和保护您的个人信息,请单独阅读 《隐私政策》。
您通过微信公众号授权或手机号验证所提供的信息,我们将严格按照《个人信息保护法》的规定处理,仅用于身份识别、服务提供及安全验证等必要用途。
您可以随时通过网站设置或联系客服行使查阅、更正、删除个人信息及撤回授权同意的权利。
六、 免责声明
内容准确性:知识库内容仅供参考,不构成专业建议。我们不对其完整性、准确性、时效性作任何明示或暗示的保证,您应自行判断并承担使用风险。
不可抗力:因自然灾害、政策法规变化、网络故障、第三方平台接口异常(如微信接口维护、运营商短信通道故障)等不可抗力导致的服务中断或延迟,我们不承担违约责任。
第三方链接:本网站可能包含指向第三方网站的链接,该等网站的内容和服务不受我们控制,请您自行甄别风险。
七、 违约责任
如您违反本协议约定,我们有权视情节采取警告、限制功能、暂停服务、注销账号等措施,并保留要求赔偿损失的权利。
如因您的违约行为导致我们遭受行政处罚、第三方索赔或商誉损失,您应承担全部赔偿责任(包括但不限于罚款、赔偿金、律师费、公证费等)。
八、 法律适用与争议解决
本协议的订立、执行和解释均适用中华人民共和国大陆地区法律。
因本协议产生的或与本协议有关的任何争议,双方应友好协商解决;协商不成的,任何一方均可向【公司所在地】有管辖权的人民法院提起诉讼。
九、 其他
本协议构成双方就本服务达成的完整协议,取代此前任何口头或书面约定。
本协议任一条款被认定为无效或不可执行的,不影响其他条款的效力。
我们对本协议享有最终解释权,并在法律允许的范围内保留随时修改的权利。修改后的协议一经公布即生效,继续使用服务即视为同意修订内容。