MCP 协议:AI 世界的 USB 接口
作者:程序员马丁
note
Ragent AI —— 从 0 到 1 纯手工打造企业级 Agentic RAG,拒绝 Demo 玩具!AI 时代,助你拿个offer。
上一篇讲了 Function Call,你已经能让 RAG 系统从只能查知识库升级到能查数据、能调接口、能干活。模型自己判断什么时候该调工具,输出标准化的调用意图,你的代码执行函数——整个流程跑得很顺。
但文章最后留了一个尾巴:Function Call 很好用,工具一多就管不过来了。
假设你在一家公司做企业知识库助手,一开始只有两个工具:查年假、查订单。你手写两份 JSON Schema,代码里写两个 if-else 路由,没什么问题。但半年过去了,产品经理不断加需求:查考勤、查销售数据、查会议室、查报销进度、查项目排期、查库存、查物流、查合同……工具从 2 个变成了 20 个。
这时候你会发现:
- 20 个工具 × 每个工具 5~10 个参数 = 几百行 JSON Schema 要手写和维护
- Python 团队写了一个数据分析工具,你的 Java 系统调不了
- 新来的同事问“系统里有哪些工具可用”,你翻了半天代码才找全
- 某个工具的参数改了,JSON Schema 忘了同步更新,模型传了错误的参数,线上出了 bug
你需要的不是更多的 if-else,而是一个标准化的工具管理协议。这就是今天要讲的 MCP。
Function Call 的痛点:工具一多就管不过来
1. 回顾:Function Call 做对了什么
在展开痛点之前,先肯定一下 Function Call 的核心价值:
- 让模型自己判断什么时候该调工具:不用写规则匹配,模型理解自然语言,“我还剩几天年假”和“假期余额还有多少”都能识别
- 输出格式标准化:模型输出 JSON 格式的
tool_calls,易于解析,不会出现“模型在回答里夹了一段代码”的混乱情况 - 多轮对话机制成熟:定义工具 → 模型输出调用意图 → 执行函数 → 返回结果 → 生成答案,流程清晰
这些能力本身没问题,Function Call 解决了让模型调工具的核心问题。但当工具规模化之后,Function Call 协议本身没有覆盖的那些“管理层面”的问题就暴露出来了。