96SEO 2026-02-20 09:54 0
AI提供了强大的记忆管理功能#xff0c;本文将手把手教你如何配置Redis和MySQL两种不同的记忆…

在构建智能对话系统时记忆管理是决定用户体验的关键因素。
Spring
AI提供了强大的记忆管理功能本文将手把手教你如何配置Redis和MySQL两种不同的记忆存储方案让你的AI应用拥有持久的对话记忆能力
提供了多种实现对话记忆的方式以满足不同应用场景的需求。
其中常见的方式包括数据库存储️。
数据库中。
MysqlChatMemoryRepository类通过JdbcTemplate与
数据库进行交互实现了对话消息的存储和查询功能。
这种方式适用于需要长期保存对话历史的场景如客服系统的对话记录存档以便后续进行数据分析和服务质量评估等。
而使用
的高性能和高并发特性适合在对响应速度要求较高的场景中使用如实时聊天应用中能够快速地获取和更新对话历史记录保证对话的流畅性。
还支持其他存储方案并且提供了扩展接口允许开发者根据自己的需求实现自定义的对话记忆存储方式以满足更加复杂和多样化的应用场景需求。
dependencygroupIdcom.alibaba.cloud.ai/groupIdartifactIdspring-ai-alibaba-starter-dashscope/artifactIdversion1.0.0.1/version
dependencygroupIdcom.alibaba.cloud.ai/groupIdartifactIdspring-ai-alibaba-starter-memory/artifactIdversion1.0.0.1/version
/dependencydependencygroupIdcom.alibaba.cloud.ai/groupIdartifactIdspring-ai-alibaba-starter-memory-jdbc/artifactIdversion1.0.0.1/version
dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion8.0.31/version
,集成的依赖spring-ai-alibaba-starter
xxx-API_KEYchat:memory:repository:jdbc:mysql:driver-class-name:
com.mysql.cj.jdbc.Driverjdbc-url:
jdbc:mysql://localhost:3306/spring_ai?useUnicodetruecharacterEncodingutf-8useSSLfalseallowPublicKeyRetrievaltruezeroDateTimeBehaviorconvertToNulltransformedBitIsBooleantrueallowMultiQueriestruetinyInt1isBitfalseallowLoadLocalInfiletrueallowLocalInfiletrueallowUrlusername:
spring.ai.chat.memory.repository.jdbc.mysql配置
URL连接到本地的spring_ai数据库并设置了一些连接参数如字符编码、禁用
username和password分别指定数据库的用户名和密码为root
数据库建立连接并将对话记忆数据存储到数据库中以便长期保存和查询
com.atg.spring_ai.config;import
com.alibaba.cloud.ai.memory.jdbc.MysqlChatMemoryRepository;
org.springframework.beans.factory.annotation.Value;
org.springframework.boot.context.properties.ConfigurationProperties;
org.springframework.context.annotation.Bean;
org.springframework.context.annotation.Configuration;
org.springframework.jdbc.core.JdbcTemplate;
org.springframework.jdbc.datasource.DriverManagerDataSource;import
数据库驱动Value(${spring.ai.chat.memory.repository.jdbc.mysql.jdbc-url})private
mysqlJdbcUrl;Value(${spring.ai.chat.memory.repository.jdbc.mysql.username})private
mysqlUsername;Value(${spring.ai.chat.memory.repository.jdbc.mysql.password})private
mysqlPassword;Value(${spring.ai.chat.memory.repository.jdbc.mysql.driver-class-name})private
mysqlDriverClassName;Beanpublic
DriverManagerDataSource();dataSource.setDriverClassName(mysqlDriverClassName);dataSource.setUrl(mysqlJdbcUrl);dataSource.setUsername(mysqlUsername);dataSource.setPassword(mysqlPassword);JdbcTemplate
JdbcTemplate(dataSource);return
MysqlChatMemoryRepository.mysqlBuilder().jdbcTemplate(jdbcTemplate).build();}
连接并创建MysqlChatMemoryRepository实例用于将对话记忆数据存储到
通过Value注解从application.yml配置文件中读取
URL、用户名、密码和驱动类名并将其注入到相应的成员变量中。
在mysqlChatMemoryRepository方法中首先创建DriverManagerDataSource数据源对象设置其驱动类名、URL、用户名和密码从而建立与
语句。
这里将刚刚创建的数据源dataSource传递给JdbcTemplate的构造函数使其能够使用该数据源进行数据库操作。
最后使用MysqlChatMemoryRepository的构建器模式通过mysqlBuilder()方法创建构建器设置jdbcTemplate并调用build()方法构建MysqlChatMemoryRepository实例。
这个实例将用于在后续的代码中进行对话记忆数据的存储和查询操作实现对话记忆的持久化功能。
com.atg.spring_ai.controller;import
com.alibaba.cloud.ai.memory.jdbc.MysqlChatMemoryRepository;
org.springframework.ai.chat.client.ChatClient;
org.springframework.ai.chat.client.advisor.MessageChatMemoryAdvisor;
org.springframework.ai.chat.memory.MessageWindowChatMemory;
org.springframework.ai.chat.messages.Message;
org.springframework.web.bind.annotation.GetMapping;
org.springframework.web.bind.annotation.RequestMapping;
org.springframework.web.bind.annotation.RequestParam;
org.springframework.web.bind.annotation.RestController;import
org.springframework.ai.chat.memory.ChatMemory.CONVERSATION_ID;/*
messageWindowChatMemory;private
DashScopeChatMemoryController(ChatClient.Builder
创建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
chatClient.prompt(query).advisors(a
conversationId)).call().content();}GetMapping(/messages)public
messageWindowChatMemory.get(conversationId);}}在这个控制器中定义了两个接口方法用于实现对话交互和获取对话历史
“yingzi”。
通过chatClient.prompt(query)构建对话请求设置advisors参数其中a
传递给MessageChatMemoryAdvisor以便它能够根据对话
管理对话记忆。
最后调用call().content()发起对话请求并获取模型返回的响应内容将其作为方法的返回值返回给前端实现了用户与模型的对话交互功能。
messageWindowChatMemory.get(conversationId)方法从MessageWindowChatMemory中获取指定对话
的对话历史记录返回一个包含Message对象的列表前端可以根据这些消息展示对话历史方便用户查看之前的对话内容
。
开发者可以利用这些知识高效地构建智能对话应用实现从简单对话到复杂交互的多样化功能
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback