admin管理员组文章数量:1027611
AI超级智能体教程(四)
1.MVP设计原则
MVP最小可行性产品的策略—先设计最小的产品原型可以满足基本的功能,查看一下是不是可以满足用户的需求,如果可以,我们在这个基础上面进行完善和开发;
如果刚开始就搞得很复杂,这个时候如果发现不符合用户的体验,这个时候就是浪费资源,因此这个MVP最小可行性产品是我们进行这个项目学习的时候需要理解的;
具体到这个AI超级智能体项目里面,就是我们的这个项目需要生成恋爱文档之类的都不是我们的原型产品,而是先让这个用户可以和AI大模型聊起来,然后我们再去增加其他的复杂的功能,这个满足聊天的功能的产品就是最小可行性产品,也就是我们的这个里面提到的MVP规则;
2.多轮对话机制的原理说明
这个部分主要是介绍相关的对轮对话里面的原理,主要来自于程序员鱼皮的项目,我自己也是听老师讲了两遍,因为这个原理对于我们后续对于程序的编写以及这个过程的理解很重要,因此建议大家去认真的学习一下;
因为这个部分的内容鱼皮的这个文档里面写的也是非常的详细了,我要是cv就没啥意义了,我就结合自己的这个理解简单的说明一下:主要是四个部分,这个混合鱼皮的文档里面的内容是一致的;
2.1ChatClient特性
之前我们去实现的时候是直接使用的dashscopeModel进行调用的,也就是阿里里面的这个灵积大模型,不知道大家是不是还有印象,和chatmodel相比,这个chatclient可以让我们的这个调用更加的灵活方便;
client就可以理解为一个客户端,就是我们和AI进行聊天的时候使用的这个客户端,chatclient支持更加复杂灵活的链式调用
我们创建chatclient的方式有两种:
1.使用自动注入的方式;
2.通过构造器,传入大模型作为参数,进行创建chatclient;
返回的内容也是支持多种这个格式的,诸如:response对象,java实体对象之类的;
主要的好处就是这个chatclient支持我们默认指定的参数,这个非常的灵活,而这个参数就是我们想要达到的这个效果,例如下面涉及到的这个拦截器的参数之类的,敏感词的分析判断之类的,输出结果的处理之类的,默认的提示词之类的,这些都是可以通过chatclient里面的链式调用的参数进行设置的,这些都是我们的chatmodel不具备的特性;
2.2advisor特性
这个可以结合拦截器进行理解,主要就是我们的用户输入的prompt经过这个顾问进行处理,发送给大模型,输出的结果也是需要经过处理的,处理之后的结果返回给我们的客户端;
这个其实就是类似于之前在mvc里面学习的这个拦截器的功能,相当于就是在输入输出之前进行了人为的干涉;
为了帮助大家理解,我找了一段代码说明一下这个拦截器的作用:下面的这个是safeguard拦截器,它里面的这个isempty就是对于这个用户的输入进行判断,看看是不是空的,输入的内容有咩有敏感词啥的,经过这个处理之后才可以交给我们的chatmodel进行对话,相当于就是给大模型之前进行了一波检查;
2.3chatmemoryadvisor特性
这个实际上翻译之后就是对话记忆顾问,也就是这个主要实现的就是对话的前后文的记忆功能;
诸如我们的这个上下文的历史记录,如何整合到用户给的这个prompt里面去,发送给大模型进行处理
而这个chatMemoryAdvisor依赖于我们下面要介绍的这个ChatMemory进行构造
2.4ChatMemory特性
这个主要就是实现的用户的历史记录的存储,对于用户的提示词进行保存,历史信息的清空之类的,反正就是针对于用户的输入的prompt以及这个输出结果进行数据库之类的操作;
3.AI多轮对话代码实现
3.1初始化chatClient
通过spring构造器注入的方式注入我们的dashscopeModel大模型,这个相当于在我们的springboot框架里面给我们提供了,我们使用这个model对于chatClient完成初始化的工作;
为什么这个地方我们可以直接使用,因为这个starter里面已经有了这个内容,下面的这个就是源码,因此我们使可以直接使用的:
如果你也想要看到上面的这个内容,可以按照下面的这个方式进行操作:就是我们最开始实现的调用的时候,这个里面有一个dashscopeChatModel,也就是阿里的灵积大模型,我们可以点击这个东西左边的小豆豆,就可以跳转到上面的源码里面去了;
3.2编写对话的方法
37行里面的两个参数分别表示的就是message,也就是我们的用户输入的这个消息,ID就是用户的房间号,可以理解为这个不同的用户和我们的大模型进行交互的时候,虽然使用的是一个大模型,但是不同的用户是在不同的房间里面的,每一个用户的会话的历史记录是存储在自己的这个房间里面的,因此这个ID就是为了方便对于这个用户所在的房间的历史会话的记录进行管理的,否则不同的用户的历史记录混在一起,显然不是我们想要的这个效果;
41行里这个ID就是房间号;
42行里面的这个10就是我们的历史记忆的最大的用户数量,对于这个的用户的上下文记忆进行设置;
45行就是链式调用的方式得到这个大模型的输出的结果;
46行通过日志对于这个输出的结果打印给我们的用户去看,返回就可以了;
3.3编写单元测试
这个生成的测试用例在我们的test对应的目录一下,很容易找到的:
我们一共是进行了三轮的对话,3<10因此我们的29行里面的提问对于大模型而言,是可以正常的进行回答的;
aserttion就是断言的处理,保证我们的输出结果不是空的内容;
3.4输出结果分析
这个就是前面的两轮对话的输出结构:
下面的这个是第三轮对话的,可以证明这个确实是存在记忆的能力的:
AI超级智能体教程(四)
1.MVP设计原则
MVP最小可行性产品的策略—先设计最小的产品原型可以满足基本的功能,查看一下是不是可以满足用户的需求,如果可以,我们在这个基础上面进行完善和开发;
如果刚开始就搞得很复杂,这个时候如果发现不符合用户的体验,这个时候就是浪费资源,因此这个MVP最小可行性产品是我们进行这个项目学习的时候需要理解的;
具体到这个AI超级智能体项目里面,就是我们的这个项目需要生成恋爱文档之类的都不是我们的原型产品,而是先让这个用户可以和AI大模型聊起来,然后我们再去增加其他的复杂的功能,这个满足聊天的功能的产品就是最小可行性产品,也就是我们的这个里面提到的MVP规则;
2.多轮对话机制的原理说明
这个部分主要是介绍相关的对轮对话里面的原理,主要来自于程序员鱼皮的项目,我自己也是听老师讲了两遍,因为这个原理对于我们后续对于程序的编写以及这个过程的理解很重要,因此建议大家去认真的学习一下;
因为这个部分的内容鱼皮的这个文档里面写的也是非常的详细了,我要是cv就没啥意义了,我就结合自己的这个理解简单的说明一下:主要是四个部分,这个混合鱼皮的文档里面的内容是一致的;
2.1ChatClient特性
之前我们去实现的时候是直接使用的dashscopeModel进行调用的,也就是阿里里面的这个灵积大模型,不知道大家是不是还有印象,和chatmodel相比,这个chatclient可以让我们的这个调用更加的灵活方便;
client就可以理解为一个客户端,就是我们和AI进行聊天的时候使用的这个客户端,chatclient支持更加复杂灵活的链式调用
我们创建chatclient的方式有两种:
1.使用自动注入的方式;
2.通过构造器,传入大模型作为参数,进行创建chatclient;
返回的内容也是支持多种这个格式的,诸如:response对象,java实体对象之类的;
主要的好处就是这个chatclient支持我们默认指定的参数,这个非常的灵活,而这个参数就是我们想要达到的这个效果,例如下面涉及到的这个拦截器的参数之类的,敏感词的分析判断之类的,输出结果的处理之类的,默认的提示词之类的,这些都是可以通过chatclient里面的链式调用的参数进行设置的,这些都是我们的chatmodel不具备的特性;
2.2advisor特性
这个可以结合拦截器进行理解,主要就是我们的用户输入的prompt经过这个顾问进行处理,发送给大模型,输出的结果也是需要经过处理的,处理之后的结果返回给我们的客户端;
这个其实就是类似于之前在mvc里面学习的这个拦截器的功能,相当于就是在输入输出之前进行了人为的干涉;
为了帮助大家理解,我找了一段代码说明一下这个拦截器的作用:下面的这个是safeguard拦截器,它里面的这个isempty就是对于这个用户的输入进行判断,看看是不是空的,输入的内容有咩有敏感词啥的,经过这个处理之后才可以交给我们的chatmodel进行对话,相当于就是给大模型之前进行了一波检查;
2.3chatmemoryadvisor特性
这个实际上翻译之后就是对话记忆顾问,也就是这个主要实现的就是对话的前后文的记忆功能;
诸如我们的这个上下文的历史记录,如何整合到用户给的这个prompt里面去,发送给大模型进行处理
而这个chatMemoryAdvisor依赖于我们下面要介绍的这个ChatMemory进行构造
2.4ChatMemory特性
这个主要就是实现的用户的历史记录的存储,对于用户的提示词进行保存,历史信息的清空之类的,反正就是针对于用户的输入的prompt以及这个输出结果进行数据库之类的操作;
3.AI多轮对话代码实现
3.1初始化chatClient
通过spring构造器注入的方式注入我们的dashscopeModel大模型,这个相当于在我们的springboot框架里面给我们提供了,我们使用这个model对于chatClient完成初始化的工作;
为什么这个地方我们可以直接使用,因为这个starter里面已经有了这个内容,下面的这个就是源码,因此我们使可以直接使用的:
如果你也想要看到上面的这个内容,可以按照下面的这个方式进行操作:就是我们最开始实现的调用的时候,这个里面有一个dashscopeChatModel,也就是阿里的灵积大模型,我们可以点击这个东西左边的小豆豆,就可以跳转到上面的源码里面去了;
3.2编写对话的方法
37行里面的两个参数分别表示的就是message,也就是我们的用户输入的这个消息,ID就是用户的房间号,可以理解为这个不同的用户和我们的大模型进行交互的时候,虽然使用的是一个大模型,但是不同的用户是在不同的房间里面的,每一个用户的会话的历史记录是存储在自己的这个房间里面的,因此这个ID就是为了方便对于这个用户所在的房间的历史会话的记录进行管理的,否则不同的用户的历史记录混在一起,显然不是我们想要的这个效果;
41行里这个ID就是房间号;
42行里面的这个10就是我们的历史记忆的最大的用户数量,对于这个的用户的上下文记忆进行设置;
45行就是链式调用的方式得到这个大模型的输出的结果;
46行通过日志对于这个输出的结果打印给我们的用户去看,返回就可以了;
3.3编写单元测试
这个生成的测试用例在我们的test对应的目录一下,很容易找到的:
我们一共是进行了三轮的对话,3<10因此我们的29行里面的提问对于大模型而言,是可以正常的进行回答的;
aserttion就是断言的处理,保证我们的输出结果不是空的内容;
3.4输出结果分析
这个就是前面的两轮对话的输出结构:
下面的这个是第三轮对话的,可以证明这个确实是存在记忆的能力的:
本文标签: AI超级智能体教程(四)
版权声明:本文标题:AI超级智能体教程(四) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://it.en369.cn/jiaocheng/1747414540a2165217.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论