比较LLM的function calling,Agent 和MCP
比较
| 对比维度 | MCP(Model Context Protocol) | Function Calling | Agent(智能体) |
|---|---|---|---|
| 定义 | 由 Anthropic 推出的开放协议,标准化 LLM 与外部数据源、工具的通信接口
。 |
LLM 调用外部函数的机制,通过 JSON 参数规范模型与外部系统的交互
。 |
自主运行的智能系统,通过分析、决策和执行实现目标,可调用工具和规划任务
。 |
| 核心功能 | - 提供标准化工具调用接口 - 动态上下文管理 - 跨平台/多数据源集成 。 |
- 单次函数调用 - 参数解析与执行 - 轻量化任务扩展 。 |
- 多步骤任务规划 - 自主决策与反思 - 多工具协作 。 |
| 技术特点 | - 客户端-服务器架构(Host/Client/Server) - 支持 REST/gRPC 通信 - 工具描述与权限控制 。 |
- 基于 JSON Schema 定义函数参数 - 依赖 LLM 生成调用指令 - 需手动实现执行逻辑 。 |
- 结合 RAG、ReAct 等框架 - 长期记忆与状态管理 - 多模态交互能力 。 |
| 典型应用场景 | - 跨平台工具集成(如同时访问本地文件 + Jira API) - 敏感数据隔离(医疗/金融场景) 。 |
- 简单功能扩展(如天气查询、计算器) - 封闭环境应用(内部知识库) 。 |
- 复杂任务自动化(代码生成、数据分析) - 拟人化交互(客服、教育辅导) 。 |
| 优点 | - 标准化协议,降低集成成本 - 支持动态上下文切换 - 多厂商 LLM 兼容 。 |
- 开发简单快速 - 轻量级交互 - 深度绑定特定 LLM(如 GPT-4) 。 |
- 高度自主性 - 复杂任务处理能力 - 可扩展性强 。 |
| 局限性 | - 架构复杂,部署成本高 - 依赖协议生态成熟度 。 |
- 功能单一 - 缺乏动态上下文管理 - 跨平台适配性差 。 |
- 资源消耗大 - 多步推理可能出错 - 工具调用依赖外部系统稳定性 。 |
补充说明:
MCP 与 Function Calling 的关系
MCP 可视为 Function Calling 的扩展协议,通过标准化接口解耦工具调用与具体 LLM,解决跨平台和动态上下文问题实现逻辑
- MCP:采用客户端-服务器架构,通过MCP Server统一管理工具调用和数据访问,LLM只需遵循协议发送请求,无需关注底层实现细节
。 - Function Calling:要求开发者预先定义函数签名,LLM直接生成调用指令,应用负责执行。这种方式与特定模型强绑定,扩展性受限
- MCP:采用客户端-服务器架构,通过MCP Server统一管理工具调用和数据访问,LLM只需遵循协议发送请求,无需关注底层实现细节
技术关系
- 互补性:MCP协议可以封装Function Calling作为其底层执行方式之一,但并非必须依赖
。
示例:MCP Server通过Python脚本调用OpenAI的Function Calling接口,但其他工具可能直接操作本地资源。 - 独立性:实验表明,即使LLM不支持Function Calling(如DeepSeek Re),也能通过MCP实现工具调用
,说明二者在技术实现上解耦。
4. 选择建议
- 优先MCP:需集成多数据源、跨平台协作或长期维护的场景(如企业级Agent开发)
。 - 优先Function Calling:轻量级、单任务且对延迟敏感的场景(如实时翻译)
- 互补性:MCP协议可以封装Function Calling作为其底层执行方式之一,但并非必须依赖
functioncalling的执行过程

MCP 的执行过程

