原创 王熠明 2025-06-23 22:51 浙江
Datawhale干货
作者:王熠明、同济子豪兄,Datawhale成员
1. MCP介绍
1.1 大语言模型 VS 智能体Agent?
大语言模型,例如 DeepSeek,如果不能联网、不能操作外部工具,只能是聊天机器人。除了聊天没什么可做的。
而一旦大语言模型能操作工具,例如:联网/地图/查天气/函数/插件/API 接口/代码解释器/机械臂/灵巧手,它就升级成为智能体 Agent,能更好地帮助人类。今年爆火的 Manus 就是这样的智能体。
众多大佬、创业公司,都在 All In 押注 AI 智能体赛道。
也有不少爆款的智能体产品,比如 Coze、Manus、Dify。
1.2 以前的智能体是怎么实现的?
在以前,如果想让大模型调用外部工具,需要通过写大段提示词的方法,实现“Function Call”。
比如在 openai 中这是一个用于处理客户订单配送日期查询的工具调用逻辑设计。以下是关键点解读:
一、工具功能解析
1. 核心用途
函数名 get_delivery_date 明确用于查询订单的配送日期(预计送达时间)。触发场景:当用户询问包裹状态(如“我的包裹到哪里了?”或“预计何时送达?”)时自动调用。2. 参数设计必需参数:仅需提供 order_id(字符串类型),无需其他字段。逻辑合理性:订单ID是唯一标识,足以关联物流信息(如快递单号、配送进度等)。3. 技术实现要求开发者需在后端实现该函数,通过 order_id 关联数据库或物流API获取实时配送状态(如预计送达时间、当前物流节点等)。二、客服对话流程示例
假设用户提问:“Hi, can you tell me the delivery date for my order?”
助手应执行以下步骤:
1. 识别意图:用户明确要求“delivery date”,符合工具调用条件。
2. 参数提取:需引导用户提供 order_id(因消息中未直接包含该信息):
3. 工具调用:获得 order_id 后,后台执行 get_delivery_date(order_id="XXX")。
4. 返回结果:向用户展示函数返回的配送日期(如 “您的订单预计在2025年6月25日18:00前送达”)。{
"type": "function",
"function": {
"name": "get_delivery_date",
"description": "Get the delivery date for a customer's order. Call this whenever you need to know the delivery date, for example when a customer asks 'Where is my package'",
"parameters": {
"type": "object",
"properties": {
"order_id": {
"type": "string",
"description": "The customer's order ID.",
},
},
"required": ["order_id"],
"additionalProperties": False,
},
}
}
]
messages = [
{"role": "system", "content": "You are a helpful customer support assistant. Use the supplied tools to assist the user."},
{"role": "user", "content": "Hi, can you tell me the delivery date for my order?"}
]
response = openai.chat.completions.create(
model="gpt-4o",
messages=messages,
tools=tools,
)
1.3 靠大段提示词的方法实现的 Function Call 有什么问题?
对开发者(你)来说:
- 要写一大段复杂提示词,程序员的语文水平一般都比较捉急面对相同的函数和工具,每个开发者都需要重新从头造轮子,按照自己想要的模型回复格式重新撰写、调试提示词
对软件厂商来说(百度地图)来说:
- 百度地图发布的大模型工具调用接口,和高德地图发布接口,可能完全不一样。没有统一的市场和生态,只能各自为战,各自找开发者接各自的大模型。
对大模型厂商(DeepSeek)来说:
- 各家厂商训练出的智能体大模型,任务编排能力参差不齐,标准不一致。
每个软件都要定制开发不同的大模型调用模板。
1.4 秦王扫六合:MCP协议
Anthropic 公司(就是发布 Claude 大模型的公司),在 2024 年 11 月,发布了 Model Context Protocol 协议,简称 MCP。
MCP 协议就像 Type-C 扩展坞,让海量的软件和工具,能够插在大语言模型上,供大模型调用。
MCP 协议是连接【大模型(客户端)】和【各种工具应用(服务端)】的统一接口。
1.5 几个 MCP 的应用案例
1. 调用Unity的MCP接口,让AI自己开发游戏。
https://www.bilibili.com/video/BV1kzoWYXECJ
2. 调用Blender的MCP接口,让AI自己3D建模。
https://www.bilibili.com/video/BV1pHQNYREAX
3. 调用百度地图的MCP接口,让AI自己联网,查路况,导航。
https://www.bilibili.com/video/BV1dbdxY5EUP
4. 调用 Playwright 的MCP接口,让 AI 自己操作网页。(后面的保姆级教程讲的就是这个)
只要“扩展坞”上插的“工具”够多,每个人都能几分钟,搭积木手搓出,类似 Manus 的智能体
1.6 MCP 解决的核心问题:统一了大模型调用工具的方法
MCP 为【大模型】与【外部数据和工具】的【无缝集成】提供了标准化协议和平台。
不需要用户写提示词。
极大降低了大模型调用外部海量工具、软件、接口的难度。
Unity 和百度地图,看上去截然不同的软件,但都可以让大模型按照相同的协议去调用各自的功能。AI 一眼就知道有哪些工具,每个工具是什么含义。
点点鼠标,就可以把同一个大模型,挂载到不同的软件和工具上。
在上图中,上方代表 MCP 客户端软件,比如 Cusor、Claude Desktop,下方代表 MCP 服务端,比如海量的软件和 API 接口。
1.7 用 HTTP 协议做类比
MCP 客户端软件(例如 Cursor)就相当于浏览器。
智能体就相当于网站或者 APP。
mcp.so 这样的 MCP 广场,就相当于 App Store 或者 Hao123。
不同的浏览器,用相同的 HTTP 协议,就可以访问海量的网站。
不同的大模型,用相同的 MCP 协议,就可以调用海量的外部工具。
互联网催生出搜索、社交、外卖、打车、导航、外卖等无数巨头。
MCP 同样可能催生出繁荣的智能体生态。
类比互联网的 HTTP 协议,所有的智能体都值得用 MCP 重新做一遍。
1.8 MCP协议的通信双方
MCP Host:人类电脑上安装的客户端软件,一般是 Dify、Cursor、Claude Desktop、Cherry Studio、Cline,软件里带了大语言模型。
MCP Server:各种软件和工具的 MCP 接口,比如: 百度地图、高德地图、游戏开发软件 Unity、三维建模软件 Blender、浏览器爬虫软件 Playwrights、聊天软件 Slack。尽管不同软件有不同的功能,但都是以 MCP 规范写成的 server 文件,大模型一眼就知道有哪些工具,每个工具是什么含义。
有一些 MCP Server 是可以联网的,比如百度地图、高德地图。而有一些 MCP Server只进行本地操作,比如 Unity 游戏开发、Blender 三维建模、Playwright 浏览器操作。
1.9 MCP 的 Host、Client、Server 是什么关系?
Host 就是 Dify、Cursor、Cline、CherryStudio 等 MCP 客户端软件。
如果你同时配置了多个 MCP 服务,比如百度地图、Unity、Blender 等。每个 MCP 服务需要对应 Host 中的一个 Client 来一对一通信。Client 被包含在 Host 中。
1.10 大模型是怎么知道有哪些工具可以调用,每个工具是做什么的?
每个支持 MCP 的软件,都有一个 MCP Server 文件,里面列出了所有支持调用的函数,函数注释里的内容是给 AI 看的,告诉 AI 这个函数是做什么用的。
MCP Server 文件就是给 AI 看的工具说明书。
例如百度地图 MCP 案例:
https://github.com/baidu-maps/mcp/blob/main/src/baidu-map/python/src/mcp_server_baidu_maps/map.py
每个以@mcp.tool()开头的函数,都是一个百度地图支持 MCP 调用的功能。