大家好,我是程序员寒山。
今天我们来聊聊大模型的两个关键技术——Function Calling和MCP。它们都能让AI调用外部工具,但究竟有什么区别?又该如何选择?3分钟带你搞懂!
1. Function Calling:AI的“基础工具包”
Function Calling就像给AI装上一套“基础工具包”,让它能直接调用单个函数,比如查天气、算汇率。
-
核心能力:模型识别用户需求,生成结构化调用指令(如
{"function": "get_weather", "city": "北京"}
),由外部程序执行。 -
优点:简单直接,适合单一任务(如实时数据查询)。
-
局限:工具多了就混乱,比如同时管理几十个API,提示词会臃肿,效率暴跌。
-
代码实例:
# 示例函数1:获取天气(模拟实现)
def get_current_weather(location, unit="celsius"):
"""
模拟天气API调用
实际应用时应替换为真实API调用
"""
# 这里模拟可能的返回结果
mock_data = {
"location": location,
"temperature": "22" if unit == "celsius" else "72",
"unit": unit,
"forecast": ["sunny", "cloudy"],
"humidity": 65,
"timestamp": datetime.now().isoformat()
}
return {
"success": True,
"data": mock_data,
"error": None
}
# 示例函数2:查询股票(模拟实现)
def get_stock_price(symbol, period="1d"):
"""
模拟股票API调用
返回示例:
- 成功时返回股票数据
- 符号无效时返回错误
"""
valid_symbols = ["AAPL", "MSFT", "GOOGL"]
if symbol not in valid_symbols:
return {
"success": False,
"error": "Invalid stock symbol",
"data": None
}
# 模拟数据
return {
"success": True,
"data": {
"symbol": symbol,
"price": 185.32,
"currency": "USD",
"period": period,
"history": [182.1, 184.5, 185.3]
},
"error": None
}
# 定义可用函数工具集
tools = [
{
"type": "function",
"function": {
"name": "get_current_weather",
"description": "获取指定位置的当前天气信息",
"parameters": {
"type": "object",
"properties": {
"location": {"type": "string", "description": "城市名称"},
"unit": {"type": "string", "enum": ["celsius", "fahrenheit"]}
},
"required": ["location"]
}
}
},
{
"type": "function",
"function": {
"name": "get_stock_price",
"description": "获取股票价格信息",
"parameters": {
"type": "object",
"properties": {
"symbol": {"type": "string", "description": "股票代码"},
"period": {"type": "string", "enum": ["1d", "1w", "1m"]}
},
"required": ["symbol"]
}
}
}
]
# 第一步:模型判断是否需要调用函数
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo-0613",
messages=[{"role": "user", "content": user_input}],
tools=tools,
tool_choice="auto"
)
# 解析模型响应
action = process_function_call(response)
# 情况1:需要执行函数调用
if action["type"] == "function":
print("\n[系统] 检测到函数调用请求:")
print(json.dumps(action, indent=2, ensure_ascii=False))
# 执行对应函数
if action["name"] == "get_current_weather":
result = get_current_weather(**action["args"])
elif action["name"] == "get_stock_price":
result = get_current_weather(**action["args"])
else:
result = {"error": "未知函数"}
print("\n[系统] 函数执行结果:")
print(json.dumps(result, indent=2, default=str))
# 第二步:将结果返回给模型生成最终回复
second_response = openai.ChatCompletion.create(
model="gpt-3.5-turbo-0613",
messages=[
{"role": "user", "content": user_input},
{"role": "function", "name": action["name"],
"content": json.dumps(result)}
]
)
print("\n[最终回复] " +
second_response.choices[0].message["content"])
2. MCP:AI的“万能插座”
MCP(Model Context Protocol)则是更高级的“万能插座”,它标准化了AI与工具的交互协议,让模型不用关心细节,只管提需求!
- 核心能力:统一接入多工具(如CRM、邮件、日历),动态调度服务。比如AI只需说“查Acme公司的销售合同”,MCP自动协调CRM、文件搜索等模块。
- 优点:解耦工具依赖,扩展性强,适合企业级复杂场景。
- 现状:腾讯云、Anthropic等已支持,生态正在壮大。
3. 关键区别:单兵作战 vs. 军团协作
维度 | Function Calling | MCP |
---|---|---|
定位 | 基础函数调用 | 多工具调度中枢 |
复杂度 | 低(少量工具) | 高(大规模工具集成) |
标准化 | 厂商自定义(如OpenAI) | 统一协议(如JSON-RPC) |
典型场景 | 查天气、算汇率 | 跨系统自动化流程 |
简单说:Function Calling是“螺丝刀”,MCP是“智能工具箱”!
4. 联系:协同构建智能体生态
它们并非对立,而是递进关系:
- Function Calling提供基础能力,MCP解决扩展问题,最终由AI Agent统筹规划,实现自主任务(如自动订机票+酒店)。
- 未来趋势:结合两者优势,打造“会思考、会调用、会执行”的超级助手!
[结尾]
所以,如果你的AI只需简单查数据,Function Calling够用;但要玩转企业级自动化?MCP才是未来!
你们更看好哪种技术?评论区聊聊!记得点赞关注,下期我们接着聊!