目录
一、背景:大模型需要动手干活
二、方案一:Function Calling:模型API原生能力
2.1 核心定义
2.2 核心特点
2.3 快速了解实际应用(以查询天气为例)
整体流程概览:
核心函数展示(以java➕LainChain4j为例):
三、方案二:MCP:标准化协议
3.1 核心定义
3.2 核心特点
3.3 快速介绍实际使用(以Mysql MCP server为例)
一、理解 MCP Server 的安装逻辑
二、环境准备
三、安装 MySQL MCP Server
第一步:命令行添加(推荐,最快捷)
第二步;指定作用域
第三步:验证 MCP 连接
四、测试应用
四:核心区别
五、生产环境
5.1 标准协同架构链路
5.2 为什么需要协同?
5.3 实战案例演示
六、场景化选型推荐
一、背景:大模型需要动手干活
让大模型“动手干活”是 AI 应用开发的核心。大模型只能输出文本,无法直接操作外部系统。为了让模型‘动手干活’,业界主要有两种方案:
Function Calling(2023 年 OpenAI 首创):让模型在回复中夹带标准化函数调用指令,实现工具调用
MCP(2024 年 Anthropic 提出):定义通用标准协议,实现模型与外部工具服务器的独立通信
二、方案一:Function Calling:模型API原生能力
2.1 核心定义
Function Calling 是大模型原生的 API 能力:开发者预先定义工具函数信息后发送给模型,模型识别用户意图后,输出结构化调用指令。业务程序解析指令并执行对应工具,最后模型结合用户提问与工具返回结果,汇总生成最终答案。
标准返回示例:
{
// 要调用的工具函数名称
"function": "query_weather",
// 函数所需入参:城市名称
"arguments": {"city": "北京"}
}
2.2 核心特点
特点 | 详细说明 |
|---|---|
轻量便捷 | 无需额外部署服务,仅需在模型 API 请求中配置参数,开箱即用 |
响应快速 | 单次 API 请求内完成意图识别、参数解析、调用指令生成,链路极短 |
模型原生 | 由模型厂商原生实现,随模型版本迭代自动优化升级,无需开发者改造 |
存在绑定限制 | 函数签名每次请求都需带入,工具数量过多会造成 Token 溢出、上下文过载 |
2.3 快速了解实际应用(以查询天气为例)
整体流程概览:
用户提问:“今天北京天气怎么样?”
↓
【大模型】识别意图 → 判断需要调用 get_weather 工具
↓
【输出调用指令】{"name":"get_weather", "arguments":{"city":"北京","date":"2026-06-12"}}
↓
【业务代码】执行 WeatherTools.getWeather("北京", "2026-06-12")
↓
【调用真实天气 API】(或返回模拟数据)→ 获得结果:“北京 2026-06-12 天气:晴...”
↓
【大模型】将工具返回结果组织成自然语言
↓
最终回答:“今天北京天气晴朗,温度 18~28℃,湿度 45%,风力 2 级。”
核心函数展示(以java➕LainChain4j为例):
@Component public class WeatherTools { /** * 定义一个可供大模型调用的工具函数。 * @Tool 注解告诉 LangChain4j:这是一个工具,大模型可根据用户意图决定是否调用 * name : 工具的唯一标识,大模型在生成调用指令时会使用这个名字 * value : 工具的功能描述,帮助大模型理解在什么场景下使用该工具 */ @Tool(name = "get_weather", value = "获取指定城市和日期的天气信息") public String getWeather( @P(value = "城市名称,如北京、上海") String city, @P(value = "日期,格式 yyyy-MM-dd") String date) { // 调用真实天气 API(示例为模拟返回) return callWeatherAPI(city, date); } private String callWeatherAPI(String city, String date) { // 实际项目中替换为 HTTP 请求(如高德、和风天气等) return String.format("%s %s 天气:晴,温度18~28℃,湿度45%%,风力2级", city, date); } }三、方案二:MCP:标准化协议
3.1 核心定义
MCP(Model Context Protocol,模型上下文协议)是一套与大模型完全解耦的开源标准协议。它搭建了标准化的工具调用架构,彻底解决工具复用、跨模型适配、安全管控等问题。整体分为三层架构:
MCP Server:工具能力载体,封装数据库查询、CRM 调用、本地文件读写等具体业务能力
MCP Client:嵌入 AI 宿主(Claude Desktop、Cursor、自研 AI 应用),负责与服务端通信、指令转发
Host 运行环境:统一管理安全策略、权限校验、操作审计、流量管控
基于 MCP,大模型无需感知工具具体实现逻辑,仅需通过标准协议调用 MCP Server 暴露的能力。
3.2 核心特点
特点 | 详细说明 |
|---|---|
彻底解耦 | 工具实现与大模型完全分离,更换模型无需重写、适配工具逻辑 |
可审计、高安全 | 三层架构隔离,可在宿主层实现精细化权限校验、全链路操作日志审计 |
动态注册 | 支持运行时新增、更新工具,无需修改模型请求参数、无需重启服务 |
生态统一 | 所有兼容 MCP 协议的工具,可被任意 MCP 宿主、任意主流大模型调用 |
3.3 快速介绍实际使用(以Mysql MCP server为例)
一、理解 MCP Server 的安装逻辑
MCP Server 本质上是一个独立运行的程序,它通过标准输入输出(stdio)与 Claude Code 通信。安装一个 MCP Server 只需要做两件事:
告诉 Claude Code 怎么启动这个程序(配置
command和args)告诉这个程序怎么连接外部资源(配置环境变量
env)
通信流程:
Claude Code 启动 → 拉起 MCP Server 进程 → Server 连接外部资源(如 MySQL) ↑ ↓ ←──────── stdio 通信 ─────── 返回结果
二、环境准备
在安装 MySQL MCP Server 之前,确认以下环境已就绪:
| 依赖 | 最低版本 | 验证命令 | 说明 |
|---|---|---|---|
| Node.js | >= 18 | node -v | MCP Server 的运行环境 |
| Claude Code | 最新版 | claude --version | 前两节已完成安装 |
| MySQL | 5.7+(推荐 8.0+) | mysql --version | 要连接的目标数据库 |
逐一检查:
# 1. 检查 Node.js node -v # 期望输出:v18.x.x 或更高 # 2. 检查 Claude Code claude --version # 期望输出:版本号 # 3. 检查 MySQL 是否运行 mysql -u root -p -e "SELECT VERSION();" # 期望输出:MySQL 版本号三、安装 MySQL MCP Server
我们使用@pickstar-2002/mysql-mcp这个社区维护的 MCP Server,它提供了15 个数据库操作工具。
第一步:命令行添加(推荐,最快捷)
在终端中直接运行:
# claude mcp add:向 Claude Code 添加一个 MCP Server 配置 claude mcp add mysql-mcp \ # mysql-mcp:给这个 MCP Server 起一个名字(可自定义) -e MYSQL_HOST=localhost \ # 环境变量:MySQL 主机地址 -e MYSQL_PORT=3306 \ # 环境变量:MySQL 端口号 -e MYSQL_USER=root \ # 环境变量:MySQL 用户名 -e MYSQL_PASSWORD=123456 \ # 环境变量:MySQL 密码(生产请勿明文,可用环境变量替换) -- \ # 分隔符:前面是 claude mcp add 的参数,后面是要执行的启动命令 npx @pickstar-2002/mysql-mcp@latest # 启动命令:使用 npx 下载并运行 mysql-mcp Server注意:把your_password和your_database替换为你实际的 MySQL 密码和数据库名。指定作用域:
第二步;指定作用域
# 仅当前项目生效(默认) claude mcp add mysql-mcp -s local ... # 当前用户所有项目生效 claude mcp add mysql-mcp -s user ... # 项目共享(写入 .mcp.json,可提交到 Git,注意不要提交密码) claude mcp add mysql-mcp -s project ...第三步:验证 MCP 连接
配置完成后,必须重启 Claude Code才能加载新的 MCP Server:
# 如果正在 Claude Code 会话中,先退出 /exit # 重新启动 claude
在 Claude Code 中输入:
/mcp
你会看到mysql-mcp出现在可用 MCP 列表中。
四、测试应用
在 Claude Code 中输入自然语言指令:
帮我在本地数据库中创建一个叫 MCP_MYSQL 的数据库,创建一个员工表,并且添加一些数据。
Claude Code 会通过 MCP Server 自动执行 SQL 操作,并返回执行结果。
四:核心区别
| 对比维度 | Function Calling | MCP |
|---|---|---|
| 技术层级 | 模型 API 层的专属能力 | 通用协议层的行业标准 |
| 跨模型兼容 | 各厂商格式不互通,更换模型需重写工具 | 全兼容,一套工具适配所有 MCP 宿主 |
| 动态工具更新 | 不支持,新增工具需修改请求参数 | 支持运行时动态注册、更新、下线工具 |
| 安全审计能力 | 依赖模型厂商,审计粒度粗 | 宿主层自主可控,支持操作级精细化审计 |
| 开发成本 | 极低,少量代码即可实现 | 中等,需独立开发、部署 MCP Server |
一句话总结:Function Calling解决「模型怎么看懂指令、生成调用」,MCP解决「工具怎么标准化、安全高效执行。
五、生产环境
生产环境的好方案 不一定非要二选一,而是双层协同架构,各司其职、互补短板。
5.1 标准协同架构链路
5.2 为什么需要协同?
缺少 Function Calling:意图识别不准、参数传错,大模型不知道该调哪个工具、怎么传参。
缺少 MCP:切换模型就要重写全部工具适配逻辑,且难以统一权限管控与运维审计。
5.3 实战案例演示
用户提问 → Function Calling层(识别物流查询意图,输出带订单号的标准调用指令) → MCP客户端(匹配物流MCP服务,路由转发请求) → MCP Server(查询库返回物流数据:{"status": "已发货", "location": "上海中转站"}) → 大模型整合信息 → 输出自然语言回复六、场景化选型推荐
| 业务场景 | 推荐方案 |
|---|---|
| 小型 Demo、仅 3 个以内工具、单模型、无敏感数据 | 纯 Function Calling |
| Cursor 等软件本地文件读写插件 | 纯 MCP |
| 多 AI 产品共用一套工具 | 纯 MCP |
| 涉及隐私 / 支付 / 内网库,需权限审计 | MCP + Function Calling |
| CRM、企业内部业务系统操作 | MCP + Function Calling |
| 企业 Agent,工具超 10 个、海量工具调度 | MCP + Function Calling |