我终于搞懂了Function Calling和MCP的区别
本文介绍了Function Calling与MCP两种技术。Function Calling是大模型调用预设函数与外部系统交互的能力,用于扩展模型能力、结构化输出和动态决策,适合简单原子化任务。MCP是Anthropic推出的开放通用协议,采用客户端-服务器架构,提供Resources、Tools、Prompts三大能力,支持跨模型跨平台复杂场景。通过门票助手、高德地图MCP、Tavily搜索MCP等案例展示应用。对比显示,Function Calling适合简单低延迟任务,MCP适合复杂多工具联动场景,两者可组合使用。
一、Function Calling
1. 核心定义与作用
Function Calling:大模型调用预设函数与外部系统交互的能力,是大模型连通现实世界的桥梁。
-
扩展模型能力
-
获取实时数据:天气、股价、新闻等
-
执行复杂运算:数学计算、代码运行
-
操控外部系统:发送邮件、智能设备控制
-
-
结构化输出:将自然语言解析为标准化函数参数,完成指令传递。
-
动态决策:模型自主判断调用时机,支持多函数链式调用。
2. 典型落地案例:门票助手
基于 Qwen-Agent 实现数据查询助手,核心流程与实现如下:
(1)整体搭建流程
-
系统初始化:配置系统提示词(数据表结构、查询规则),注册 SQL 查询工具。
-
助手实例化:加载大模型配置、提示词、工具列表,初始化智能助手。
-
交互部署:支持终端、WebUI 两种交互模式。
-
调用逻辑:用户输入自然语言 → 模型生成 SQL → 调用工具执行查询 → 返回结果。
(2)核心实现要点
-
数据表:
tkt_orders,核心字段包含order_time(订单日期)、province(省份)、sales_channel(销售渠道)、order_value(订单金额)、quantity(商品数量)等。 -
自定义工具:继承基础工具类,实现
exc_sql工具,接收并执行 SQL 语句,返回查询结果,同时捕获执行异常。 -
数据可视化集成
-
整合查询与绘图能力,单次调用完成数据查询 + 图表生成。
-
自动推断坐标轴:文本类型字段为 X 轴,数值类型字段为 Y 轴。
-
支持并列柱状图,自动调整样式、保存图片并以 Markdown 格式返回表格 + 图表。
-
-
数据问题优化:针对周统计范围偏差问题,精准限定时间区间;通过数据透视表实现多维度(日期 + 渠道)可视化展示。
3. 适用场景
优先用于简单、原子化单次任务:天气查询、数学计算、单条消息推送等。
- 优势:无需额外服务配置,开发快捷;单次请求响应,延迟更低。
二、MCP(Model Context Protocol)
1. 核心定义
MCP:由 Anthropic 推出的开放通用协议,标准化 LLM 与外部数据源、工具、服务的交互方式,类比为 AI 领域的通用接口标准。
2. 核心架构与组件
采用 ** 客户端 - 服务器(Client-Server ** 架构:
-
MCP Host:运行大模型的环境,如 Cursor、Claude Desktop、Cherry Studio。
-
MCP Client:内嵌于 Host,负责发起请求、与服务端通信。
-
MCP Server:轻量服务,封装具体功能,供大模型远程调用。
3. 三大核心能力
-
Resources:提供结构化数据、文档等内容,扩充模型上下文信息。
-
Tools:提供外部操作能力,如接口调用、文件处理、网络检索。
-
Prompts:预定义提示模板,优化任务执行效果。
4. 主流应用案例
(1)高德地图 MCP(旅游攻略)
-
前置准备:高德开放平台注册应用,获取 API Key。
-
客户端配置(Cursor / Cherry Studio / GitHub Copilot):编写
mcp.json,配置 MCP 服务命令、环境变量(填入 API Key)。 -
可用工具:景点检索、天气查询、经纬度转换、步行 / 驾车 / 公交路线规划、地址解析等。
-
功能落地:基于地图接口,自动获取景点、天气、路线信息,生成旅游行程,并可结合前端代码输出可打印的行程网页。
(2)Tavily 搜索 MCP(网络检索)
-
服务配置:填入 Tavily API Key,部署 MCP 检索服务。
-
核心工具
-
tavily-search:全网关键词检索,支持限定结果数量、检索深度、时间范围、域名黑白名单。 -
tavily-extract:抓取指定网页,提取正文内容,支持不同解析深度与输出格式。
-
-
落地场景:实时新闻检索、行业资讯查询、网页内容解析,可对接 Qwen-Agent 等 Agent 框架使用。
(3)桌面 TXT 统计器(MCP SDK 开发)
基于 Python MCP SDK / FastMCP 自定义本地 MCP 服务:
-
环境依赖:安装
mcp库,搭配 UV 工具管理服务运行。 -
工具开发:通过
@mcp.tool()装饰器注册函数,实现文件统计、文件列表查询功能。 -
服务调试:使用 MCP Inspector 可视化工具,本地连接、调用接口、查看执行日志。
-
核心功能:统计桌面 TXT 文件数量、展示桌面 TXT 文件名称列表。
三、Function Calling 与 MCP 对比
| 对比维度 | Function Calling | MCP |
|---|---|---|
| 本质属性 | 模型厂商私有功能接口 | 跨平台开放标准协议 |
| 扩展性 | 需针对不同模型单独适配 | 一次开发,全模型兼容 |
| 复杂度适配 | 适合简单单次调用 | 支持多轮对话、复杂上下文管理 |
| 生态依赖 | 绑定特定大模型 | 跨模型、跨平台运行 |
| 数据安全 | 依赖云端 API 密钥 | 支持本地数据管控 |
| 复用性 | 低,函数多为定制化开发 | 高,标准化服务可多场景复用 |
| 开发成本 | 简单任务开发成本低 | 复杂场景整体成本更低 |
四、技术选型总结
-
Function Calling:作为大模型底层基础能力长期存在,简单、低延迟、快速上线的原子任务优先选择。
-
MCP:面向复杂场景、跨模型 / 跨平台、多工具联动的业务,是主流发展方向,适合标准化工具生态搭建。
-
组合使用:简单任务用 Function Calling 提效,复杂多工具、跨环境场景基于 MCP 构建统一服务。