前言
AI
已经来了。24年末到25年的这几个月里面尤为明显,AI
已经开始入侵我们生活的方方面面。总有人说:程序员要被替代了。为了不被替代,为了乘着这股浪潮,作为前端,也只能all in AI了。 接下来,我将以我的视角,来记录一个前端在ai的学习路程。愿你我共勉
1.何为Function Calling
在阐述MCP
之前,我想先聊一下Function Calling
。不知道各位有没有体验过Function Calling
。如果一句话总结就是 Funcion Calling 是给大模型插上手脚,让我们通过对话的方式,让模型调用对应的工具达到你要的效果 其实很像Siri
或者 小爱同学
的使用方式。 比如我们想十分钟后让Siri
叫我们一下,就可以说: 嘿 Siri,定一个十分钟后的闹钟
。然后Sir
i就会在电脑上建一个闹钟,十分钟后叫醒你。 这其实就像Function Calling
实现的效果。给模型插上手脚。
1.1 举个栗子
我们举个栗子来描述一下吧。
如果从程序的角度实现这样一个定闹钟的功能,你会怎么做?
如果是我,首先得有一个软件A,然后我会写好这个定闹钟的脚本,支持输入闹钟的时间,然后将这个方法给软件使用。 接下来,用户就可以在软件上通过表单填写提交等方式来定闹钟。
这样一个定闹钟的功能 涉及了三方: 脚本、软件、用户。脚本提供定闹钟的功能、软件提供使用平台、 用户是调用方。 现在作为用户,不想填写脚本了,觉得麻烦,能不能让软件自己搞,用户吩咐一下就行?
可以!我们把大模型看做软件。现在用户说了:定一个十分钟后的闹钟
。那么模型该怎么做呢?首先肯定要理解这句话,用户要定一个十分钟后的闹钟。接下来再看下自己能不能做。
那么怎么让模型知道自己能不能做,以及该怎么做呢?这就是Function Calling
的存在意义了。它让模型能够理解我们的脚本,并在对应的时候执行这个脚本。
了解了Function Calling
,我们再来看MCP
。
2 何为MCP
2.1 官方定义
MCP is an open protocol that standardizes how applications provide context to LLMs. Think of MCP like a USB-C port for AI applications. Just as USB-C provides a standardized way to connect your devices to various peripherals and accessories, MCP provides a standardized way to connect AI models to different data sources and tools.
理解一下就是 MCP
提供了一种标准化的方式,让模型能够连接到不同的数据源和工具。就像USB-C
端口一样。不论什么牌子的电脑,只要有USB
端口,那么可以插各种外置,键盘啊、鼠标啊、音响啊。只要是USB-C
端口,就可以。
2.2 图解
图上提到了了几个概念 MCP Hosts(MCP主机) 、MCP Clients(MCP客户端) 、MCP Servers(MCP服务器) 、Local Data Sources(本地数据源) 、Remote Services(远程服务) 。
其实我感觉 Clinet 和 Hosts其实不应该分开来看。我把他们看做一个概念Clinet: 即有能力通过MCP访问外部服务的软件
。
这里也可以用一句话来描述:Server A、B、C
是具有访问本机数据以及远程数据的能力,并且按照MCP
协议提供了该能力,Clinet
可以通过MCP
协议调用A、B、C
以使用他们的能力。
2.3 再举个栗子
上面的例子,我在软件A
上实现了一个闹钟功能,突然有一天,另外有一个软件B
,它也有闹钟功能的诉求,后面还有软件C、D
等等。而且他们各自技术栈不一样。怎么办?基于他们各自写一套?这时候,如果能有一套标准就好了,我们将闹钟功能单独提供,各个软件按照标准接入、调用,是不是就一劳永逸了? 同理,如果不同的大模型都遵循同一套协议,那么是不是可以实现一个闹钟,多方调用? 这个统一的协议就是 模型上下文协议(MCP Model Contex Protocol)
。
如果我们再用一句话总结 MCP就是大模型界的HTTP 。类比到前后端,不论后端是Java
、Go
、Node
、前端是JS
、Rust
。只要遵循HTTP,那就可以相互通信。 MCP
也是类似,不论是什么样的模型,只要遵循MCP
协议,Function Calling
也遵循MCP
协议开发,那么就可以实现无差别复用。
结语
这只是我对Function Calling
和 MCP
的浅显理解。为什么会在聊MCP
的时候先聊了Function Calling
?是因为我看到了很多把他们放在一起比较的文章,但是不论怎么解释,我都觉得好像有些不太合心意。最后,我得到了一个启示,MCP
是协议,Function Calling
是工具,二者不是一个层面东西,放在一起比较没有意义。最后,我发现MCP
应该说是是Function Calling
的标准化形态。它让Function Calling
的适用性大大提升,把我们从适配中解放出来,让我们更专注于创造。
最后,如果文章有不对之处,欢迎各位指正。虚心求教,不为面子,只为真相。
愿你我共勉,祝好。