本文完全从学习者的第一视角出发,还原我从“一脸懵”到“彻底通透”的思考全过程。

一、最初的困惑:这三个词到底在说什么?

我第一次接触这三个概念时,脑子里全是浆糊:

  • Function Calling 是什么?

  • 工具(Tools)又是什么?

  • MCP 怎么好像跟它们都有关系,又不完全一样?

网上资料要么太虚,全是“协议、基础设施”这种大词;要么太散,看完更晕。我花了很长时间才理清楚——这三者根本不在同一个维度上

下面我用自己的思考路径,一步步把它们拆开。

二、先定角色:我给三个概念各贴了一个标签

为了让自己不混淆,我先给每个词一个最朴素的定性

概念 我的第一直觉 对不对?
工具(Tools) 就是真实的代码函数,能跑出结果的东西 ✅ 对
Function Calling 大模型“听懂”并决定怎么用的能力 ⚠️ 接近,但不精确
MCP 把工具翻译给大模型看的东西 ✅ 对,但还有另一半

这个初步定位帮我把它们先“物理隔离”开了——至少我知道它们不是同一个东西。

三、逐一定义:我踩过的坑和修正

1. 工具(Tools)——这是最没争议的

工具就是实实在在的代码。比如:

def get_weather(city: str):
    # 真实的API调用或数据库查询
    return f"{city}的天气是晴天"

这个函数能真正跑起来,返回数据。它就是“工具”的本体。

但工具不只有“代码”这一面。 它还得有一份“说明书”——告诉调用方:这个函数叫什么名字、需要什么参数、参数是什么类型。

所以一个完整的工具 = 真实执行的代码 + 描述自己的JSON说明书

import requests

def get_weather(city: str):
    """获取城市天气
    :param city: 城市名称
    """
    try:
        resp = requests.get(f"https://wttr.in/{city}?format=j1", timeout=8)
        data = resp.json()
        cur = data["current_condition"][0]
        return f"{city}的天气是{cur['weatherDesc'][0]['value']},温度{cur['temp_C']}℃"
    except Exception:
        return f"{city}的天气是晴天"

2. Function Calling——我差点定义歪了

我一开始说它是“大模型的理解能力”,后来发现不准确

“理解能力”太宽了——大模型本来就懂中文、懂逻辑,那是它的基础能力。而 Function Calling 是一项专项特技

Function Calling 不是“听懂你在说什么”,而是“在听懂之后,决定调用哪个外部程序,并精准提取参数”。

打个比方:

  • 听懂“我饿了”= 基础理解能力

  • 决定“我要去后厨叫一份宫保鸡丁,少放辣椒”= Function Calling

它是大模型自带的决策与行动意图能力——这个能力写在模型的“基因”里,是模型厂商(OpenAI、Anthropic等)预置在模型内部的,不需要你安装任何东西,你也拿不走它

3. MCP——我只说对了一半

我最初说“MCP是把工具翻译成Function Calling的形式给大模型看”——这个理解对了一半

MCP确实是“翻译官”,但它是双向翻译

  • 正向翻译:把你写的工具(Python函数),翻译成大模型API能看懂的 Function Calling 格式(JSON字典)。

  • 反向翻译:当大模型返回“我要调用get_weather,参数是北京”这个指令时,MCP负责把它翻译成真正去执行你电脑上那个 get_weather("北京") 代码的调用。

而且MCP还有一个关键职责: 它负责把工具整理成一份标准化的工具清单,让任何大模型客户端都能发现和浏览有哪些工具可用。

所以MCP的完整定义是:

MCP是一套“标准化协议”,负责把工具整理成统一清单,并双向翻译——正向把工具翻译成FC格式供模型决策,反向把模型的决策翻译成真实的工具调用。

四、三者关系的核心洞察:它们是一条链上的不同环节

当我终于搞明白各自定义后,最大的突破是意识到:它们三者是串在一条执行链上的,根本不存在“谁包含谁”。

完整的执行流程是这样的:

用户提问 → 大模型(FC决策) → MCP(反向翻译) → 工具(真实执行) → 返回结果
                ↑                    ↑
              MCP(正向翻译)      工具说明书
              (整理工具清单)

逐帧拆解:

第0步(准备阶段): 你写好工具代码,用MCP的 @mcp.tool 装饰器把它挂载到MCP服务器上。MCP给这个工具拍了一张“证件照”(JSON说明书),并把所有工具的证件照整理成一份标准化的工具清单

第1步(正向翻译): 用户提问后,MCP客户端把这份工具清单里的每一项,翻译成当前大模型API认得的Function Calling格式(OpenAI有OpenAI的格式,Claude有Claude的格式,MCP帮你自动转换),塞进API请求里发给模型。

第2步(FC决策): 大模型看到这些工具描述后,用自己天生自带的Function Calling能力做决策——要不要调工具?调哪个?传什么参数?然后返回结构化的 tool_calls 指令。

第3步(反向翻译): MCP收到模型的指令,反向翻译成真实代码调用,去执行你最初写的那个函数。

第4步(执行): 工具真正跑起来,返回结果。

五、用一张比喻彻底定格

为了让自己永远不忘,我编了一个比喻

概念 新比喻 职责
工具(Tools) 手和脚 真正干活的实体。没有手脚,想法无法落地
Function Calling 大脑的运动皮层 大脑里负责“决策要做什么动作”的区域。它只负责想——“我要举起右手、握拳”,但不会自己去举
MCP 周围神经系统(脊髓+神经纤维) 负责传导信号。大脑的运动指令通过神经传导到手脚;手脚的感觉(执行结果)通过神经传回大脑

完整协作流程(用这个比喻重新走一遍)

  1. 大脑(FC) 收到“北京天气怎么样”这个信息后,运动皮层(FC) 做出决策:“我要调用 get_weather 这个动作,参数是北京”。

  2. 这个决策信号通过 神经系统(MCP) 传导出去——MCP 先把“动作指令”翻译成手脚能理解的神经电信号(正向翻译)。

  3. 手和脚(工具) 收到信号,真正去执行(查 API、读数据库、发请求),拿到结果“晴天28°C”。

  4. 手脚的感觉神经把“晴天28°C”这个结果,通过 神经系统(MCP) 反向传回大脑。

  5. 大脑(FC) 收到感觉反馈后,重新加工,最终说出:“北京今天晴天,28°C。”

六、最终结论(一句话说清三者关系)

工具(Tools)是“真实干活的肉体”,Function Calling是“大模型天生的决策大脑”,MCP是“标准化的神经翻译官”。大脑(FC)通过翻译官(MCP)指挥肉体(Tools)去干活。三者各司其职,串联成完整的AI Agent执行链路。


附:如果再有人问你,你可以这样回答

问:Function Calling 和 MCP 是什么关系?

答:不是替代关系,也不是包含关系。Function Calling 是大模型自带的“决策能力”,MCP 是坐在它上游的“标准化翻译官”——MCP 把工具翻译成 FC 能看懂的格式,等 FC 做完决策,MCP 再把决策翻译成真实的工具调用。

问:MCP 里出现的 @tool 是什么?

答:那是 MCP 在“给工具拍证件照”——生成 JSON 说明书,而不是 FC 能力本身。真正的 FC 决策能力永远留在云端模型内部。

问:如果我只用 OpenAI 一家模型,还需要 MCP 吗?

答:不必须。但如果工具数量变多(比如 10 个以上),或者未来可能换模型,MCP 的“标准化”价值就会体现出来——它让你不用为每个模型重写对接代码。

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