AI 进化论:从 Function Calling 到 MCP,你的大模型还在“裸奔”吗?

文章目录
- AI 进化论:从 Function Calling 到 MCP,你的大模型还在“裸奔”吗?
-
- 一、 给 AI 装上手脚:Function Calling 到底是个啥?
-
- 1. 专业解释与大白话解读
- 2. 核心功能与代码示例
- 二、 实战演练:搭建你的“门票数据助手”
-
- 1. 业务场景介绍
- 2. 进阶:一次调用,搞定查询 + 可视化
- 三、 MCP:AI 界的“USB-C”接口协议来了!
-
- 1. 什么是 MCP?
- 2. MCP 核心架构
- 四、 玩转 MCP:从旅游攻略到桌面统计
-
- 1. CASE:高德地图旅游助手
- 2. CASE:桌面 TXT 统计器(MCP SDK 实战)
- 五、 脑洞大开:未来 3 大拓展方案
- 六、 总结与互动引导
-
- 转载声明
- 参考链接
一、 给 AI 装上手脚:Function Calling 到底是个啥?
1. 专业解释与大白话解读
专业解释: Function Calling(函数调用) 是模型厂商(如 OpenAI、阿里云 Qwen)提供的私有接口功能。它允许开发者预定义一组工具(函数),当模型判断用户意图需要调用外部数据或执行特定操作时,它会输出符合函数签名的 **结构化参数(JSON)**,由后端执行后再将结果反馈给模型生成最终回复。
大白话解读: 想象你雇了一个很有才华但没手没脚的“军师”(大模型)。如果你问他“今天外面几度?”,他只能瞎编。但如果你递给他一个温度计(Function),告诉他怎么读数,他就能先看温度计,再告诉你:“主公,外面 35 度,建议宅着。”
生活案例: 这就像点外卖。你(用户)对大模型说“我饿了”。大模型(外卖员)不会自己做饭,但他知道调用“美团下单”这个函数,填好“红烧肉”和“你的地址”,最后把热腾腾的饭菜送到你手里。
2. 核心功能与代码示例
在 Qwen-Agent 等框架中,Function Calling 可以实现实时数据获取、复杂数学计算和外部系统操作。
# 示例:一个简单的天气查询函数注册
from qwen_agent.tools.base import BaseTool, register_tool
@register_tool('get_weather')
class WeatherTool(BaseTool):
description = '获取指定城市的实时天气'
parameters = [{
'name': 'city',
'type': 'string',
'description': '城市名称,如:北京',
'required': True
}]
def call(self, params: str, **kwargs) –> str:
# 这里模拟调用 API
import json
args = json.loads(params)
city = args['city']
return f"{city}今天晴转多云,25度,适合摸鱼。"
二、 实战演练:搭建你的“门票数据助手”
1. 业务场景介绍
我们需要搭建一个能查询门票销量的助手。它基于 tkt_orders 数据表,包含订单时间、用户 ID、省份、订单金额等字段。

