现在各种大模型频繁刷屏,像聊天一样的AI软件,基本是年轻人的标配了,但是为什么又出现了MCP agent?
为什么
我们可以把普通的对话式大模型想象成一位被关在玻璃房里的“超级大脑专家”。
这位专家无所不知,你问他任何问题,他都能给出完美的文字建议。
但是,他被困在玻璃房里,无法直接帮你去现实中办事。他只会聊天。比如,你让他帮你订一张机票,他只能给你发一段详细的订票步骤,或者给你几个订票网站的链接,最终还是得你自己去操作。
这就好比专家只能“动口”,却不能“动手”。
后来,人们为了让专家能办事,给他配了一些工具(比如直接连接订票系统)。但麻烦来了,每个工具的“插头”都不一样,接口标准各不相同。专家每想用一个新工具,就得重新学一套复杂的对接规则,费时费力,还经常出错。
MCP就像是AI世界里的“USB-C接口”或“万能插座”。有了它,不管是订票系统、办公软件还是家里的智能灯泡,只要符合这个统一的插座标准,超级大脑就能“即插即用”,不需要再为每个工具单独学规矩了。
有了万能插座,这位超级大脑专家不仅有了能听懂你话的“大脑”,还真正长出了能去执行操作的“手脚”。
简单来说
云端用一个文字大模型,经过prompt约束输出的格式
本地解析这个特定的格式,并执行
这就是是一个简易的MCPagent
从底层思路看,就是让大模型只负责“思考”和“输出指令”,让本地程序负责“干活”和“接触现实”。
如果不
既然已经理解了“云端大脑 + 本地执行”这个核心流程,那我们就从这个流程出发,看看如果不使用 MCP,我们会遇到哪些让人头疼的“至暗时刻”。
MCP 的出现,就是为了解决这三个核心痛点:
“脑子换不得”、“手写累死人”、“方言听不懂”。
大脑的“适配地狱”
比如:你用你的“简易方案”写了一个 Prompt,让大模型输出 action: light_off 来控制家里的灯。你在 Prompt 里写得很细:“请输出 JSON,字段名是 action…”。
问题来了:
今天你用的是 GPT-4,它很听话,输出很标准。 明天你想换成 Claude 3.5,或者 DeepSeek,甚至是一个本地跑的小模型(比如 Qwen)。 - 崩溃的事情发生了:
不同模型对 Prompt 的遵从能力不同。有的模型喜欢说话前带个“好的”,有的模型喜欢用单引号,有的模型甚至会忽略你的 JSON 格式要求,直接给你回一句人话。
结果:你的本地解析器瞬间崩溃。为了适配新模型,你得重写 Prompt,甚至得重写解析逻辑。
MCP 解决了什么?MCP 把“工具怎么用”变成了标准化的说明书。以前是你求着模型“请你一定要输出这个格式”,现在是模型(Host)主动问 MCP Server:“你支持什么格式?”。模型和工具之间通过标准接口对话,不管你是 GPT 还是 Claude,只要懂 MCP 标准,就能无缝切换,不用改一行代码。
你在 Prompt 里写了“强制约束”,但为什么还是挡不住大模型“调皮”?
根本原因在于:在 Prompt 里的“强制约束”,本质上只是“礼貌的请求”,而不是“代码级的强制”。
大模型那一边:本身就分“普通聊天”和“工具模式”
我们要理解大模型的工作原理,才能明白为什么 Prompt 的约束力是有限的。
1. 大模型的本质:它是“对话者”,不是“执行机器”
当你给大模型发一个 Prompt 说:“请输出 JSON 格式,不要有多余字符”时,在大模型看来,这只是对话的一部分。
大模型的核心训练目标是:预测下一个最合理的文本。
- 情况 A(运气好):
模型“看懂”了你的要求,它预测下一个最合理的文本确实是 JSON。于是它输出 {"action": "light_off"}。 - 情况 B(运气不好):
模型虽然看到了你的要求,但它的训练数据里,回答问题前常会有礼貌的开场白。它预测下一个最合理的文本是“好的,这是您的指令…”。于是它输出了: “好的,帮您关灯。
{"action": "light_off"}”
这时候,你的本地解析器就崩了。 因为解析器只认 JSON,它不会自动跳过前面的“好的”。
Prompt 只是试图影响模型的“预测概率”,但不能 100% 锁死输出。模型依然保留着“自由意志”(生成文本的概率分布)。
2. 为什么 Function Calling / MCP 就不会乱?
回到你刚才问的 MCP,为什么它就能解决“格式错乱”?
因为 MCP 依托于 Function Calling(函数调用)机制,这和普通的 Prompt 完全是两套底层逻辑。
A. 机制不同:从“生成文本”变为“填写表格”
- 普通 Prompt:
是在一张白纸上写字。模型想写什么写什么,你想让它只写 JSON,得靠“哄”。 - Function Calling / MCP:
是直接给模型一个填空题。
当开启 Function Calling 模式时,大模型内部的机制发生了变化:它不再预测“下一个字是什么”,而是预测“我该调用哪个函数?参数填什么?”。
它会输出一个严格的数据结构对象:
{"name":"light_off","arguments":"{}"}这个输出过程是被屏蔽的,不经过“聊天”通道。模型被强行限制了:你只能在 name 和 arguments 这两个框框里填东西,不能在外面多写一个字。
B. 强制校验:Schema 的硬约束
- Prompt 方式:
就像你在纸条上写“请不要乱写”。如果模型乱写,你的解析器只能报错,无法挽回。 - MCP 方式:
就像有一个严格的考官。
MCP 的工具定义里包含一个 JSON Schema(这就是“标准化的说明书”):
{"name":"light_off","parameters":{"type":"object","properties":{}}}大模型输出时,系统底层会强制做校验:
如果模型输出的参数类型不对(比如该填数字它填了文字),直接拦截,报错,让模型重写。 如果模型想输出多余的废话,系统直接丢弃,因为那些废话不属于 arguments字段。
3. 形象的比喻
想象你要让一个员工(大模型)帮你签合同。
Prompt 约束(简易方案):你口头嘱咐:“请直接在纸上写‘同意’,不要写别的!”结果:员工很有主见,写道:“经过我的思考,我认为应该…所以我写‘同意’。”-> 结果:格式乱了,你得去扣字眼。
MCP / Function Calling:你直接把一张只有签名栏的表格拍在他面前,把笔递给他。除了签名栏,其他地方都是锁死的、涂黑的,他只能在格子里签字。-> 结果:无论他多啰嗦,出来的永远是标准的签名格式。
因为 Prompt 只是“口头命令”,模型有权“不听”。 它的底层逻辑依然是生成文本,随时可能被“礼貌性”、“解释性”的训练数据带偏。
为什么 MCP 能统一?因为 MCP 利用的是大模型的“函数调用层”,这是“填表机制”。它把生成文本的“自由意志”关掉了,只剩下了填空的“执行力”,并且有 Schema(数据结构)做硬性校验。
这就是为什么“简易方案”容易崩,而 MCP 能成为工业标准的核心技术差异。
工具的“孤岛效应”(N x M 问题)
比如:你是一个程序员,你用“简易方案”做了三个工具:
一个查询数据库的工具。 一个读取本地文件的工具。 一个搜索网页的工具。
问题来了:你发现现在的 AI 应用太多了:ChatGPT 官网、Claude 官网、Cursor 编辑器、讯飞星火、通义千问……你想让这些所有的 AI 应用都能用你写的这三个工具。
按照简易方案:你需要给 ChatGPT 写一套解析插件,给 Claude 写一套,给 Cursor 写一套……如果有 10 个 AI 应用,3 个工具,你需要写 10 x 3 = 30 次 集成代码。
MCP 解决了什么?MCP 创造了一个“万能插座”。你只需要把你的工具写成一个 MCP Server(插头)。无论是 Claude、Cursor 还是其他支持 MCP 的 AI 应用(插座),只要插上就能用。你写 1 次,到处运行。 这就是著名的 “Build Once, Run Everywhere”。
Prompt 的“无限膨胀”
场景:你的“简易方案”随着功能越来越多,Prompt 开始变得巨无霸:
“你是一个助手…如果要关灯输出A…如果要查天气输出B…如果要读文件输出C…注意格式必须是JSON…不要有多余字符…”
问题来了:
- Token 爆炸:
每次对话都要先发这一大坨 Prompt,费钱费时。 - 注意力涣散:
模型的上下文窗口是有限的,工具越多,模型越容易“看花眼”,导致格式输出错误。 - 动态调整困难:
用户如果临时不需要“查天气”了,你还得动态修改 Prompt 把那段删掉,逻辑极其复杂。
MCP 解决了什么?MCP 引入了“动态发现机制”。不需要在 Prompt 里写死所有工具。AI 在需要用的时候,才会去问 MCP Server:“你现在有哪些工具?”这就好比你不需要把整本字典背在背上,遇到不认识的字,查一下字典就行。这让大脑更轻松,反应更敏捷。
想象你是一个老板(AI模型),你想指挥员工(本地工具)干活。
没有 MCP(你的简易方案):你每次招新员工(写新工具),都得专门花半天教他一套只有你懂的“老板方言”(自定义 Prompt 格式)。一旦你换个助理(换模型),新助理听不懂方言,所有员工都得重新培训一遍。累不累?
有了 MCP:公司规定所有人必须讲普通话(标准协议)。不管是你亲自上,还是你换个助理,还是招新员工,大家见面直接用普通话交流,立刻就能开工。
MCP 就是为了让 AI 模型和本地工具之间,不再需要每次都“重新发明语言”,而是统一说“普通话”,实现即插即用。
夜雨聆风