Function Calling 和 MCP:大模型调用功能的两种方式
大模型(像我这样的AI)经常需要"借力"来完成任务,比如查天气、算数字。这时候,开发者会给大模型设计一些"工具",主要有两种方式:Function Calling 和 MCP。它们就像大模型的"左右手",各有特点。下面从大模型、开发者、使用者三个角度,带你搞清楚这两者的区别和相似点。
一、从大模型角度:我怎么用这两种方式?
大模型的角色是"发号施令",告诉系统做什么。Function Calling 和 MCP 就像我喊话的两种方式。
Function Calling:喊本地小弟干活
- 我做什么 :我生成一个指令,比如"
get_weather(city='Beijing')
",就像喊:"本地小弟,去查北京天气!" - 怎么处理:我得知道有哪些本地小弟(内部函数),每个小弟需要啥信息(参数)。比如,我得学会"查天气需要城市名"。
- 感觉如何:简单直接,小弟就在身边,喊一声就干活。出错了我也能马上知道,调整一下再喊。
- 例子 :我喊"
add(3, 5)
",本地小弟算出 8,完事。
MCP:喊外面的快递员送货
- 我做什么 :我生成一个请求,比如"
{'city': 'Beijing'}
",就像喊:"快递员,帮我查北京天气!" - 怎么处理:我得学会怎么跟外面的快递员(外部API)沟通,写清楚地址(参数格式)。但快递员具体咋送货,我不管。
- 感觉如何:有点复杂,得写得更规范,不然快递员可能找不到路。反馈慢一点,得等快递员送回来。
- 例子 :我喊"
{'city': 'Beijing'}
",快递员跑去天气公司查,回来告诉我"20度"。
大模型眼中的区别
- Function Calling:像家里有台打印机,直接用就行,简单省心。
- MCP:像网上订外卖,得填地址等配送,灵活但费点脑子。
- 共同点:我都得学会"喊话",把任务拆成指令,交给别人干。
二、从开发者角度:我怎么给大模型造工具?
开发者是大模型的"装备师",负责造工具给大模型用。Function Calling 和 MCP 是两种造法。
Function Calling:自己造个工具箱
- 我做什么 :我在系统里写好一堆函数(比如
get_weather()
),告诉大模型:"这些是你能用的工具。" - 特点:工具都在我家(应用系统),我说了算,想咋改就咋改。速度快,不用联网。
- 挑战:得提前把工具造好,想加新工具得重新设计。
- 例子 :我写个
calculate_sum()
,大模型喊一声,系统立刻算出结果。
MCP:借别人的工具
- 我做什么:我搭个"中间人"(Controller),帮大模型跟外面的服务(API)对接。比如,找个天气API给大模型用。
- 特点:不用自己造工具,直接借外面现成的,省事还能用最新服务。但得联网,得看别人脸色(API可能收费或挂掉)。
- 挑战:得把大模型的指令翻译成API能懂的语言,还要处理网络问题。
- 例子:我搭个Controller,大模型说"查北京天气",我转成API请求,去外面拿数据。
开发者眼中的区别
- Function Calling:像自己开个小作坊,工具全自己造,稳但费力。
- MCP:像找外包公司,省事但得协调好。
- 共同点:都是给大模型造"功能按钮",让它能干更多事。
三、从使用者角度:我咋感觉这两者?
使用者是大模型的"老板",只管提需求,不管后面咋实现的。
Function Calling:系统自己搞定
- 我体验啥:我说"北京天气咋样",大模型喊本地小弟,秒回"20度"。
- 感觉如何:快,稳,完全不知道后面咋弄的,反正结果来了。
MCP:系统找外援
- 我体验啥:我说"北京天气咋样",大模型喊快递员,可能慢一拍,但还是回"20度"。
- 感觉如何:差不多,可能偶尔等久点,但结果一样靠谱。
使用者眼中的区别
- Function Calling:像家里有台咖啡机,按一下就有咖啡。
- MCP:像点了外卖咖啡,等送来但味道可能更丰富。
- 共同点:我只管说需求,结果都到手,咋来的我不管。
四、总结对比表
角度 | Function Calling(本地小弟) | MCP(外部快递员) |
---|---|---|
大模型 | 喊本地函数,简单直接,调熟悉的工具 | 喊外部API,灵活但得学新格式 |
开发者 | 自己造工具,稳但费力,速度快 | 借别人工具,省事但得联网,靠外人 |
使用者 | 快而稳,结果秒出 | 稍慢但一样靠谱,体验差不多 |
比喻 | 家里打印机,自己用 | 网上订外卖,等送来 |
五、最后说一句
- 大模型:Function Calling 是我的"内功",MCP 是我的"外援"。
- 开发者:Function Calling 是自建工厂,MCP 是找外包。
- 使用者:管它是工厂还是外包,我只要结果!
两种方式各有千秋,开发者选哪种看需求,用户用哪种都爽,大模型呢?努力学会两种喊法就行!