当前位置: 首页 > wzjs >正文

大型旅行社自建网站开发公司技术科总结

大型旅行社自建网站,开发公司技术科总结,宿迁莱布拉网站建设,做的好的微商城网站前言 什么是记忆功能?默认情况下当我们向大模型每次发起的提问都是新的,大模型无法把我们的每次对话形成记忆,也无法根据对话上下文给出人性化的答案。比如:我的第一次提问是“懂王有哪些特点”,然后大模型会给出我懂…

前言

什么是记忆功能?默认情况下当我们向大模型每次发起的提问都是新的,大模型无法把我们的每次对话形成记忆,也无法根据对话上下文给出人性化的答案。比如:我的第一次提问是“懂王有哪些特点”,然后大模型会给出我懂王的特点结果列表,当我再次提问“这些特点中哪个最惹人争议”的时候,它就不知道我在说什么了,因为大模型已经失去了上一次的提问记忆。所以让智能体(如AI助手、机器人、虚拟角色等)拥有记忆功能不仅能提升交互体验,还能增强其功能性、适应性和长期价值。

SpringAI如何实现记忆存储

实现记忆存储的原理很简单,就是SpringAI会通过ChatMemory把对话的内容存储起来,下一次提问的时候会把历史提问内容一起带给大模型,这样一来大模型就知道历史对话内容了也就拥有了记忆能力。对于会话隔离功能则是通过一个会话ID实现的,每次对话我们传入一个会话ID,同一个会话ID对应了多次对话的消息列表,不同的会话ID对应了不同的消息列表从而实现会话隔离的目的,如下:
在这里插入图片描述

记忆存储实战

在SpringAI中提供了基于内存的会话存储组件InMemoryChatMemoryRepository,内部维护了一个 ConcurrentHashMap来存储消息列表,这肯定不是长久之计,如果消息内容比较庞大那么内存会爆满,或者机器重启消息会丢失,所以我们需要基于DB存储对话历史。那么这就需要集成数据库了。

1.集成Mysql

这里我们选择使用Mysql来存储对话历史,你也可以选择使用Mongo或者其他数据库,导入依赖如下

<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-model-chat-memory-repository-jdbc</artifactId></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><version>3.5.10.1</version></dependency>
  • spring-ai-starter-model-chat-memory-repository-jdbc :SpringAI用来实现记忆会话的基础依赖

2.配置DataSource

在第一章的配置内容上增加数据源配置,关闭SpringAI自动初始化SQL脚本的功能,如下:

spring:ai:openai:api-key: ${API_KEY}base-url: https://dashscope.aliyuncs.com/compatible-modechat:options:model: qwen-max-latesttemperature: 1chat:memory:repository:jdbc:initialize-schema: never #不要初始化表,不然会报错datasource:driver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword: 123456url: jdbc:mysql://127.0.0.1/ai-girl
server:port: 8888mybatis-plus:configuration:map-underscore-to-camel-case: true
  • 需要在Mysql中创建一个数据库,我这里的名字叫ai-girl
  • initialize-schema: never : 不要初始化表,不然会报错 schema.sql脚本找不到

SQL脚本如下,具体参考类:MysqlChatMemoryRepositoryDialect

