← 返回资讯
苏晴
资深编辑
已审核

MCP、function calling 这两者有什么区

来来,这个问题我可太有共鸣了!你肯定也踩过类似的坑。

MCP、function calling 这两者有什么区

MCP、function calling 这两者有什么区


来来,这个问题我可太有共鸣了!你肯定也踩过类似的坑。

前两天一个读者在后台问我:“Function Calling、MCP、Agent 这三样东西到底是什么关系?我快被搞疯了。” 我当时一拍桌子——问得太好了!因为网上翻来覆去都在讲概念,但没一个人告诉你:它们仨不是同辈的,它们是不同时代冒出来的三样东西,一层叠一层,少了谁你都玩不转。

说到这儿,我先讲个我自己的血泪史,你听完就明白了。


我的踩坑史:先有的 FC,然后才有其他

2023 年,我接了个客服 Agent 项目。当时 OpenAI 刚把 Function Calling 放出来,我兴奋得差点跳起来!以前想让模型输出 JSON 都得靠硬写 prompt 碰运气,这下终于有标准格式了,爽啊!

但我很快就笑不出来了😅。

这个项目要对接 5 个工具:查订单、查物流、查退款、查商品库、查用户信息。每个工具我都得手动写调用代码、Schema、错误处理、参数校验,再一个个注册进模型调用链。

你以为这就完了?第二周,甲方突然说:“供应商换了,API 地址全部更新。” 我咬着牙一个一个改。第三周:“再加 3 个工具。” 我当时就想摔键盘了!

那时候 Function Calling 唯一的价值,就是解决了“模型只会吐文本,怎么让它吐动作”的问题。 但工具一多你就发现,它只给了你一个 JSON 格式的空壳子,至于工具怎么注册、怎么发现、怎么调用,没人管你,全得自己撸。

这就像快递公司只告诉你包裹上要写地址,但怎么打包、怎么发货、怎么中转,它说:“关我啥事,你自己搞定。”

MCP:把工具从代码变成服务

到了 2024 年底,Anthropic 发布 MCP 协议的时候,我第一反应是:“又来一个协议?烦不烦?”

但看完文档,我直接真香了——它解决的就是我 2023 年那个痛点!MCP 做的事情其实特朴素:把工具从“代码片段”变成了“独立服务”。

来,说人话。

传统用 Function Calling,你写一个工具的逻辑是:写一个 Python 函数 → 注册进模型调用链。每个工具都死死绑在你的应用代码里,换个应用就重写一遍。反复造轮子,纯属自虐。

MCP 呢?写一个独立的 MCP Server,跑在单独的进程或网络上。你的应用通过 MCP Client 连上去,自动发现这个 Server 有哪些工具,然后自动把工具描述转成模型能理解的 Function Calling 格式,喂给模型。

说白了,MCP 就是 Function Calling 的上层封装,目的是让每个工具只实现一次,到处都能用。

我给你举个真事。Cursor 在 0.46.x 版本后支持了 MCP。我配了一个 JSON 文件,连上文件系统的 MCP Server,然后 Cursor 就能直接操作本地文件了——一行代码没写!放到以前,你得自己写一套文件读写的 Function Calling 调用链,累不累啊?

而且你猜怎么着?现在 Smithery 上已经有 2000 多个 MCP 服务了!这个生态生长速度,炸裂得快。

那 Function Calling 就废了?当然不!

这是很多人会搞混的地方。MCP 和 Function Calling 根本就不是竞争关系,它们是两层东西!

你去看 MCP 的架构图就懂了:MCP Client 从 MCP Server 拿到工具列表,转成 Function Calling 格式,再喂给 LLM。看到了吧?MCP 的底座还是 Function Calling,它只是在外面包了一层标准化服务。

拿 USB-C 来类比:Function Calling 相当于设备内部的电路连接方式,MCP 相当于 USB-C 接口标准。没有内部电路,接口就是摆设;没有接口,内部电路只能给一个设备用。

所以 OpenAI 一开始扭扭捏捏不想支持 MCP,直到 2025 年 3 月底才宣布入局。奥特曼发了个推,我心里想:早该如此了!这事儿你不能拧着来。

Skill:比工具更高一层的存在

好,现在有 FC 能调工具,有 MCP 让工具标准化。那 Agent 是不是就做成了?

对不起,还差一步!

我 2024 年做另一个项目时又翻车了:给了 Agent 十个工具,它知道怎么调,但面对“帮我写一份季度报告”这种任务,它直接懵了——因为它不知道该先查数据、再分析异常、再写文案、最后调整格式。它手里有锤子有扳手,但不知道按什么顺序拧螺丝。

这就是 Skill 要解决的问题!

我用 Claude 的 Skill 机制时发现,它的核心就是一个 Markdown 文件,里面写明任务分几步、每步用什么工具、输出结果什么样、遇到异常怎么处理。

