RAG像盲人摸象,Function Calling累成狗,MCP怎么解决?
你被“协议”两个字吓到了?来看看MCP到底是个什么神仙东西
说实话,我第一次看到MCP这三个字母的时候,脑子里冒出的第一个念头是——又来一个协议?是不是又是那种“看起来很美好,一落地就抓瞎”的玩意儿?
你也有这种感觉吧?技术圈最不缺的就是新概念,今天一个框架,明天一个协议,后天一个标准,搞得人眼花缭乱。
但我真正上手折腾了一圈之后,我改观了。
这事儿,真挺有意思的。
先聊聊两个让你又爱又恨的老朋友
要理解MCP,得先看看它之前我们是怎么过来的。
RAG(检索增强生成),这玩意儿你应该不陌生吧?就是把你的资料库切成小块,转成向量,存进数据库。用户提问的时候,去库里搜相关片段,拼到提示词里一起发给大模型。
好处是不用微调模型,省心省钱。坏处呢?你永远不知道搜回来的东西是不是真的有用。
说到这儿,我得跟你分享一个我踩过的坑。
有个项目用RAG做客服知识库,用户问“怎么退款”,结果系统匹配到的是“退款政策”的目录页——就是那种只有几个标题、没有具体内容的目录页。大模型能怎么办?它只能根据目录瞎编啊!编出来的东西跟实际流程差了十万八千里。
用户气疯了,我也气疯了。
你以为RAG是万能钥匙?其实它就是个盲人摸象的瞎子。
Function Calling(函数调用) 是另一种思路。模型根据用户输入判断需要调用什么工具,后端执行实际请求,再拿结果生成回答。这套机制在百炼、Azure OpenAI这些平台上都用得挺成熟。
但问题来了:每个平台都有自己的Function Calling实现,工具接口五花八门。你写了一个工具,换个平台就得重写。
这就是所谓的“M×N问题”——M个模型,N个工具,需要M×N种集成方式。
累不累?
累。
MCP到底是什么?一个USB-C接口的故事
2024年11月25日,Anthropic开源了MCP。官方说法是:模型上下文协议,一个开放标准,让AI助手连接数据所在的系统。
翻译成人话:MCP就是AI应用的USB-C接口。
你想想,USB-C为什么好用?不管你是手机、笔记本、显示器还是充电宝,插上就能用,不用管背后是什么协议。以前出门要带三根线,现在一根搞定。
MCP做的就是同一件事——让AI模型用统一的方式去调用各种工具和数据源。
MCP有三个核心组件,简单到爆:
- **MCP Host**:集成MCP Client的AI应用。比如Claude Desktop、Cherry Studio,或者你们公司的智能体平台。
- **MCP Client**:负责发请求、收响应。你平时看不见它,它藏在Host里面,像个幕后英雄。
- **MCP Server**:提供具体功能的服务。比如查询数据库、操作GitHub、读取Figma设计稿。
工作流程是这样的:用户提问 → Host分析需要什么工具 → Client调用对应的Server → Server返回结果 → Host根据结果生成回答。
说白了,MCP把Agent开发和工具开发解耦了。
写工具的人不用关心Agent怎么用,写Agent的人不用关心工具怎么实现。
各干各的,互不打扰,多好。
我实操了一把:从0到1写MCP Server,踩坑实录
光说不练假把式。我照着官方教程折腾了一下午,踩了不少坑,分享一下真实经历。
环境准备:
- Python 3.10+
- Python MCP SDK 1.2.0+
- Claude Desktop(作为MCP Host)
- uv(Astral开发的超快Python包管理器,用Rust写的,比pip快100倍)
说实话,uv这玩意儿我第一次用的时候还在想:又来个新工具?
但用完之后真香。uv add mcp 秒装,比pip不知道快到哪里去了。那种感觉就像你习惯了骑自行车,突然有人给你一辆电动车——爽!
写Server:我的需求很简单——读取本地文件。让Claude能直接读取我电脑上的文件内容。
代码是Claude 3.7帮我生成的。我跟它说:“帮我写一个MCP Server,能读取本地文件,用os模块就行。”
它刷刷刷写出来了。核心逻辑就十几行:
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("file-reader")
@mcp.tool()
async def read_file(path: str) -> str:
with open(path, 'r') as f:
return f.read()测试:官方文档没提测试,但我强烈建议加上。用MCP Inspector工具可以调试Server,看它能不能正常响应请求。
我第一次跑的时候报错了,原因是uv路径没配对。用 which uv 拿到绝对路径,改好配置文件就OK了。
接入Claude Desktop:在Claude Desktop的配置文件里加上Server信息,重启应用。如果看到MCP Server列表里出现了你的Server,就说明成功了。
然后我试了个prompt:“读取我桌面上的notes.txt文件。”
Claude弹了个授权请求,点允许。
它真的读到了文件内容,还帮我总结了一下。
那一刻的感觉:这玩意儿真的能干活!不是PPT里画大饼的东西!
MCP的生态:能干的事比你想象的多
目前MCP的生态已经相当丰富了。我列几个实用的,你感受一下:
- **Slack MCP**:搜索消息、发消息、建频道。适合自动同步项目进度。
- **数据库MCP**:直接查数据库,不用手动复制SQL结果。
- **Figma MCP**:读设计稿,把设计直接转成代码。设计师和开发者的福音。
- **GitHub MCP**:操作仓库、Issue、PR。自动化项目管理。
- **浏览器MCP**:操作Chrome,截图、填表单、读网页。
你想想,以前要让AI做这些事情,得写多少胶水代码?现在配个MCP Server就搞定了。
这不是效率提升,这是效率革命。
一个容易被忽略的点:Hooks才是真正的杀手锏
Claude Desktop还提供了Hooks机制,可以在工具调用前后自动触发脚本。比如:
- **PreToolUse**:Claude调用工具之前触发。可以用来拦截危险操作,比如不让它删文件。
- **PostToolUse**:调用工具之后触发。可以自动格式化代码、跑测试。
我试了一下PostToolUse Hook:让Claude每次修改JS/TS文件后自动跑eslint --fix。它直接帮我生成了配置,写进了项目目录下的.claude/settings.json里,然后验证成功。
说实话,这比我在CI/CD里配lint检查方便多了。因为Hook是平台层面强制执行的,Claude想忘都忘不了。
你想想,这意味着什么?意味着你的AI助手不再是“用完就忘”的傻瓜,而是“有记忆、有习惯、有规则”的聪明帮手。
MCP和OpenAI Agent SDK:竞争对手都在用,说明什么?
2025年3月11日,OpenAI发布了Agent SDK,引入了Multi-Agent概念。你可以定义多个领域的Agent,让它们协同完成复杂任务。
有意思的是,OpenAI Agent SDK也支持MCP。
这说明什么?说明MCP正在成为行业标准,连竞争对手都在用。
目前Coze、腾讯云智能体开发平台都已经支持了Multi-Agent模式。Agent的发展速度比我想象的快。
你想想,以前是“谁做得好谁说了算”,现在是“谁的标准被接受谁说了算”。
MCP正在成为那个“被接受的标准”。
我的判断:MCP会不会成为AI时代的TCP/IP?
现在说这个为时过早。
但它确实解决了几个核心问题:
1. 标准化:工具接口统一,不用每个平台适配一次。
2. 解耦:写工具的和写Agent的各干各的。
3. 可扩展:加个新工具就是加个Server的事。
缺点也有:生态还不够成熟,调试工具不够完善,安全性还需要加强——毕竟让AI直接操作外部系统,这事想想就有点刺激。
但方向是对的。
AI应用不能只活在对话框里,它需要和真实世界交互。MCP就是那个桥。
你如果现在开始折腾MCP,等生态成熟的时候,你就是那个最懂的人。
最后说一句:别把MCP想得太玄乎。它就是一个协议,让AI能调你的工具,让你的工具能被AI调。写个Server也就几十行代码,花一个下午就能跑通。
试试看,说不定能打开新世界的大门。
毕竟,AI时代最酷的事,不是看着AI变强,而是让AI为你所用。
你值得拥有一个能跟AI直接握手的工具。
读者评论 3