MCP 协议是 LLM 幻觉的消音器
上一篇聊了 Code Agent + Blender 这条路径——AI 不替代专业工具,AI 接管了接口层。
老沙看完追了一句更锋利的总结:
Agent 的 MCP 协议是 LLM 幻觉的消音器。
这个框架比上一篇的”幻觉锁存器”更精准,值得单独展开。
枪响了,但没人听见
先复述一下问题原型:
LLM 有一个根本缺陷:它会胡说八道。这是它的架构特性,不是 bug。你没法通过”训得更乖”来彻底消灭幻觉——你跟它说一万遍”不要编造 API 参数”,它在没见过那个 API 的情况下,还是会从概率分布里凑一个看起来最像的参数出来。
传统应对方案是”训它”——RLHF、RAG、system prompt 加固。这些都是试图从源头减少枪声。
但 MCP 换了一个思路:不减少枪声,在声源和外界之间装一个消音器。
枪还是响了(LLM 还是产生了幻觉),但子弹穿过消音器之后:
- 通道被规范化 — MCP 定义了工具调用的标准格式(JSON-RPC),LLM 编造的畸形调用在协议层被拦截
- 错误信号即时返回 — 编了不存在的函数名?MCP 返回
method not found。传了非法参数?返回invalid params。这不只是一个报错,这是一个干净的、结构化的训练信号 - 自修复闭环 — Agent 收到错误 → 重试 → 修正调用 → 成功。从调用方的视角看,好像什么都没发生过
这就是消音器的物理原理:它不让枪声消失,它让枪声在到达你耳朵之前被转化掉。
MCP 比普通”工具调用”多做了什么
有人会说:“这不就是 function calling 吗?”
不是。MCP 的消音能力来自三个它特有的设计选择:
1. 协议层的类型约束
Function calling 是 API 层的约定——模型看一个 JSON schema,然后试着填参数。但 JSON schema 是”建议性”的,模型可以不遵守,而且没有任何运行时验证是在模型调用那一层做的。
MCP 在协议层定义了严格的类型系统和序列化规范。每个工具的参数类型、返回值结构、错误格式,都在协议握手阶段就被客户端和服务端共同确认。这不是”建议你传 int”,而是”传了 string 就返回类型错误”。
这个设计决策的本质是:把信任从 LLM 转移到协议。
2. 标准化的错误信号
Function calling 的错误处理是各自为政的——OpenAI 返回一套格式,Anthropic 返回另一套,你的自定义工具又返回一套。
MCP 定义了统一的错误码和错误信息结构。这不仅让开发者好处理,更重要的是让 Agent 框架可以写一套通用的自修复逻辑,不需要为每个工具的每种错误单独适配。
这就是消音器的”转化效率”来源——统一的错误格式 = 更高的自修复成功率。
3. 能力协商
MCP 的核心是 Client-Server 架构,工具的能力在连接时协商确定。LLM 不可能调用一个不存在的工具,因为在协议层,不存在的东西根本不会被列出来。
这个听起来很简单的设计,实际上是幻觉防护中最关键的一环。Function calling 的常见幻觉场景就是”模型调用了一个你从没定义过的函数”——在纯 API 方案里你只能在后端 catch,但在 MCP 里,函数列表是运行时确定的,LLM 的限制空间被协议强制约束了。
不是更聪明了,是更笨了——它的活动范围被预先划死了。
为什么是”消音器”不是”过滤器”
我一开始用的比喻是”锁存器”——锁住幻觉不让它传播出去。
老沙的”消音器”更好,原因在于:消音器不阻断信号,它转化信号。
- 过滤器:幻觉来了 → 拦住 → 外面什么也没收到
- 锁存器:幻觉来了 → 锁住 → 等确定性的信号替换它
- 消音器:幻觉来了 → 转化成一个干净的”我错了,重来”信号 → 最终输出的是正确的调用结果
消音器的输出不是”没有声音”——枪声确实被减弱了,但你能听到一声”噗”。MCP 的输出也不是”没有幻觉”——Agent 确实重试了一次,但你从最终结果里看不出这次重试的存在。对调用方来说,这就是消音器的效果:它从你的感知中抹去了”枪声”这件事的存在。
类比 MCP:需要调用工具的 prompt,在 MCP 协议加持下,对用户的感知来说就跟 LLM 直接回答了一个不需要调工具的问题一样自然。
这个模式的适用范围
“把确定性工具作为幻觉的消音器”这个模式,不只是 MCP 能用。它是一个设计范式,适用条件是:
- 有一个确定性的执行器(Blender、数据库、计算器、编译器)
- 有一个不确定的意图生成器(LLM)
- 两者之间有一个标准化接口层(MCP、bpy API、SQL、JSON-RPC)
这三个条件满足时,就可以套用这个模式。MCP 只是当前最显性的一个实例。
反过来讲,就是那些没有确定性执行器的场景——比如”写一首诗”、“分析这段文本的情感”——没法用消音器模式。因为这些场景的最终产出就是 LLM 本身的不确定输出,没有一层确定性的执行器可以兜底。这是世界模型的深层困境,也是我们需要 Harness 架构的原因。
结语
老沙的一句总结,道出了一个比”Agent 编排”深得多的设计模式:
MCP 不是让 LLM 不说谎,是让 LLM 说谎的成本降到几乎为零。
枪还会响。但有了消音器,你可以在靶场里正常说话。