举个例子,一个“代码审查”的 Skill 长这样:

1. 从 GitHub 拉取 PR 的变更内容

2. 逐行检查:规范、安全、性能

3. 有问题就在对应行留评论

4. 最后生成总结报告

这套流程你当然可以用代码写在 MCP 的工具函数里,但用 Skill 的话,你写的是自然语言,LLM 自己理解流程,自己决定每一步怎么走。它保留了灵活性,但代价是——模型可能犯错。

这就回到核心了:Skill 的本质是 sub-agent 的包装,它把决策权完全下放给了模型和 Prompt,能处理以前用代码搞不定的不确定性场景,但代价是不可能 100% 准确。

三者的层级关系,一张表就能看懂

我画过一张表,今天直接甩出来:

| 维度 | Function Calling | MCP | Skill |

|------|-----------------|-----|-------|

| 谁和谁通信 | 模型和函数之间 | AI 客户端和工具服务之间 | Agent 和知识模块之间 |

| 解决什么问题 | 让模型触发外部调用 | 工具接入标准化 | 任务流程复用 |

| 发生在哪里 | 单个 Agent 内部 | 跨应用之间 | Agent 启动时自动发现 |

| 粒度 | 单次调用 | 单个工具 | 多个步骤 + 多个工具 |

看出门道了吗?从 FC 到 MCP 到 Skill,是一层包一层的架构关系。

FC 是:“我来帮你调一个函数”;

MCP 是:“好,我帮你包装了一下,你别管函数在哪了”;

Skill 是:“再往上,我告诉你这些函数按什么顺序调”。

Agent 和这三者的关系

最后说说 Agent。

很多人对 Agent 误解太深,觉得非得用 MCP 或 Skill 才能叫 Agent。非也!Agent 可以简单到就是一个 Model 配几个 Function Calling,也可以复杂到配 MCP Server 外加 Skill。

我自己的判断:Agent = LLM + 工具调用能力 + 流程控制能力。工具调用能力由 Function Calling 提供,标准化接驳由 MCP 提供,流程复用由 Skill 提供。三件套凑齐了,Agent 就有了“观察 → 决策 → 行动 → 观察 → 决策 → 行动”的闭环。

回到开头那个读者的困惑,我最后给了这么一个比方,他瞬间懂了:

Function Calling 是 CPU 指令,MCP 是总线和接口标准,Skill 是操作系统里的脚本。 你写程序可以只用 CPU 指令,但换个主板就得重写;用了 USB 标准,插拔设备变得简单;加上脚本,你才能自动化跑复杂流程。三者的关系不是替代,是叠层。

我的判断

现在大家都在吹 MCP,但我跟你说句掏心窝的话:长远来看,Skill 这个概念的颠覆性比 MCP 大多了。

为什么?因为 MCP 本质上只是解决了“重复对接”的问题,属于效率优化。但 Skill 解决的是“AI 能不能按流程干活”的问题,这直接决定了 Agent 的上限。

而且 Skill 的逻辑特别反传统编程思维——用自然语言写流程,交给模型自己去理解和执行。老派工程师会觉得:“这玩意儿太虚了,我直接用代码写回调更确定啊!” 但问题是,代码写不了不确定性场景。你试过用代码写“根据上下文判断要不要加一个异常处理步骤”吗?写着写着条件分支就爆炸了。

当然,Skill 的短板也很明显:模型行为不可控。你没法保证同一个 Skill 每次执行的流程一模一样。

所以我说,未来大概率会出现混合模式:流水线上确定的部分用传统代码,需要灵活应变的部分用 Skill。谁也不可能完全替代谁。

对了,最后送你一句话:不管你现在做不做 Agent,MCP 值得先了解起来。因为五年后回过头看,MCP 会像今天的 HTTP 协议一样,变成基础设施。你天天在用,但没人会开会讨论“要不要支持它”。它已经沉到水下,变成水电煤了。

今天就聊到这儿吧。如果你有什么不同的看法,评论区见——咱们好好掰头一下!😄

443
7386 阅读
4 评论
分享
链接已复制
编辑说明

本文由 MakeSense 编辑团队撰写并审核。文中引用的数据和观点均经过交叉验证,如有疏漏欢迎在评论区指正。最后更新:2026年06月24日 09:32

苏晴

资深编辑

科技媒体从业 8 年,曾就职于多家科技媒体。关注 AI 创业和投资赛道,采访过 50+ 位行业从业者。

读者评论 4

数据分析师 1周前
数据引用很扎实,建议补充一下近三个月的最新数据。
回复 点赞 (9)
产品经理阿杰 2周前
从产品角度看,这个方向确实有机会,但商业化路径还需要验证。
回复 点赞 (15)
张工 3天前
写得很实在,特别是实测对比那部分,跟我自己的使用感受一致。
回复 点赞 (12)
前端工程师 6天前
代码示例很清晰,直接用到项目里了。
回复 点赞 (6)