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

上海最专业的网站建设公司排名服务器ip域名解析

上海最专业的网站建设公司排名,服务器ip域名解析,河南工程,网站开发图片压缩上传报酬让AI对话拥有"长期记忆"的能力,告别金鱼般的7秒记忆!🤖 在构建智能对话系统时,记忆管理是决定用户体验的关键因素。Spring AI提供了强大的记忆管理功能,本文将手把手教你如何配置Redis和MySQL两种不同的记忆…

让AI对话拥有"长期记忆"的能力,告别金鱼般的7秒记忆!🤖

        在构建智能对话系统时,记忆管理是决定用户体验的关键因素。Spring AI提供了强大的记忆管理功能,本文将手把手教你如何配置Redis和MySQL两种不同的记忆存储方案,让你的AI应用拥有持久的对话记忆能力!

一、Spring AI 中对话记忆的实现方式

        Spring AI 提供了多种实现对话记忆的方式,以满足不同应用场景的需求。其中,常见的方式包括数据库存储🗄️。

数据库存储:为了实现对话历史的持久化存储,Spring AI 支持使用数据库来存储对话记忆。例如,可以使用 MySQL、Redis 等数据库。以 MySQL 为例,通过配置数据源,将对话消息存储到 MySQL 数据库中。MysqlChatMemoryRepository类通过JdbcTemplate与 MySQL 数据库进行交互,实现了对话消息的存储和查询功能。这种方式适用于需要长期保存对话历史的场景,如客服系统的对话记录存档,以便后续进行数据分析和服务质量评估等。而使用 Redis 存储对话记忆,则利用了 Redis 的高性能和高并发特性,适合在对响应速度要求较高的场景中使用,如实时聊天应用中,能够快速地获取和更新对话历史记录,保证对话的流畅性💬。

除了上述两种方式,Spring AI 还支持其他存储方案,并且提供了扩展接口,允许开发者根据自己的需求实现自定义的对话记忆存储方式,以满足更加复杂和多样化的应用场景需求🤝。

二、代码实战:Spring AI 对话记忆的配置与使用

 

2.1 🔥 项目环境搭建

        使用 Spring AI 实现对话记忆功能之前,我们需要先搭建好项目环境。使用 Maven 来管理项目依赖,首先在pom.xml文件中添加 Spring AI 及相关依赖:

<dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter-dashscope</artifactId><version>1.0.0.1</version>
</dependency>
<!--    chatMemory    -->
<dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter-memory</artifactId><version>1.0.0.1</version>
</dependency><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter-memory-jdbc</artifactId><version>1.0.0.1</version>
</dependency>
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.31</version>
</dependency>

        上述配置中,引入了 Spring AI 的核心依赖 DashScope ,集成的依赖spring-ai-alibaba-starter 。同时,添加了 MySQL 数据库连接和 Spring JDBC 相关依赖,用于实现对话记忆的持久化存储😉。 

 2.2 📦 Spring AI记忆管理核心配置
server:port: 8080servlet:context-path: /apispring:application:name: spring-aiai:dashscope:api-key: "xxx-API_KEY"chat:memory:repository:jdbc:mysql:driver-class-name: com.mysql.cj.jdbc.Driverjdbc-url: jdbc:mysql://localhost:3306/spring_ai?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&allowMultiQueries=true&tinyInt1isBit=false&allowLoadLocalInfile=true&allowLocalInfile=true&allowUrlusername: rootpassword: rootenabled: true  # 持久化存储
  • spring.ai.dashscope.api-key:配置 DashScope 的 API 密钥,用于访问 DashScope 提供的大模型服务。在使用 DashScope 模型进行对话时,需要提供有效的 API 密钥才能进行认证和调用。

  • spring.ai.chat.memory.repository.jdbc.mysql:配置 MySQL 相关参数,用于实现对话记忆的持久化存储

    • driver-class-name指定 MySQL 驱动类为com.mysql.cj.jdbc.Driver;

    • jdbc-url指定数据库连接 URL,连接到本地的spring_ai数据库,并设置了一些连接参数,如字符编码、禁用 SSL 等;

    • username和password分别指定数据库的用户名和密码为root;

    • enabled设置为true表示启用 MySQL 持久化存储 。

