一文搞懂MCP协议与Function Call的区别
一、前言
大家好,我是六哥!
今天咱们聊聊编程里两个听起来有点复杂的概念——MCP协议和函数调用(function call),其实用大白话来讲,它们就是两种不同的“沟通方式”,就像咱们人与人之间交流也有不同的方式一样。下面我就用生活中的例子和Python代码,给大家好好讲讲它们的区别。
二、Function Call是啥
1、生活例子
咱先来说说Function Call。Function Call就好比你去餐厅点菜。你走进餐厅,跟服务员说“给我来一份红烧肉”,服务员听到你的话后,就去厨房把你的需求告诉厨师,厨师按照这个需求去做菜,做好了之后服务员再把菜端给你。在这个过程中,你点菜的这个动作就相当于一次Function Call,你是调用者,服务员是传递需求的媒介,厨师是实际执行任务的人。
2、Python代码例子
def make_red_cooked_pork():
return "一份香喷喷的红烧肉"
# 调用函数
dish = make_red_cooked_pork()
print(dish)
在这段代码里,make_red_cooked_pork 就是那个“厨师”,它定义了如何做出红烧肉。而 dish = make_red_cooked_pork() 这行代码就是你“点菜”的动作,也就是一次Function Call。调用之后,函数会返回结果,最后把结果打印出来。
3、Function Call的特点
Function Call有个特点,就是它是同步的。啥意思呢?就是说你调用一个函数之后,程序会一直等着这个函数执行完,把结果返回给你,才会继续执行后面的代码。就像你在餐厅点菜后,得一直等着菜做好端上来,才能接着做别的事。
三、MCP协议又是啥
1、生活例子
MCP协议就像是你在网上购物。你在购物平台上下单买了一件衣服,下单之后,你不用一直等着衣服送到你手上才能去做别的事,你可以该干嘛干嘛,该上班上班,该追剧追剧。购物平台会在衣服准备好之后,安排快递给你发货,等快递到了你家附近,会给你发消息通知你取件。在这个过程中,你下单的动作就相当于通过MCP协议发送了一个请求,购物平台和快递就是处理这个请求的系统,它们会在合适的时间给你反馈结果。
2、Python代码例子
import asyncio
async def prepare_clothes():
print("开始准备衣服...")
await asyncio.sleep(3) # 模拟准备衣服需要3秒
print("衣服准备好啦,开始发货...")
return "一件漂亮的衣服"
async def order_clothes():
task = asyncio.create_task(prepare_clothes())
print("下单成功,你可以去做别的事啦。")
result = await task
print("衣服到啦:", result)
# 运行异步函数
asyncio.run(order_clothes())
在这段代码里,prepare_clothes 函数就像是购物平台和快递,负责处理你买衣服的请求。order_clothes 函数里,asyncio.create_task(prepare_clothes()) 这行代码就相当于你下了单,程序不会等着 prepare_clothes 函数执行完,而是会继续执行后面的代码,打印出“下单成功,你可以去做别的事啦”。等 prepare_clothes 函数执行完后,再通过 await task 获取结果。
3、MCP协议的特点
MCP协议是异步的。也就是说,你发送一个请求之后,程序不会停下来等结果,而是会继续执行其他代码。等结果出来了,再回来处理这个结果。就像你网上下单后不用一直等着衣服到,还能去做其他事情。
四、MCP协议与Function Call的区别总结
1、同步与异步
Function Call是同步的,调用函数后程序会一直等待函数执行完返回结果,才继续执行后续代码;而MCP协议是异步的,发送请求后程序不会等待结果,会继续执行其他代码,等结果出来再处理。
2、执行方式
Function Call就像你在餐厅点菜,得等菜做好才能接着干别的;MCP协议就像网上购物,下单后可以去做其他事情,等东西到了再处理。
3、应用场景
Function Call适合那些需要立即得到结果,并且后续代码依赖这个结果的场景;MCP协议适合那些处理时间较长,不需要立即得到结果,并且不想让程序阻塞的场景,比如网络请求、文件读写等。
五、结尾
通过上面的生活例子和Python代码,相信大家对MCP协议和Function Call的区别有了更清晰的认识。其实编程里很多概念都能和生活中的事情联系起来,这样理解起来就会容易很多。希望大家都能在AI的道路上越走越顺!
好了本次就先介绍到这里吧 如果觉得对你有用的话 欢迎星标我啊
你们的点赞、在看、留言、分享是我持续更新的最大动力!(求求了)
一文搞懂MCP协议与Function Call的区别的更多相关文章
- Web端即时通讯基础知识补课:一文搞懂跨域的所有问题!
本文原作者: Wizey,作者博客:http://wenshixin.gitee.io,即时通讯网收录时有改动,感谢原作者的无私分享. 1.引言 典型的Web端即时通讯技术应用场景,主要有以下两种形式 ...
- 一文搞懂如何使用Node.js进行TCP网络通信
摘要: 网络是通信互联的基础,Node.js提供了net.http.dgram等模块,分别用来实现TCP.HTTP.UDP的通信,本文主要对使用Node.js的TCP通信部份进行实践记录. 本文分享自 ...
- 真正“搞”懂HTTP协议05之What's HTTP?
前面几篇文章,我从纵向的空间到横向的时间,再到一个具体的小栗子,可以说是全方位,无死角的覆盖了HTTP的大部分基本框架,但是我聊的都太宽泛了,很多内容都是一笔带过,再加上一句后面再说就草草结束了.并且 ...
- 三文搞懂学会Docker容器技术(中)
接着上面一篇:三文搞懂学会Docker容器技术(上) 6,Docker容器 6.1 创建并启动容器 docker run [OPTIONS] IMAGE [COMMAND] [ARG...] --na ...
- 三文搞懂学会Docker容器技术(下)
接着上面一篇:三文搞懂学会Docker容器技术(上) 三文搞懂学会Docker容器技术(中) 7,Docker容器目录挂载 7.1 简介 容器目录挂载: 我们可以在创建容器的时候,将宿主机的目录与容器 ...
- 一文搞懂Flink Window机制
Windows是处理无线数据流的核心,它将流分割成有限大小的桶(buckets),并在其上执行各种计算. 窗口化的Flink程序的结构通常如下,有分组流(keyed streams)和无分组流(non ...
- 一文搞懂 Promise 新 Api allSettled 的用法和 all 区别,以及如何在不支持新特性的环境下实现一个 Polyfill
开始 一文搞懂 Promise 新 Api allSettled 的用法和 all 区别,以及如何在不支持新特性的环境下实现一个 Polyfill allSettled 的用法 const runAl ...
- 一文搞懂RAM、ROM、SDRAM、DRAM、DDR、flash等存储介质
一文搞懂RAM.ROM.SDRAM.DRAM.DDR.flash等存储介质 存储介质基本分类:ROM和RAM RAM:随机访问存储器(Random Access Memory),易失性.是与CPU直接 ...
- 从HTTP/0.9到HTTP/2:一文读懂HTTP协议的历史演变和设计思路
本文原作者阮一峰,作者博客:ruanyifeng.com. 1.引言 HTTP 协议是最重要的互联网基础协议之一,它从最初的仅为浏览网页的目的进化到现在,已经是短连接通信的事实工业标准,最新版本 HT ...
- 基础篇|一文搞懂RNN(循环神经网络)
基础篇|一文搞懂RNN(循环神经网络) https://mp.weixin.qq.com/s/va1gmavl2ZESgnM7biORQg 神经网络基础 神经网络可以当做是能够拟合任意函数的黑盒子,只 ...
随机推荐
- IM开发快速入门(二):什么是IM系统的实时性?
本文在编写时参考了博客作者"鹿呦呦"和在线课程"即时消息技术剖析与实战"的相关资料,一并表示感谢. 1.引言 随着移动互联网络的发展,IM技术的应用已经不仅限于 ...
- 鸿蒙ArkUI-X简介
ArkUI是一套构建分布式应用的声明式UI开发框架.它具备简洁自然的UI信息语法.丰富的UI组件.多维的状态管理,以及实时界面预览等相关能力,帮助您提升应用开发效率,并能在多种设备上实现生动而流畅的用 ...
- 基于NVIDIA NGC容器安装使用PaddlePaddle
基于NVIDIA NGC容器安装使用PaddlePaddle PaddlePaddle PaddlePaddle作为国内首个自主研发的深度学习平台,自2016年正式向专业社区开源,是一个技术先进.功能 ...
- 《入梦》Revisited
寝室里有本<美丽新世界>(Brave New World),书页翻过灯塔里上升的螺旋阶梯,还有大概三分之一的篇幅是<重返美丽新世界>(Brave New World Rev ...
- 《C++并发编程实战》读书笔记(4):原子变量
1.标准原子类型 标准原子类型的定义位于头文件<atomic>内.原子操作的关键用途是取代需要互斥的同步方式,但假设原子操作本身也在内部使用了互斥,就很可能无法达到期望的性能提升.有三种方 ...
- org.junit.Assert
引入包,以下两种方式都是OK的,看个人喜好,我倾向于使用第二种,会更加清晰直观.下面的代码我都会用第二种 import static org.junit.Assert.*; import org.ju ...
- Python使用技巧2
python url网址拼接 在做爬虫中,经常会遇到需要把一个域名和网址路径进行拼接,在开发时一时没想到方法,特此记录下来. 利用parse.urljoin方法进行网址拼接 from urllib i ...
- 网站架构核心技disruptor
一 序:本章业务场景:队列在数据结构中是一种线性表,从一端插入数据,然后从另一端删除数据.作者举例的场景有:进行异步处理.系统解耦.数据同步.流量削峰.缓冲.限流等. 前面的比较浅,总结起来,核心知识 ...
- MacBook配置
如何在Mac上安装Java JDK及配置环境变量 1. 访问Java JDK 网站下载与安装(以JDK8为例) 点击下载链接:https://www.oracle.com/java/technolog ...
- Java线程的创建和常见方法
1.线程,进程和管程 1.1线程(Thread) 定义:线程是操作系统中能够独立运行的最小单位,是进程的一个执行分支.一个进程可以包含多个线程,它们共享同一进程的资源(如内存和文件句柄). 特点: 线 ...