package com.hanserwei.snailsai.config; import com.alibaba.cloud.ai.dashscope.chat.DashScopeChatModel; import com.alibaba.cloud.ai.memory.redis.BaseRedisChatMemoryRepository; import com.alibaba.cloud.ai.memory.redis.LettuceRedisChatMemoryRepository; import jakarta.annotation.Resource; import org.springframework.ai.chat.client.ChatClient; import org.springframework.ai.chat.client.advisor.PromptChatMemoryAdvisor; import org.springframework.ai.chat.client.advisor.SimpleLoggerAdvisor; import org.springframework.ai.chat.memory.ChatMemory; import org.springframework.ai.chat.memory.MessageWindowChatMemory; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class ChatClientConfiguration { @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; @Resource private DashScopeChatModel dashScopeChatModel; @Bean public BaseRedisChatMemoryRepository redisChatMemoryRepository() { // 构建RedissonRedisChatMemoryRepository实例 return LettuceRedisChatMemoryRepository.builder() .host(redisHost) .port(redisPort) .password(redisPassword) .timeout(redisTimeout) .build(); } @Bean public ChatMemory chatMemory(BaseRedisChatMemoryRepository chatMemoryRepository) { return MessageWindowChatMemory .builder() .maxMessages(100000) .chatMemoryRepository(chatMemoryRepository).build(); } @Bean public ChatClient dashScopeChatClient(ChatMemory chatMemory) { return ChatClient.builder(dashScopeChatModel) .defaultAdvisors(PromptChatMemoryAdvisor.builder(chatMemory).build(), new SimpleLoggerAdvisor()) .build(); } }