CREATE TABLE `spring_ai_chat_memory` (`id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID',`conversation_id` varchar(255) DEFAULT NULL COMMENT '会话ID',`content` varchar(10000) DEFAULT NULL COMMENT '内容',`type` varchar(255) DEFAULT NULL COMMENT '类型',`timestamp` datetime DEFAULT NULL COMMENT '时间',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=325 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

3.配置大模型记忆功能

接着我们对大模型进行配置记忆功能。首先我们需要定义BeanChatMemory , 它是支持消息存储的必要组件,它提供了通过会话ID对消息的增加,删除,查询的基础能力。

@Bean
public ChatMemory chatMemory(JdbcTemplate jdbcTemplate) {return MessageWindowChatMemory.builder()//.chatMemoryRepository(new InMemoryChatMemoryRepository()).chatMemoryRepository(JdbcChatMemoryRepository.builder().jdbcTemplate(jdbcTemplate).build()).build();
}

我们通过 MessageWindowChatMemory来构建ChatMemory ,可以指定基于内存的InMemoryChatMemoryRepository 记忆存储 ,或者指定基于JDBC的JdbcChatMemoryRepository记忆存储。这里的jdbcTemplate是配置数据源之后,SpringAI帮我们自动装配的,直接使用即可。

JdbcChatMemoryRepository中根据不同的方言维护了不同的Dialect ,你可以看一下org.springframework.ai.chat.memory.repository.jdbc.JdbcChatMemoryRepositoryDialect这里类,它会根据不同的数据库类型采用不同的处理类,比如Mysql对应的是MysqlChatMemoryRepositoryDialect,在 MysqlChatMemoryRepositoryDialect中提供了对数据库的基础CURD的SQL。

接着我们来给ChatClient配置记忆功能,需要把上面定义的ChatMemory指定给ChatClient,如下:

@Bean
public ChatClient chatClient(OpenAiChatModel model,ChatMemory chatMemory){return ChatClient.builder(model)//指定系统提示词.defaultSystem("模拟女朋友的身份回答问题,不能暴露你AI的身份")//配置记忆存储功能.defaultAdvisors(MessageChatMemoryAdvisor.builder(chatMemory).build()).build();
}

4.测试记忆功能

编写Controller如下,我们需要增加一个参数chatId 对话ID,然后通过chatClient#advisors去指定对话ID,SpringAI会自动把消息和ChatID存储到数据库中

@RequestMapping(value = "/ai/chat/history")
public Flux<String> history(@RequestParam String prompt,@RequestParam String chatId){return chatClient.prompt().user(prompt).advisors(p->p.param(ChatMemory.CONVERSATION_ID,chatId)).stream().content();
}

测试效果如下:第一次我问他 特朗普有哪些特点

在这里插入图片描述
然后根据它的回答继续提问:针对第 5 点具体举一个例子呢
在这里插入图片描述
很明显这一次对话是基于上一次的结果进行的,说明它拥有了记忆功能。

总结

本篇文章我们介绍了SpringAI实现会话存储和隔离的原理,并通过Mysql存储实现了会话隔离实战,Spring主要通过ChatMemory来实现会话隔离,和Langchain4j有异曲同工之妙。如果文章对你有帮助请三连,你的鼓励是我最大的动力!!!

http://www.dtcms.com/wzjs/831429.html

相关文章:

  • vs做的网站项目可以改名字吗湖北建设执业注册中心网站
  • 免费推广网站在线wordpress手机文章列表
  • 上海定制网站建设费用手机移动端网站建设宣传
  • 苏州网站建设需要多少钱网站死链接查询
  • 贵州省建设厅考证官方网站网站如何做伪静态
  • 大连网站建设培训班网站空间怎么弄
  • 宁波市住房和城乡建设局网站卡一卡二卡三入口2021
  • 北京做网站建设价格河源抖音seo讯息
  • 如何增加网站的外链校园网站设计与实现
  • 哪个网站做线上家教比较好建设企业网站进去无法显示
  • 怎么样做一个自己的网站针织衫技术支持东莞网站建设
  • 建设部网站首页django做的网站源码
  • 湛江建设局网站建设个读书网站大约需要投入多少钱
  • 黑别人网站网页制作公司专业
  • 掼蛋网站建设wordpress数据表大学
  • 邢台网站设计厂家企业营销型网站费用
  • 软件开发人员工资标准资深seo顾问
  • 网站建设找至尚网络什么是网站分析
  • 网站制作完成后如何发布广西江荣建设工程有限责任公司网站
  • 浙江建设职业技术学院尔雅网站杭州网络科技公司有哪些
  • 招聘网站做精准 置顶白嫖域名的申请地址
  • 广州网站设计服务番禺人才网站
  • 个人做淘宝客网站有哪些中国建设银行网站功能模块
  • 西宁网站建设电话网站生成二维码
  • 注册网站费用明细酒泉手机网站建设
  • 网站做网络营销中山市西区网站制作
  • 网站漂浮图片湖南餐饮网站建设
  • 上海专业的网站建主页格式
  • asp网站整站下载器杭州网站设计推荐柚米
  • 广西网站建设的公司哪家好做外贸月薪3万要多久