【LangChain4J】聊天数据持久化——Redis
第一步集成Redis
推荐本地安装Redis使用docker
pom文件添加
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
配置文件添加
spring:
data:
redis:
# 连接地址
host: 127.0.0.1
# 端口
port: 6379
# 数据库
database: 0
password: 密码
# 连接超时
connect-timeout: 5s
# 读超时
timeout: 5s
第二步集成Redis组件序列化配置
@Configuration
public class RedisConfig {
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory){
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(factory);
template.setKeySerializer(new StringRedisSerializer());
template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
template.setHashKeySerializer(new StringRedisSerializer());
template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
template.afterPropertiesSet();
return template;
}
}
第三步实现ChatMemoryStore接口
@Component
public class RedisChatMemoryStore implements ChatMemoryStore {
@Autowired
private RedisTemplate<String, String> redisTemplate;
private static final String REDIS_KEY = "chat_persistence:";
@Override
public List<ChatMessage> getMessages(Object memoryId) {
String value = redisTemplate.opsForValue().get(REDIS_KEY + memoryId);
return ChatMessageDeserializer.messagesFromJson(value);
}
@Override
public void updateMessages(Object memoryId, List<ChatMessage> list) {
redisTemplate.opsForValue().set(REDIS_KEY + memoryId, ChatMessageSerializer.messagesToJson(list));
}
@Override
public void deleteMessages(Object memoryId) {
redisTemplate.delete(REDIS_KEY + memoryId);
}
}
第四步定义Assistant接口并且装配
public interface ChatPersistenceAssistant {
String chatPersistenceAssistant(@MemoryId Long userId, @UserMessage String prompt);
}
@Bean
public ChatPersistenceAssistant chatPersistenceAssistant(ChatModel chatModel,RedisChatMemoryStore redisChatMemoryStore){
return AiServices.builder(ChatPersistenceAssistant.class)
.chatModel(chatModel)
.chatMemoryProvider(memoryId -> {
return MessageWindowChatMemory
.builder()
.id(memoryId)
.maxMessages(100)
.chatMemoryStore(redisChatMemoryStore)
.build();
})
.build();
}
第五步实现Controller并查看写入Redis
@RestController
public class ChatPersistenceController {
@Autowired
private ChatPersistenceAssistant chatPersistenceAssistant;
@GetMapping("/chat/persistence")
public String chatPersistence(){
String result1 = chatPersistenceAssistant.chatPersistenceAssistant(1L, "我的名字叫安静的狮子");
System.out.println(result1);
String result2 = chatPersistenceAssistant.chatPersistenceAssistant(1L, "你叫什么名字");
System.out.println(result2);
String result3 = chatPersistenceAssistant.chatPersistenceAssistant(2L, "你的名字叫CPDD");
System.out.println(result3);
String result4 = chatPersistenceAssistant.chatPersistenceAssistant(2L, "你叫什么名字");
System.out.println(result4);
return "OK";
}
}


浙公网安备 33010602011771号