【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: localhostport: 6379timeout: 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;
@Beanpublic RedisChatMemoryRepository redisChatMemoryRepository() {return RedisChatMemoryRepository.builder().host(redisHost).port(redisPort)// 若没有设置密码则注释该项
// .password(redisPassword).timeout(redisTimeout).build();}
}