MCP
关键设计特性
动态工具发现
MCP Client在每次会话前自动获取最新工具列表,无需预先硬编码函数签名(对比传统Function Calling)权限隔离机制
- 敏感工具调用需用户二次确认(如文件删除操作)
- 本地资源访问限制在沙箱环境(如仅允许
/data/sales目录)
- 敏感工具调用需用户二次确认(如文件删除操作)
比较LLM的function calling,Agent 和MCP的更多相关文章
- function calling convention
这是2013年写的一篇旧文,放在gegahost.net上面 http://raison.gegahost.net/?p=31 February 19, 2013 function calling c ...
- PatentTips – Java native function calling
BACKGROUND OF INVENTION This invention relates to a system and method for providing a native functio ...
- [转]ARM64 Function Calling Conventions
from apple In general, iOS adheres to the generic ABI specified by ARM for the ARM64 architecture. H ...
- Meet Python: little notes 3 - function
Source: http://www.liaoxuefeng.com/ ♥ Function In python, name of a function could be assigned to a ...
- [转] iOS ABI Function Call Guide
source: apple ARMv6 Function Calling Conventions When functions (routines) call other functions (sub ...
- 什么是内联函数(inline function)
In C, we have used Macro function an optimized technique used by compiler to reduce the execution ti ...
- boost function bind ref
boost::function to encapsulate function pointers. 1. function #include <boost/function.hpp> #i ...
- NodeJs学习笔记(五)---单元测试补充
今天早上继续研究Mocha,忽然发现一个问题,我的大部分程序都是需要登录验证的,所以需要预先登录之后才能进行下一步测试,就开始在网上找答案,发现没有这种资料,很疑惑,最后发现其实是自己太笨了,因为这个 ...
- 用PHP实现浏览器点击下载各种格式文档的方法详解【txt apk等等】
[[注:其他文件想设置成下载文件,和下面介绍的方法一致]] 由于现在的浏览器已经可以识别txt文档格式,如果只给txt文档做一个文字链接的话,点击后只是打开一个新窗口显示txt文件的内容,并不能实现点 ...
- 编写自定义Yeoman生成器
转载自JSCON-简时空:<自定义Yeoman生成器> 1.Getting Started 1.1.设置Node模块 Yeoman提供了generator-generator方便快速编写自 ...
随机推荐
- WPF中webview2鼠标移动窗体
WPF里webview2会一直处于其他控件最上层,是个历史遗留问题. 为了能在webview2里鼠标移动让窗体跟着移动位置代码如下: async Task InitializeAsync() { Ap ...
- 金山毒霸提示这是高危入侵行为taskeng.exe
如果安装了金山毒霸之后经常会弹窗提示:这是高位入侵行为.行为发起taskeng.exe.可疑进程regsvr32.EXE,可疑路径antivirus.php,如下入所示: 可以直接点击"阻止 ...
- Linux 虚拟机中不重启的情况下加新硬盘及扩展根分区容量
我这个系统是Redhat7.7的系统.磁盘占用比较高,需要扩充空用空间,同时又不能关停服务器,或者服务.所以就需要在虚拟机中不重启的情况下加新硬盘及扩展根分区容量. 首先,看一下我这个虚拟机分区占用情 ...
- SSL 和 TLS
转载:链接1 链接2 TLS和SSL SSL(Secure Sockets Layer)安全套接层协议 TLS(Transport Layer Security)传输层安全性协议 最新版本的TLS ...
- 认识soui4js(第1篇)
源代码:https://github.com/soui4js/soui4js soui4js是soui4+quickjs的结合体. soui4是一套c++ directui客户端开发框架,soui4j ...
- maven项目中解决 .git文件太大问题
一.git项目上传后项目文件太大,git filter-branch手动清理 最近发现一个项目git目录已经达到200MB,严重影响了clone代码.操作之前请全量备份代码,操作失误可恢复 二.测试项 ...
- nginx 简单实践:正向代理、反向代理【nginx 实践系列之二】
〇.前言 本文为 nginx 简单实践系列文章之二,主要简单实践了两个内容:正向代理.反向代理,仅供参考. 关于 Nginx 基础,以及安装和配置详解,可以参考博主过往文章: https://www. ...
- 上海站 | 2025 Seeed x LeRobot 具身智能黑客松报名开启!
欢迎来到 Physical AI 的最前沿!Seeed x LeRobot 具身智能黑客松现邀请所有对在机器人领域训练模仿学习策略,并实时进行推理部署感兴趣的人,共同创造具有影响力的创新解决方案.在这 ...
- 浅说 c++20 cppcoro (三)
浅说 c++20 cppcoro (三),https://www.cnblogs.com/bbqzsl/p/18679860 接着上一篇浅说 c++20 coroutine (二) ,继续没说完的事. ...
- kubesphere应用系列(二)部署有状态服务redis
前言 在 Kubernetes 中,服务(Service)可以被分为有状态服务和无状态服务,个人认为的区别: 无状态服务是指不依赖于任何持久化状态的服务.它们通常是将请求处理为独立.无关的事务,并且在 ...