2. 进阶:一次调用,搞定查询 + 可视化
传统模式下,查数据和画图是分开的。但在进阶版 exc_sql 工具中,我们实现了 自动推断图表字段 并直接返回 Markdown 表格和图片。
核心逻辑实现:
- SQL 查询: 执行 SQL 获取结果集 df。
- 自动绘图: 优先选字符串列做 X 轴,数值列做 Y 轴。
- 样式设置: 自动处理标签倾斜 45 度,防止文字重叠。
# 自动推断并绘图的逻辑片段
x_candidates = df.select_dtypes(include=['object']).columns.tolist()
x = x_candidates if x_candidates else df.columns
y_fields = df.select_dtypes(include=['number']).columns.tolist()
import matplotlib.pyplot as plt
plt.figure(figsize=(8, 5))
for col in y_fields:
plt.bar(df[x].astype(str), df[col], label=col)
plt.xticks(rotation=45)
plt.savefig('chart.png')
三、 MCP:AI 界的“USB-C”接口协议来了!
1. 什么是 MCP?
专业解释: Model Context Protocol (MCP) 是 Anthropic 推出的开放协议标准。它旨在标准化 LLM 与外部数据源、工具之间的交互方式,实现“一次开发,多模型兼容”。
大白话解读: 以前每个厂商的 AI 接口都不一样,像极了那个满地找充电线的年代(iPhone 是 Lightning,安卓是 Micro-USB)。MCP 就是 AI 界的 USB-C,管你是 Claude、GPT 还是 Qwen,只要插上这个“标准插口”,工具就能通通用起来!
2. MCP 核心架构
- MCP Host: 运行 AI 的环境(如 Cursor, Claude Desktop)。
- MCP Client: 负责发起请求的“翻译官”。
- MCP Server: 提供具体功能的“工具库”。
#mermaid-svg-rdm6erct5jPO6krv{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-rdm6erct5jPO6krv .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-rdm6erct5jPO6krv .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-rdm6erct5jPO6krv .error-icon{fill:#552222;}#mermaid-svg-rdm6erct5jPO6krv .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-rdm6erct5jPO6krv .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-rdm6erct5jPO6krv .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-rdm6erct5jPO6krv .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-rdm6erct5jPO6krv .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-rdm6erct5jPO6krv .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-rdm6erct5jPO6krv .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-rdm6erct5jPO6krv .marker{fill:#333333;stroke:#333333;}#mermaid-svg-rdm6erct5jPO6krv .marker.cross{stroke:#333333;}#mermaid-svg-rdm6erct5jPO6krv svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-rdm6erct5jPO6krv p{margin:0;}#mermaid-svg-rdm6erct5jPO6krv .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-rdm6erct5jPO6krv .cluster-label text{fill:#333;}#mermaid-svg-rdm6erct5jPO6krv .cluster-label span{color:#333;}#mermaid-svg-rdm6erct5jPO6krv .cluster-label span p{background-color:transparent;}#mermaid-svg-rdm6erct5jPO6krv .label text,#mermaid-svg-rdm6erct5jPO6krv span{fill:#333;color:#333;}#mermaid-svg-rdm6erct5jPO6krv .node rect,#mermaid-svg-rdm6erct5jPO6krv .node circle,#mermaid-svg-rdm6erct5jPO6krv .node ellipse,#mermaid-svg-rdm6erct5jPO6krv .node polygon,#mermaid-svg-rdm6erct5jPO6krv .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-rdm6erct5jPO6krv .rough-node .label text,#mermaid-svg-rdm6erct5jPO6krv .node .label text,#mermaid-svg-rdm6erct5jPO6krv .image-shape .label,#mermaid-svg-rdm6erct5jPO6krv .icon-shape .label{text-anchor:middle;}#mermaid-svg-rdm6erct5jPO6krv .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-rdm6erct5jPO6krv .rough-node .label,#mermaid-svg-rdm6erct5jPO6krv .node .label,#mermaid-svg-rdm6erct5jPO6krv .image-shape .label,#mermaid-svg-rdm6erct5jPO6krv .icon-shape .label{text-align:center;}#mermaid-svg-rdm6erct5jPO6krv .node.clickable{cursor:pointer;}#mermaid-svg-rdm6erct5jPO6krv .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-rdm6erct5jPO6krv .arrowheadPath{fill:#333333;}#mermaid-svg-rdm6erct5jPO6krv .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-rdm6erct5jPO6krv .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-rdm6erct5jPO6krv .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-rdm6erct5jPO6krv .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-rdm6erct5jPO6krv .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-rdm6erct5jPO6krv .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-rdm6erct5jPO6krv .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-rdm6erct5jPO6krv .cluster text{fill:#333;}#mermaid-svg-rdm6erct5jPO6krv .cluster span{color:#333;}#mermaid-svg-rdm6erct5jPO6krv div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-rdm6erct5jPO6krv .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-rdm6erct5jPO6krv rect.text{fill:none;stroke-width:0;}#mermaid-svg-rdm6erct5jPO6krv .icon-shape,#mermaid-svg-rdm6erct5jPO6krv .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-rdm6erct5jPO6krv .icon-shape p,#mermaid-svg-rdm6erct5jPO6krv .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-rdm6erct5jPO6krv .icon-shape rect,#mermaid-svg-rdm6erct5jPO6krv .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-rdm6erct5jPO6krv .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-rdm6erct5jPO6krv .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-rdm6erct5jPO6krv :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
AI模型/Host
MCP Client
MCP Server
高德地图API
本地数据库
GitHub/Slack
四、 玩转 MCP:从旅游攻略到桌面统计
1. CASE:高德地图旅游助手
通过配置 amap-maps-mcp-server,AI 可以自主调用关键词搜索、路径规划、天气查询等功能,直接为你生成一份详尽的大连一日游攻略,甚至帮你写好 HTML 网页呈现。

2. CASE:桌面 TXT 统计器(MCP SDK 实战)
使用 Python 的 FastMCP 框架,几行代码就能让 AI 拥有“查看你桌面文件”的超能力。
from pathlib import Path
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("桌面统计器")
@mcp.tool()
def count_desktop_txt_files() –> int:
"""统计桌面上 .txt 文件的数量"""
desktop_path = Path("~/Desktop").expanduser()
return len(list(desktop_path.glob("*.txt")))
if __name__ == "__main__":
mcp.run()
五、 脑洞大开:未来 3 大拓展方案
在原有功能的基础上,我们可以进一步把 AI 的“触角”伸向更远的地方:
- 方案: 利用 MCP 协议连接本地 Home Assistant 服务器。
- 价值: 告别云端延时。即便断网,你也能对 AI 说:“看我眼神行事,把卧室灯调成猛男粉。”
- 方案: 集成 Tavily 搜索 MCP + 实时股价 Function Calling。
- 价值: AI 自动抓取半导体行业新闻,结合你本地的持仓数据,自动画出盈亏分析图并给出“割肉”建议。
- 方案: 开发一个具备文件修改权限的 MCP Server,接入 IDE。
- 价值: 发现 Bug 后,AI 不仅仅是“建议”,它能直接“上手”改代码,测通后顺便帮你把 Jira 单子也关了。
六、 总结与互动引导
从私有的 Function Calling 到开放的 MCP,AI 正在从“只会聊天的复读机”进化为“能干活的打工人”。底层能力的进化,意味着开发门槛的进一步降低。

看到这里的都是真爱!既然 AI 都能帮我统计桌面 TXT 了,你觉得它还有什么“离谱”的用途?
- A. 帮我自动回复老板的钉钉(要带幽默感那种)
- B. 监控我的心率,一旦看到心仪的妹子就自动帮我点外卖送花
- C. 自动识别代码里的屎山,并发出尖叫声
评论区留下你的脑洞,点赞最高的我考虑写个 Demo 出来!
转载声明
本文为原创内容。转载请注明出处,并保留原文链接。