通过这些配置,Spring AI 可以与 MySQL 数据库建立连接,并将对话记忆数据存储到数据库中,以便长期保存和查询📚

2.3 🧩 核心代码实现 
2.3.1 MysqlMemoryConfig 配置类
package com.atg.spring_ai.config;import com.alibaba.cloud.ai.memory.jdbc.MysqlChatMemoryRepository;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;import javax.sql.DataSource;/*
author: atg
*/
// 配置mysql存储话记忆的配置@Configuration
public class MysqlMemoryConfig {// 数据库驱动@Value("${spring.ai.chat.memory.repository.jdbc.mysql.jdbc-url}")private String mysqlJdbcUrl;@Value("${spring.ai.chat.memory.repository.jdbc.mysql.username}")private String mysqlUsername;@Value("${spring.ai.chat.memory.repository.jdbc.mysql.password}")private String mysqlPassword;@Value("${spring.ai.chat.memory.repository.jdbc.mysql.driver-class-name}")private String mysqlDriverClassName;@Beanpublic MysqlChatMemoryRepository mysqlChatMemoryRepository() {DriverManagerDataSource dataSource = new DriverManagerDataSource();dataSource.setDriverClassName(mysqlDriverClassName);dataSource.setUrl(mysqlJdbcUrl);dataSource.setUsername(mysqlUsername);dataSource.setPassword(mysqlPassword);JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);return MysqlChatMemoryRepository.mysqlBuilder().jdbcTemplate(jdbcTemplate).build();}
}

这个配置类的作用是配置 MySQL 连接,并创建MysqlChatMemoryRepository实例,用于将对话记忆数据存储到 MySQL 数据库中。具体分析如下:

  1. 通过@Value注解从application.yml配置文件中读取 MySQL 的连接 URL、用户名、密码和驱动类名,并将其注入到相应的成员变量中。
  2. 在mysqlChatMemoryRepository方法中,首先创建DriverManagerDataSource数据源对象,设置其驱动类名、URL、用户名和密码,从而建立与 MySQL 数据库的连接。
  3. 然后创建JdbcTemplate对象,它是 Spring JDBC 框架提供的核心类,用于执行 SQL 语句。这里将刚刚创建的数据源dataSource传递给JdbcTemplate的构造函数,使其能够使用该数据源进行数据库操作。
  4. 最后,使用MysqlChatMemoryRepository的构建器模式,通过mysqlBuilder()方法创建构建器,设置jdbcTemplate,并调用build()方法构建MysqlChatMemoryRepository实例。

这个实例将用于在后续的代码中进行对话记忆数据的存储和查询操作,实现对话记忆的持久化功能💾。

2.3.2 核心代码实现
package com.atg.spring_ai.controller;import com.alibaba.cloud.ai.memory.jdbc.MysqlChatMemoryRepository;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.client.advisor.MessageChatMemoryAdvisor;
import org.springframework.ai.chat.memory.MessageWindowChatMemory;
import org.springframework.ai.chat.messages.Message;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import java.util.List;import static org.springframework.ai.chat.memory.ChatMemory.CONVERSATION_ID;/*
author: atg
time: 2025/6/9 15:43
*/@RestController
@RequestMapping("/memory/chat")
public class DashScopeChatMemoryController {private final ChatClient chatClient;private final MessageWindowChatMemory messageWindowChatMemory;private static final int MAX_MESSAGES = 10;public DashScopeChatMemoryController(ChatClient.Builder builder, MysqlChatMemoryRepository mysqlChatMemoryRepository) {// 创建MessageWindowChatMemory对象,并设置chatMemoryRepository和maxMessages属性this.messageWindowChatMemory = MessageWindowChatMemory.builder().chatMemoryRepository(mysqlChatMemoryRepository).maxMessages(MAX_MESSAGES).build();// 创建ChatClient对象,并设置defaultAdvisors属性this.chatClient = builder.defaultAdvisors(MessageChatMemoryAdvisor.builder(messageWindowChatMemory).build()).build();}@GetMapping("/call")public String call(@RequestParam(value = "query", defaultValue = "你好,我的外号是TT,请记住呀") String query,@RequestParam(value = "conversation_id", defaultValue = "yingzi") String conversationId) {return chatClient.prompt(query).advisors(a -> a.param(CONVERSATION_ID, conversationId)).call().content();}@GetMapping("/messages")public List<Message> messages(@RequestParam(value = "conversation_id", defaultValue = "yingzi") String conversationId) {return messageWindowChatMemory.get(conversationId);}}

在这个控制器中,定义了两个接口方法,用于实现对话交互和获取对话历史:

