Part.1
在这个系列之前的几篇文章中,我们依次讲了以下的内容:
-
大家都在说的MCP究竟是什么
-
MCP如何安装以及使用
-
MCP如何接入本地文件系统
-
实战如何完成MCP Server的开发 还没看过的小伙伴可以点击链接【通俗易懂说AI】大家都在说的MCP究竟是什么前往查阅,谢谢大家!
那今天就来讲一下Function Call 跟 MCP 两者之间的区别,从字面意思上理解一个是函数(Function)调用(Call),一个是大模型上下文协议,再从字面上理解,一个是被动的函数调用,一个是主动设计的相关协议;仅从大跟小的范围来对比,MCP应该是包含了Function Call所可以实现的功能;实际从使用上来说,只要你愿意,MCP可以实现的东西,Function Call一样可以实现。
Part.2
今天刚好是周末,你睡了一个懒觉,起来的时候发现十点多了,来不及去买菜了,所以你决定今天中午要么就吃外卖吧,于是你搜索了你平时最喜欢吃的宫保鸡丁;于是你找到了你经过好多次“豪赌”才找到的一家店,你平时就喜欢吃他们家的宫保鸡丁;
于是你不加思索的就下了单,等待外卖的到来;
之所以为什么举这个例子,是因为你通过外卖软件点宫保鸡丁的例子就跟Function Call很像,Function Call的特点是什么?简单、快速以及标准化;
🗣️你说:
“我要一个宫保鸡丁。”
🍱系统反应:
默认食材、默认辣度、默认做法,直接送来。
🎯核心特点:
快速、标准、你控制不了细节。
适合一件事快速搞定。
Part.3
但这个时候你女朋友说,她宫保鸡丁不喜欢吃你刚才点的糊辣荔枝味的,他喜欢吃甜一点的,这个时候你觉得很尴尬,因为你找遍了这家店,都没有这个偏甜一点的宫保鸡丁;
所以这里就看出来了外卖的一个弱点,它只能按照默认的辣度、做法以及材料给你制作,但是它时间很快;但没有办法满足你女朋友这种定制化的要求;
此时你的女朋友还说,宫保鸡丁最好可以用鸡腿肉、卡路里控制在600千卡;
所以你想,要不你给他叫一个厨师做得了;那样子你女朋友什么要求都可以满足的了;
其实这跟MCP就很像;MCP的特点是什么?自定义控制、灵活拓展以及明确指令
🗣️你写信说:
“我想吃宫保鸡丁,但请用鸡腿肉,别放辣,米饭硬一点,控制在600卡路里。”
🧑🍳AI 厨师照着你的步骤来做。
🎯核心特点:
你决定怎么做、做成什么样。
更适合复杂控制、可定制请求。
经过上面一个例子的对比,你可以发现
Function Call = 点外卖:你只告诉店家你要吃什么,具体怎么做、用什么料、辣不辣你都没法控制。
MCP = 写信给厨师:你详细告诉 AI 厨师你要吃什么、怎么做、配料偏好、热量要求,甚至希望以什么顺序出菜,AI 按照你的指令执行。
背后隐含着沟通方式的改变
我们向大模型发起任务请求时,有两种沟通方式:
一种是“我说个名字你来搞定”,
另一种是“我告诉你怎么做你再执行”。
Part.4
了解了大概Function Call 跟 MCP的对比之后,我们也可以简单的用示例代码带大家对两者的差异对比更加的具像化;
##Function Call示例
###假设有一个generate_dish的函数,用于给大模型调用
def generate_dish(dish_name):
meat = "chicken breast"
spicy = True
rice = "soft"
calories_limit = None
prompt = f"""
请为我做一道 {dish_name}。
用料:{meat};
口味:{'辣'if spicy else'不辣'};
米饭:{rice}。
如果有热量要求,请控制在 {calories_limit or'无限制'} 卡以内。
"""
return call_large_model(prompt)
通过代码你可以看到函数中的大部分参数都是内置好的了,你能控制的知识你需要做一个什么菜,比如上面说的宫保鸡丁;至于肉要用什么肉;辣不辣、米饭的软硬程度都是内置的,所以Function Call速度快,标准化;
而且Function Call是通过传入参数完成函数的调用,不同大模型的传参不一样都会导致函数需要适配,需要根据不同的大模型参数完成函数编写;
大模型在调用的时候类似通过以下命令进行调用;
# 你说:给我做个饭
generate_dish("宫保鸡丁")
对于MCP来说,所有的参数均可调整,可以根据你想要的任意信息给你制作相关的菜;
##MCP示例
def handle_mcp_request(mcp_json):
command = mcp_json.get("command")
if command == "cook":
dish = mcp_json.get("dish")
prefs = mcp_json.get("preferences", {})
meat = prefs.get("meat", "chicken breast")
spicy = prefs.get("spicy", True)
rice = prefs.get("rice", "soft")
cal_limit = prefs.get("calories_limit", None)
prompt = f"""
请为我做一道 {dish}。
用料:{meat};
口味:{'辣'if spicy else'不辣'};
米饭:{rice}。
热量限制:{cal_limit or'无限制'}。
"""
return call_large_model(prompt)
大模型在调用的时候类似通过以下命令进行调用;
##MCP 命令示例
{
"command": "cook",
"dish": "宫保鸡丁",
"preferences": {
"meat": "chicken thigh",
"spicy": false,
"rice": "firm",
"calories_limit": 600
}
}
Part.5
MCP 本质是“你发规则过去”,模型只负责照做。到这里总结Function Call vs MCP区别如下
|
|
|
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
这个系列最后我们给大家推荐一些有趣的MCP应用就结束本系列课程。
开启新的系列RAG的专题。希望大家喜欢,码字不易,请“赞”加“在看”,谢谢!
🌟开启你的AI自动化之旅
原文始发于微信公众号(Kali渗透测试教程):【通俗易懂说AI】Function Call vs MCP:从点外卖到指挥厨师
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论