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

【SpringAI Alibaba】基于 Redis 实现连续对话与向量存储

目录

一、连续对话的实现

1.1 添加依赖

1.2 设置配置文件

1.3 添加Redis配置类

1.4 配置ChatClient实现连续对话

二、Redis向量存储与查询

2.1 安装 RediSearch​(Redis Stack)

2.2 添加依赖

2.3 配置 Redis 服务器信息

2.4 添加 RedisConfig

2.5 Redis 添加向量数据

2.6 避免数据重复添加

2.7 Redis 查询向量数据


一、连续对话的实现

因为大模型本身并不存储数据,因此想要实现连续对话,其实是把历史对话信息一次给大模型,这样大模型就可以根据历史对话实现“连续对话”的功能了。​

因此存储的历史数据可能很多,所以最好存储在非关系型数据库,我们本文以存储到 Redis 为例给大家演示连续对话的实现。

1.1 添加依赖

需要添加两个依赖:spring-ai-alibaba-starter-memory-redis 是 Redis 存储器,jedis 是 Redis 存储器需要操作 Redis 数据库的驱动:

<dependency>​<groupId>com.alibaba.cloud.ai</groupId>​<artifactId>spring-ai-alibaba-starter-memory-redis</artifactId>​
</dependency>​
​
<dependency>​<groupId>redis.clients</groupId>​<artifactId>jedis</artifactId>​<version>5.2.0</version>​
</dependency>

1.2 设置配置文件

设置配置文件,配置 Redis 连接信息:

spring:​ai:​memory:​redis:​host: localhost​port: 6379​timeout: 5000

1.3 添加Redis配置类

添加 Redis 配置类,注入 RedisChatMemoryRepository 对象,实现 Redis 自定义存储器注入:

import com.alibaba.cloud.ai.memory.redis.RedisChatMemoryRepository;​
import org.springframework.beans.factory.annotation.Value;​
import org.springframework.context.annotation.Bean;​
import org.springframework.context.annotation.Configuration;​
​
@Configuration​
public class RedisMemoryConfig {​
​@Value("${spring.ai.memory.redis.host}")​private String redisHost;​@Value("${spring.ai.memory.redis.port}")​private int redisPort;​
//    @Value("${spring.ai.memory.redis.password}")​
//    private String redisPassword;​@Value("${spring.ai.memory.redis.timeout}")​private int redisTimeout;​
​@Bean​public RedisChatMemoryRepository redisChatMemoryRepository() {​return RedisChatMemoryRepository.builder()​.host(redisHost)​.port(redisPort)​// 若没有设置密码则注释该项​
//           .password(redisPassword)​.timeout(redisTimeout)​.build();​}​
}
http://www.dtcms.com/a/277764.html

相关文章:

  • VsCode的LivePreview插件应用
  • [Java恶补day41] 226. 翻转二叉树
  • 基于springboot的大学公文收发管理系统
  • AB实验评估指标体系之【实验评估指标体系】
  • 015_引用功能与信息溯源
  • python 字典(Dictionary) vs. 集合(Set):它们是如何做到快速查找的?为什么字典的键(key)必须是不可变的?
  • S7-1200 与 ET200SP:PROFINET 设备关键数据 IP 地址、MAC 地址及 MRP 环状态获取
  • Datawhale AI 夏令营2025科大讯飞AI大赛<夏令营:用AI做带货视频评论分析>
  • 什么是渐进式框架
  • OpenVela 之 UI 应用开发
  • kettle从入门到精通 第102课 ETL之kettle xxl-job调度kettle的两种方式
  • 【Linux系统】进程状态 | 进程优先级
  • 手写std::optional:告别空指针的痛苦
  • java + groovy : 动态解析groovy脚本,并与java交互
  • MacBook Air M4 安装 VMware Fusion Pro
  • 问题记录:Fastjson序列化-空值字段处理
  • CA复习功课
  • Appdynamic 配置 PostgreSQL 收集器
  • 复习笔记 34
  • 【VSCode+LaTeX】科研写作环境搭建
  • 内存池(C++)v3 | 简历写法 | 相关面试题
  • 浏览器本地存储——使用localStorage实现电商系统商品收藏功能实战
  • 在网站学装机
  • SCTP协议网络编程
  • 从源码看Nginx:Nginx事件驱动架构深度拆解来了
  • linux上的软挂载操作方法
  • Docker 快速上手
  • 【elementUI踩坑记录】解决 el-table 固定列 el-table__fixed 导致部分滚动条无法拖动的问题
  • 全星质量管理QMS软件系统——汽车零部件制造业数字化转型的质量管理中枢
  • 【设计模式】备忘录模式(标记(Token)模式)