00:00
啊,大家好啊,最近呢,有很多小伙伴在那个后台私信我啊,就是我们MCP应该是怎么测试啊呃,这个问题呢,其实啊挺有意思的,也特别容易混淆啊,就是MCP我们到底应该测试嘛,很多小伙伴一听到就是MCP测试,第一反应就是啊,就是把工具调一下啊,看接口能不能正常返回不就行了嘛,是吧?啊这个当然没问题啊,这个肯定要测的啊,但是他测的只是啊一部分啊,我们啊。会通过这个。这个也就是我分享这期内容的一个根本原因啊,我们我会在后面就是啊做一期就是这个MMCP测试的一个啊系列的一个课程啊,主要和大家分享一下MCP我们怎么去展开这个测试啊啊其实测MCP呢,我们既要测这个工具本身啊,也要去测这个啊调用的一些边界,我还要去测要有没有正确的去使用这个工具啊,那开始之前我们要呃大致的理解一下MCP它是什么呢?啊啊其实就是。模型的一个上下文协议,简单来说,它就是一套连接AI应用和外部能力的一个开放协议啊,这里的外部能力啊,呃,可以是外部的一些数据,也可以是各种工具啊,也可以是一些提示词的一些模板啊,啊,比如说是吧,呃,AI应用本身啊,它啊。
01:15
啊,其实是并不能直接查询我们系统的一些订单的是吧,比如访问数据库啊是吧,操作一些啊业务的一些系统啊,他呢,需要通过一些标准化的方式去连接这些外部的能力啊,连接这些外部的能力。MCP呢,它就是解决这个事情的啊,不过呃,大家要注意MCP它不是一个模型,也不是一个具体的工具,还有就是我们为什么要测MC情的啊,为什么MCP要单独测试呢?啊,我们可以呃对比一下,就是传统的一个订单查询和现在的A的订单查询,它的一个区别是什么啊,我们在传统的一个呃订单查询里面啊,用户呢,通常就是啊先输入一个订单号啊。然后比如我们查询是吧。啊,通过点击这个查询,然后去调,会调用这个订单查询的一个接口,然后服务端呢,会把这个订单数据返回给我们啊。
02:03
然后把这些数据给展示出来啊,这个过程呢啊,相对比较固定。啊,用户怎么操作是吧,通常是固定的接口呢,由程序固定去调用参数呢,啊,一般是直接从表单里面传进来。啊,然后整个流程呢,也就是被提前写好了啊,啊所以呢,就是传统的一个系统测试重点往往是这个接口的一些逻辑啊,参数的一些校验,以及页面展示是否啊是否正确,但是ad的它就不一样了啊,Ad的就不一样了啊用户呢,他。可能只说一句你。比如我是吧,帮我查一下最近买的那双鞋到哪儿了是吧,这句话里面呢,我既没有告诉他的一个订单系统是什么,也没有告诉啊这个系统他。要去调哪个接口是吧?啊接下来呢,大模型哎,他会去先去理解这个用户的一个意图,哎,判断用户是不是想查询订单啊,然后决定要不要去调用工具,如果要调用这个工具呢。啊,他还要从这个用户的这个画里面,诶,提取出来一些相关的一些参数啊,选择是吧,正确的一些选择正确的查询订单的工具,然后通过这个MCP些啊,去调用这个订单系统啊。
03:07
然后这个订单数据呢,返回给我,返回以后啊,大波型还要继续去理解这些结果啊,最后整理成这个自然语言,然后再回答给用户,这个过程呢啊,任后一个环节都有可能出问题啊,任何一个任何环节都有可能出问题啊。啊,比如是吧,模型理解错了用户的一个意图,是吧?啊,选择了一些错误的工具啊,又或者说是没有正确的提取订单号啊。又或者说是生成的格式格式不正确啊,都有可能出现这种情况。啊,这个就是这这就说明就是A进的它场景下的一些测试,不能我们不能只看接口有没有返回成功啊,我们还要去测试这个模型的一些意图的理解是吧,工具的选择,还有一些呃,测试参数的一些生成啊,啊还有一些测试模型能不能正确去理解工具它返回的结果啊,所以呢,就是我们传统的一些。系统测试和AI应用测试啊,它之间有一个非常核心的一个区别啊,就是啊。
04:00
传统测试里面,它大多都是流程都是提前写死的是吧,比较固定啊,但是AI呢,它是动态的是吧,由这个。模型是吧,有这个模型动态动态选择的啊,选择去调用哪一个工具啊。这些啊。还有就是传统测试里面它的一些呃程序啊是吧,啊是由这个程序决定。调用哪个接口,而这个A进的场景下呢,啊呃,可能是由这个模型动态选择去调用哪个工具啊,还有一些就是啊。这个传统测试的一些参数啊,一般是来自于这个表单啊,比较直接,而这个agent的里面,Agent的一个参数呢,往往是通过这个需要这个模型从从我们的这个自然语言里面去理解,去提取啊,啊这个就是啊,我们在进行MCP测试的时候啊,不能只关注这个工具能不能用,我们还需要关注这个AI它有没有正确的去使用这个工具啊。那么我们呃要用什么工具去测试这个MCP呢?啊啊在前期我们测试工具的时候,我们可以使用这个MCP呃,Inspect啊,这个这个工具啊,我们可以简单理解成它是一个专门用来检查和调用MCP的一个工具啊,啊就和我们平常使用post斯man测试接口啊有一点类似啊,主要区别呢,就是postman它主要是用来啊调用这个HTTP的一些接口,而这个m cp in speak的更适合这个去连接这个MCP服务啊,去查询这个MCP暴露出来的一些工具。
05:25
啊,去直接进行去调用啊,他这样做呢,是有一个好处啊,他可以把这个。他可以把这个一些工具。啊,他可以把这个工具的。本身啊,单独给测清测清楚。嗯,确认它的一些定义啊,是什么参数是什么,还有这些返回的一些结果和异常情况啊。确认啊,都没有什么问题之后,然后我们再去啊测试A进的是吧,能不能去正确的选择和这个去调用它,也就是说就是嗯,M c speak的呢,它更适合。啊,帮助我们去隔离这个问题啊,如果我们直接从前端页面或者是这个A进的流程是吧,直接开始测是吧,一旦这个结果不对了是吧,我们很难,嗯。
06:06
很难去看出来就是他。啊,到底是工具有问题,还是这个模型理解错了,又或者是这个参数生成错了,所以就是我们再后面测试的时候,通常会先从这个工具本身开始,然后再逐步去进入一些这个,呃,比如身份认证啊,权限控制啊,以及这个AJ的调用这些啊。那么我们在测这个啊。MCP的时候我们也需要测哪些内容的啊?第一个的话就是我们啊,要先建立一个认知啊,就是我们要明确一下,就是啊MCP的一些测试的范围有哪些啊。第二部分的话就是我们要呃使用这个MCP speak的这个。去直接去测试这个工具本身啊,直接测试这个FCP,我们这个服务里面的工具啊,啊这一部分呢,啊主要是嗯,关注工具能不能。嗯,正常发现啊,连接和调用啊,一些输入输出。
07:01
是不是符合预期的啊,然后第三部分的话,就是这个MCP的一些身份认证的一些测试啊。啊,这里呢,我们需要确认就是连接MCP服务的一些用户或者是客户端是吧?呃,用户的身份能不能被啊正确识别出来啊。这是我们的第三部分,第4部分的话,嗯。也就是这个MCP的一些权限的控制啊。权限的控制啊呃,前面我们的身份认证解决的就是你是谁是吧,我们权限啊,解决的就是你能做什么,我们不同的用户不同的角色是吧,是否只能使用自己。和有权限使用的工具对吧,这些是都需要我们去进行验证的啊,然后第5块的话就是呃,这个工具。呃,工具的一些结构啊,也就是我们对应的一些字段啊,呃,Skima的话,我们就是可以理解成就是这个,呃,工具的一些结构的一些说明啊,我们需要。清楚的就是呃,描述这个工具的一些名称啊,用途啊,什么输入参数是什么,以及这个参数的类型和约束啊,因为模型能不能正确去使用这个工具,呃,很大程度上也依赖我们这份结构定义是否准确,是否清晰啊。第6部分呢,就是我们的这个呃工具的一些。
08:10
参数的边界的测试啊,这里要测试呢,不只是正常参数,我们还需要包括一些啊空的一些。空值是吧,一些缺失的,一些错误的是吧,一些超常的啊。一些非法参数啊。啊,主要是针对这些啊。第7块呢,也就是我们的一些呃,副作用的一些测试啊。啊,有些工具呢,它只能查询是吧?啊,有些工具会创建修改,甚至会啊删除一些数据啊呃,对于这类会产生这个实际影响的一些测试。实际影响的测试,我们重点关注的是它的一些重复调用是吧,比如物调用,以及它调用失败之后,数据是否会处于一个正常的一些状态啊。然后第8部分,第第8部分的话就是呃,Ad的工具的一些选择的一些测试啊,选择的一些测试啊。这部分我们主要是验证。嗯,就是当用户啊,用这个自然语言提出需求的时候啊,或者是描述的时候,这个ad呢,能不能去理解,正确的去理解,然后并且呃,正确的去选择合适的一些工具啊。
09:08
他不能因为工具名称的一些相似啊,就去调用一些啊,错误的工具,也不能在一些也不能在这个不需要调用工具的时候,随意的去调用工具啊。啊,最后呢,呃,第9块儿的话就是呃MCP安全的一些回归的一些测试啊,因为前面嘛,然后我们呃会发现我们的一些认证的问题啊,权限的问题啊,包括一些参数绕过的问题,以及其他问安全问题,我们都应该把它沉淀成回归的一些case啊,这样我们在这个呃后续的一些版本更新之后,我们才能就是确认这些问题有没有重复出现啊。啊,这节呢啊。大家不用把这些测试细节啊,都记住都记住啊,你只需要理解就是我们,呃,工具本身能不能正常工作啊。它的一些呃,调用边界权限,权限是否是安全的可靠的啊,还有就是ad的有没有,呃理解这个用户。
10:01
啊,去正确的选择调用和解释这个工具啊。嗯,后面的几节课的话,嗯,会我会沿着这个。这个流程啊,这个流程然后逐步展开,就是MCP的一些,呃,他的一些身份认证啊,权限控制啊,SK嘛,然后参数编界这些等等啊,来做这一个系列的一些课程的分享啊。通过这一个系列的课程的分享的话,我相信大家能够,嗯。很快的去掌握这个MCP怎么去测试啊。好,呃,本期的内容呢,就是就是这个样子啊,我们下节课我会直接和大家分享,就是我们怎么直接使用这个MCP in speaker啊。去进行这个测试,这个工具本身啊。
我来说两句