  1. call方法:接收用户输入的query(查询内容,默认值为 “你好,我的外号是 TT,请记住呀”)和conversation_id(对话 ID,默认值为 “yingzi”)。通过chatClient.prompt(query)构建对话请求,设置advisors参数,其中a -> a.param(CONVERSATION_ID, conversationId)表示将对话 ID 传递给MessageChatMemoryAdvisor,以便它能够根据对话 ID 管理对话记忆。最后调用call().content()发起对话请求并获取模型返回的响应内容,将其作为方法的返回值返回给前端,实现了用户与模型的对话交互功能💬。
     
  2. messages方法: 接收conversation_id(对话 ID,默认值为 “yingzi”)。 messageWindowChatMemory.get(conversationId)方法从MessageWindowChatMemory中获取指定对话 ID 的对话历史记录,返回一个包含Message对象的列表,前端可以根据这些消息展示对话历史,方便用户查看之前的对话内容📜

 

三、总结 🎯

        本文通过详细的代码示例和实践要点,全面解析了 Spring AI 中 Chat Model基础使用方法以及进阶技巧 🧰。开发者可以利用这些知识高效地构建智能对话应用,实现从简单对话到复杂交互的多样化功能 🚀

http://www.hkea.cn/news/775758/

相关文章:

  • 在网盘上怎么做自己的网站整站优化推广
  • php建设网站实训百度搜索引擎的总结
  • 怎么在360自己做网站重庆seo排名收费
  • 外贸网站建设浩森宇特教育培训报名
  • 网站开发价目表深圳市前十的互联网推广公司
  • php做视频直播网站关键词竞价广告
  • 重庆怎么站seo深圳网络推广团队
  • 自学软件网站开发网络推广怎样做
  • 最新版的wordpress怎么添加特征图优化关键词的作用
  • 深圳做网站google推广网络营销和传统营销的区别和联系
  • 专业做网站的顺德公司网络推广怎么收费
  • php商城网站建设多少钱天津百度seo排名优化
  • 注册网站免费注册insseo关键词优化推广哪家好
  • 深圳房地产网站开发常见的网络营销工具有哪些
  • .net 网站管理系统湖南企业竞价优化首选
  • 南山区住房与建设局官方网站网络赚钱推广
  • wordpress mycred汉化seo引擎搜索入口
  • 在线教育网站用什么做百度搜索的优势
  • 甘肃省住房城乡建设厅网站首页智能建站模板
  • 智能科技网站模板下载地址百度学术论文查重
  • 网站要怎么做才能让360收录推广品牌的策划方案
  • 做网站前景营销课程培训视频
  • 青海做网站广告开户南京seo
  • wordpress写软文赚钱seo快速培训
  • 南宁网站建设接单陕西省人民政府
  • wordpress网站价格seo域名综合查询
  • 支付网站怎么做的网络自动推广软件
  • js做网站统计品牌关键词优化
  • 微信公众号管理平台官网谷歌seo建站
  • 鲜花购物网站源码企业网站营销的优缺点