你听说过MCP(Model Context Protocol,模型上下文协议)吗?这是我的经历:
如果你不关心技术细节,而想了解AI产品发展的现状和方向,欢迎看这篇,了解为什么会有MCP这个东西。我希望做到:
你很喜欢和AI聊天。有一天,你问DeepSeek:
Strawberry这个单词里有几个字母“r”?
不要小看这个问题,在不久前,大部分语言模型还不能正确回答。如果技术一时无法突破,难道就放任问题存在下去吗?也不尽然。要知道,这种问题用一行代码就可以计算。如果AI可以自己写代码跑一下,不就数出来了?
可见,允许AI调用外部工具(比如运行代码),是现阶段增强模型能力的办法之一。
除了工具(Tools)外,另一种可以武装AI的“外挂”是资源(Resources)。
这需要RAG(Retrieval Augmented Generation,检索增强生成)。最常见的RAG当然是联网搜索。
回到本节开头:“你很喜欢和AI聊天。”——AI只能聊天吗?
如果你是一名程序员,通过让AI读取你目录下的代码,省得你复制粘贴到聊天框,那能不能进一步让AI帮你把代码写到编辑器里,甚至运行下试试?
这不仅需要模型能读取,还要它能“操作”。好了,其实我们不小心已经介绍了另一个重要概念:Agent,代理,顾名思义,即不仅可以聊天,还有权限代替你做事。所以它在中文语境下还有个酷炫的名字:智能体。
最常见的智能体是AI编程工具,比如GitHub Copilot和Cursor。你可以仅仅通过聊天,就让AI帮你撰写、运行代码。
可见,智能体不再仅仅纸上谈兵,还可以真正行动起来。当然,行动的范围是虚拟世界,它不能帮你拿锅砸男朋友的头。
总结下:现在基于语言模型的AI还是“笼中鸟”,本质是个一经推出就被封锁在自己世界里的对话程序。它不会再学习新知识,也不会做对话以外的事情。于是我们通过:
说这么半天,语言模型毕竟只会聊天啊?就凭输出一段话的能力,它是如何操作你的电脑的?
这个问题也困扰过我,后来想了一个通俗的理解:这一切只靠给AI新增了一个角色——程序员,而且是只负责写,不负责运行的纯写手。
我们可以用一个实际的例子来解释这段话的意思。
有一个天气预报智能体,可以通过对话查天气。我问它:“明儿个北京什么天气?”它回答:“北京明天晴,15-30度。”这背后发生了什么?
{时间:20250530,地点:北京};{天气: 晴, 最低温: 15, 最高温: 30};该过程中,语言模型被运行了两次:
这就是MCP的前身:Function Calling。多次运行语言模型,模型不仅和用户对话,还让智能体帮它调用程序。
第一次搞清楚这些,我的想法是:就这?那我们要把上文“赋予AI操作权限”的说法改一改:智能体其实是个软件。软件有权限,让内置程序按模型指示运行。此时,用户面对的是语言模型,还是包含自然语言处理功能的新形态软件,就不好定义了。关于这一点的讨论,我们放到下文,先来讲讲MCP。
现在,我们假设这样一个场景:
你该如何让那些用AI问天气的人,获取的是你提供的预报?有两个基本的解决方案:
前者不太现实,而后者的问题在于:
怎么解决这些问题?我们往回退一步,想想上一次“科技浪潮”——移动互联网发生了什么。
15年前,你已经是天气预报服务商,你希望用户在手机上看到的是你的天气预报:
第二点的关键是什么?平台。AI浪潮下,类似的美好愿景是:我们能否把AI做成像iOS或Android一样的平台,而把“function calling”当成这个平台上的App?如此,问题都得以解决:
要达成前文所述的愿景,核心之一是“车同轨,书同文”的标准化。比如:
标准化,就是协议的目的。MCP,即Model Context Protocol,模型上下文协议,顾名思义,就是规范了如何将这些App作为context来增强模型能力。
这样做的好处显而易见——你确实不用写好几份代码了。
还不对……到此为止,MCP和function calling的唯一区别是,function calling是各家AI厂商自己实现的,MCP是想一统天下的。但前文所述的问题没有解决——你还是要把所有代码写到一起做成“孤岛”。如何从技术上真正解耦,分离AI平台要做的事和“App”所要做的事,让任意一个AI可以调用你的预报?
终于,我们可以来说说MCP的核心概念了——因为我们其实早就已经提到了它们:
仔细想想,其实这两个要素在前文function calling的部分也有,为什么有了MCP,我们就可以将它们解耦了?因为协议!
这么一来,当然可以各写各的代码,由用户来组装它们。由此可见,“服务器”和“客户端”这两个词还挺形象:服务器提供标准化的服务;客户端代表客户采购服务。这显然也符合计算机领域对这两个概念的理解。
实际运行时:
此时,作为天气预报服务商的你,只需要写好MCP服务器代码,然后打广告让用户在AI客户端上装你的MCP服务器,正如现在打广告让用户在手机上装你的App一样。
总之,客户端这个“中间商”被独立出来,是从function calling到MCP的关键转变。它在AI和服务器间传话,一个“平台”就形成了。现在,我们可以理解这张图了:
这里又引入了一个概念叫“Host”(主机),可以理解为附带Client的软件,比如VS Code代码编辑器是个Host,它可以建立遵循MCP的Client。我们理解MCP并不需要严格区分Host和Client。
MCP是由推出AI公司Anthropic在去年发布的。既然希望一统天下,当然首先得做些工作。Anthropic实现了一套帮助你开发MCP Client和Server的工具。我们可以简单过目下他们在官网给出的Server代码示例。
@mcp.tool()
asyncdefget_alerts(state: str)-> str:
"""Get weather alerts for a US state.
Args:
state: Two-letter US state code (e.g. CA, NY)
"""
# 一段可以从气象局读取预警信息的代码
这个函数就是待调用的工具。输入美国州名,可以返回气象局在该州发布的天气预警。要关注的是@mcp.tool()这样一个“装饰器”。它至少可以实现以下两个作用:
get_alerts的工具;因此,通过一个简单的装饰器,Model Context就自动生成了,你唯一需要做的是实现核心功能。
关于MCP的实际效果,在近期微软召开的Microsoft Build 2025中有个示例,可以观看这个链接:https://www.bilibili.com/video/BV1KjJFz3EL4?t=3955.3。具体而言:
可见MCP这个概念为Windows这样志在实现操作系统层面的“智能化”的系统提供了极大便利。
首先给出两个“暴论”(但却是显而易见的):
对于第一点,MCP是一种规范而不是技术。用一个流行的说法,它只是将M×N优化为M+N,即,只需要分别实现M个AI和N个服务并自由组合,而不是为M×N个AI和服务的组合各写一套代码。
至于第二点,所谓提示工程,就是用高质量的文本输入让AI输出理想的信息。让我们看看Anthropic在GitHub上提供的一段Client示例中的“魔法”:
system_message = (
"You are a helpful assistant with access to these tools:\n\n"
f"{tools_description}\n"
"Choose the appropriate tool based on the user's question. "
"If no tool is needed, reply directly.\n\n"
"IMPORTANT: When you need to use a tool, you must ONLY respond with "
"the exact JSON object format below, nothing else:\n"
"{\n"
' "tool": "tool-name",\n'
' "arguments": {\n'
' "argument-name": "value"\n'
" }\n"
"}\n\n"
"After receiving a tool's response:\n"
"1. Transform the raw data into a natural, conversational response\n"
"2. Keep responses concise but informative\n"
"3. Focus on the most relevant information\n"
"4. Use appropriate context from the user's question\n"
"5. Avoid simply repeating the raw data\n\n"
"
lease use only the tools that are explicitly defined above."
)
从这段发给AI的提示语中,我们清晰地看到本质:Client把工具说明合并成文本告诉AI,并要求AI输出规定的结构化文本(JSON),从而用写好的代码解析以正确调用程序。显然,这种实现方式假定了一个前提:AI始终一丝不苟地执行我们输入的指令。尽管目前写代码是生成式AI为数不多相对靠谱的能力之一,但传统软件尚且有铺天盖地的bug,在流程中引入AI,其不稳定性必然又上一个量级。
更何况,当我们只有有限的工具时,一切很美好,但如果有千百个工具,且要迭代很多次呢?别忘了,这些工具的说明都是“Model Context”,而AI一次性能高效阅读的内容也是有限的。这也催生了业界一些思考,比如将工具像文件夹一样分层级归类等。
说到这里,不禁想引出一个问题:MCP是用来规范AI和计算机、互联网工具沟通的,它们都是“硅基生命”,为什么要用人类的语言沟通?
无论如何,MCP在AI”信徒“眼中是当前的最佳解决方案,拥有合理的故事线。但我们跳出这条线的“误导”,再想想呢?
你还是那个天气预报服务商,MCP可以将你的服务接入各家AI模型……等等,你为什么要这么做?用户都去ChatGPT、Claude里搜天气预报,那你软件里的广告给谁看?诸如The Weather Channel或国内墨迹、彩云,收入主要来自广告和订阅服务。这些收入的背后是流量,如果这些流量都被AI“吃”掉,后果可想而知。
显然,MCP是以AI为中心,一切地目的是为构筑更强大的AI。GitHub愿意做MCP服务,因为它本质上只是替你完成Git操作,所有代码还是出现在GitHub上;但Google或Bing却不一定有多大的动力:你希望用户打开你的网站,再不小心点进推广链接,还是用ChatGPT调用你的搜索引擎,过滤、总结一番?
其实国内搜索引擎在国内已经式微,封闭生态大行其道,不同用户选择去抖音、微信公众号、小红书搜索内容。同样的道理,未来的AI应用,到底是以AI为核心和入口,以一切资源为背景板,还是每项独立的产品试着在自己功能里融入AI?是谁来拥抱谁?我想,大部分讲究流量和入口的服务暂时恐怕还会选择后者。
所以,尽管MCP看似是为第三方开发者节省工作量,实际上是个把压力转移给第三方的“阳谋”,把要不要开放MCP服务为AI生态做贡献的大问题摆到了每个产品面前。AI领域如此火爆,当一个概念推出,所有人一拥而上,此时这个概念本身合不合理已经不重要了,重要的是不能落后。就像外卖、打车等刚上线时疯狂的补贴一样,现在拥抱AI的成本降低了,你要不要?
有趣的是,我们上文将MCP Server比作AI生态下的App,而见微知著的程序员已经建立了不少和App Store类似的MCP Store了。如我们所料,里面多是些文档、数据库、云存储的服务率。这说明MCP起步是为每天写代码、分析数据、设计图纸的“牛马”作贡献,还谈不上新的商业模式或产品形态。
之所以如此,除了上一节所述外,另一个原因是,AI现在仍只在做简单重复性工作时才比较稳定。
说到这,我们其实已经不是在讨论MCP,而是AI和Agent。所谓Agent,可以从两个角度理解:
选择哪个视角,取决于软件功能和语言模型的贡献孰轻孰重。比如:
由于AI能力有限,反倒是前者可能更容易普及(所以天气预报是所有科普MCP的人最喜欢的例子……)。
不过,如果有一天,AI的能力进一步提升,比如:
即时到这一步,考虑到目前智能体还囿于虚拟世界,它还需要人类的辅助:
| 欢迎光临 链载Ai (https://www.lianzai.com/) | Powered by Discuz! X3.5 |