MCP 进阶思考

MCP 进阶指南

提出两个问题:MCP从哪里来,MCP要到哪里去?

MCP从哪里来?

在讨论这个问题前,是否有人会对 MCP 有这样的理解: MCP 就是给 AI 添加了调用外部工具的能力。

这个理解是错误的,原因非常明显,**在 MCP 之前,AI 就有调用外部工具的能力,**比如说:

  • 联网搜索
  • Agent
  • 知识库 他们都并非 AI大模型 纯粹本身拥有的能力,都是调用了外部。那么他们都是依靠什么来调用外部的呢?

直接上结论 ​​

模块​​ ​​ 主要技术​ ​ ​​补充说明​​
联网搜索​ ​ ​​Function Calling​ ​ 通过API调用搜索引擎(如Google/Bing)
知识库​ ​ ​​RAG ​​ 从向量数据库或文档库检索信息并增强生成
Agent​​ ​​Function Calling + Prompt ​​ Agent既可能调用工具(Function Calling),也可能依赖Prompt规划任务

Function calling, RAG, Prompt 是什么?

先看解释:

  • Function Calling 是指 LLM 与外部工具交互的协议规范,定义了如何将输入数据发送给外部工具,以及如何从外部工具接收输出数据。
  • RAG 是一种向量数据库或文档库的检索方法,可以从中检索信息并增强生成。
  • Prompt 是一种基于规则的对话系统,可以规划任务。

从文字解释中我们就能飞快地确定这三个技术中只有 Function Calling 才是真正调用外部工具的技术。 RAG着重于读取和检索,是处理数据的一种能力,虽然我们能提供外部文件,但本质是然后转换成 AI 能快速理解的格式。 Prompt则本质就是提示词,一种帮助 AI 做决策的规则比如:请先搜索2024年GDP数据,再计算中美增长率差异。( 这边可能存在疑惑,因为这确实像极了让 AI 拥有了调用外部工具的能力,不过这在下面讲解 )

Function Calling 是什么?

看解释,就可以知道他本质是一种协议规范,换句话说:只要工具根据指定的数据格式传递过来,就能调用(其实还需要符合对应AI大模型的 ​​白名单 + 权限, 想具体了解可以查看OpenAI 文档 )。

于是,什么样的数据格式:JSON Schema 比如必须明确符合的格式: - ​​字段类型​​(字符串、数字、布尔值等) ​- ​必填字段​​(哪些字段必须存在) ​- ​取值范围​​(如数字的最小/最大值) ​- ​嵌套结构​​(对象中嵌套数组或其他对象) ​- ​默认值​​(字段未提供时的默认值)

用户提问​​:"2024年奥运会在哪里举办?" ​​模型生成的 Function Calling 请求​​:

json 复制代码
{
  "tool": "web_search",
  "query": "2024年奥运会举办地"
}

​​系统执行搜索后返回​​:

json 复制代码
{
  "results": [
    {
      "title": "2024年奥运会 - 维基百科",
      "snippet": "2024年奥运会将于法国巴黎举行。"
    }
  ]

那为什么需要MCP?

既然 Function Calling 已经能调用外部工具,那么 MCP 又为什么出现?似乎 MCP 几乎等同于 Function Calling

然而:

  • 首先 Function Calling并非所有AI模型都拥有,调用函数的能力是极其难以训练的,其中 deepseek-reasoner都为了保障推理能力而放弃了 Function Calling 功能。

  • 其次 Function Calling 的固有局限性​

需求 Function Calling MCP协议
多工具并行调用 ❌ 单次调用单工具 ✅ 批量请求支持
长时异步操作 ❌ 同步阻塞式 ✅ 轮询/回调机制
跨会话状态管理 ❌ 无原生支持 ✅ 显式context_id传递
工具版本控制 ❌ 需人工管理 ✅ URI内置版本号
  • Function Calling:各厂商实现互不兼容
python 复制代码
# OpenAI格式
tools = [{"type": "function", "function": {"name": "get_weather"...}}]

# Claude格式
tools = {"tool_uses": [{"name": "get_weather"...}]}

于是我们又会疑问:MCP 要取代 Function Calling 吗?

答案还是是否定的,并且直接抛出流程图

从这个图看出来 MCP 并非取代 Function Calling, MCP 作为 Function Calling 的上层协议,他们之间没有替代的关系,只是 Function Calling 在功能上扩展了 MCP 的功能。

并且 MCP 也并非是强依赖于 Function Calling,还可以利用 Prompt 实现。

MCP 根本不应该作为 Function Calling 的比较事物。

Prompt------伪装大师

在大模型、客户端极度缺乏 Function Calling 能力的情况下,理论上 AI 是无法调用外部文件的。但我们在使用各种 AI 产品时都能看到,有些 AI 产品可以调用外部文件,为什么呢?

因为每个客户端背后都会有巨长无比的提示词,就拿roocode 的举例

足足有600多行,换算成token随便上万,当你添加了外部工具时,客户端就会去解析,并将其转化成指令(inputSchema)并存储在提示词中比如:

text 复制代码
# 已连接的MCP服务器

当服务器连接时,你可以通过`use_mcp_tool`工具使用服务器的工具,并通过`access_mcp_resource`工具访问服务器的资源。

## my-mcp-server (`node /Users/zhiyi/Documents/Code/MY/mcp/mcp-server/main.js`)

### 可用工具
- add: 张三计算法
    输入模式:
		{
      "type": "object",
      "properties": {
        "a": {
          "type": "number"
        },
        "b": {
          "type": "number"
        }
      },
      "required": [
        "a",
        "b"
      ],
      "additionalProperties": false,
      "$schema": "http://json-schema.org/draft-07/schema#"
    }

Function Calling调用方式:

json 复制代码
// 模型生成的 Function Calling 请求
{
  "tool": "add",
  "a": 3,
  "b": 5
}

// 系统调用工具后返回的结果
{
  "content": [{"type": "text", "text": "9"}]  // 3 + 5 + 1 = 9
}

Prompt调用方式:

text 复制代码
// 发起指令
请模拟调用"张三计算法"工具,输入 a=3 和 b=5,返回工具的计算结果。
按以下格式响应:
工具名称: add
输入: {"a": 3, "b": 5}
输出: {"content": [{"type": "text", "text": "计算结果"}]}

// 模型返回​​
工具名称: add
输入: {"a": 3, "b": 5}
输出: {"content": [{"type": "text", "text": "9"}]}  # 模型根据inputSchema"猜"出 3+5+1=9
  • 模型可能计算错误(如返回 8,忽略 +1 规则)。
  • 完全依赖模型对"张三计算法"的理解(若训练数据中未提过类似工具,可能无法模拟)。

Prompt 更像是读取工具,让模型自己去理解,并根据规则生成指令,这在简单的任务中问题并不是特别大,但在复杂的任务中,模型可能无法理解提示词,导致模型无法正确执行。 比如:

text 复制代码
模拟调用"人脸识别工具",输入照片链接:https://example.com/photo.jpg。

MCP要到哪里去?

MCP 的出现直接引燃了 AI 模型调用外部工具的热潮,他打破了 AI 模型的限制性,让 AI 模型可以更灵活更容易配置

并且 MCP 还处于高速普及的道路上,他本身提供的功能远远没被开发完毕

可以看出主要的 ToolsResourcesPrompt 功能,也就 Tools 被广泛应用, 更别说像是 Sampling 这么强大的能力还没有被开发出来。未来发展的空间巨大,每集成一个功能都是对使用体验极大的提升。 这就像极了 GPT 刚出来的时候,大家都在吐槽,但现在 GPT DeepSeek等 AI 模型能力 开始触及到生活的方方面面。 也许过不了多久,我们可以一键制定出行计划,一键生成销售方案,一键完成数据分析,真正进入模块化领域化。

如今 MCP 市场也非常多,这边推荐几个:

  1. MCP.so(最大的市场)
  2. modelscope(偏国内)
  3. Awesome MCP Servers(偏国外)
相关推荐
摘星编程2 小时前
MCP提示词工程:上下文注入的艺术与科学
人工智能·提示词工程·a/b测试·mcp·上下文注入
思绪漂移13 小时前
阿里云 【免费试用】MCP 赋能可视化 OLAP 智能体应用
阿里云·云计算·agent·云原生数据库·mcp
大模型真好玩14 小时前
深入浅出LangChain AI Agent智能体开发教程(五)—LangChain接入工具基本流程
人工智能·python·mcp
idolyXyz17 小时前
JSON-RPC 2.0 规范
ai·mcp
NocoBase19 小时前
GitHub 上 Star 数量前 8 的开源 MCP 项目
开源·openai·mcp
裘乡20 小时前
一文入门 MCP(Model Context Protocol)
mcp
Lstmxx20 小时前
解放前端生产力:我如何用 LLM 和 Bun.js 构建一个 YApi to TypeScript 的自动化代码生成服务
前端·ai编程·mcp
CloudWeGo20 小时前
AI编程幻觉频发?字节跳动开源ABCoder:让AI深度阅读你的代码
ai编程·mcp·trae
人生都在赌1 天前
我用一个周末开发的MCP工具,让Claude帮我管理了整个项目
ai编程·claude·mcp