1.多租戶工作原理

2.引入jdbc的pom
spring官網鏈接:https://docs.spring.io/spring-ai/reference/api/chat-memory.html,推薦使用官網的jdbc。
阿里巴巴ai鏈接:https://github.com/alibaba/spring-ai-alibaba/tree/main/community/memories
jdbc的依賴
<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-model-chat-memory-repository-jdbc</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId></dependency>
3.配置chatclient和編寫測試類
@SpringBootTest
public class ChatMemoryTest {/*** 多租戶記憶* 默認是存在jvm內存中:InMemoryChatMemoryRepository** @param chatClientBuilder*/@Testpublic void testMemory(@Autowired ChatClient.Builder chatClientBuilder, @Autowired ChatMemory chatMemory) {ChatClient chatClient = chatClientBuilder.defaultAdvisors(new SimpleLoggerAdvisor(),PromptChatMemoryAdvisor.builder(chatMemory).build()).build();String content1 = chatClient.prompt().system("你是一個智能助手。").advisors(advisorSpec -> advisorSpec.param(ChatMemory.CONVERSATION_ID, "1")).user("我叫張三").call().content();String content2 = chatClient.prompt().system("你是一個智能助手。").advisors(advisorSpec -> advisorSpec.param(ChatMemory.CONVERSATION_ID, "1")).user("我是誰?").call().content();String content3 = chatClient.prompt().system("你是一個智能助手。").advisors(advisorSpec -> advisorSpec.param(ChatMemory.CONVERSATION_ID, "2")).user("我是誰?").call().content();}/*** 多租戶記憶* 默認是存在jvm內存中:InMemoryChatMemoryRepository** @param chatClientBuilder*/@Testpublic void testMemoryStore(@Autowired ChatClient.Builder chatClientBuilder, @Autowired ChatMemory chatMemory) {ChatClient chatClient = chatClientBuilder.defaultAdvisors(new SimpleLoggerAdvisor(),PromptChatMemoryAdvisor.builder(chatMemory).build()).build();String content1 = chatClient.prompt().system("你是一個智能助手。").advisors(advisorSpec -> advisorSpec.param(ChatMemory.CONVERSATION_ID, "1")).user("我叫張三").call().content();String content2 = chatClient.prompt().system("你是一個智能助手。").advisors(advisorSpec -> advisorSpec.param(ChatMemory.CONVERSATION_ID, "1")).user("我是誰?").call().content();String content3 = chatClient.prompt().system("你是一個智能助手。").advisors(advisorSpec -> advisorSpec.param(ChatMemory.CONVERSATION_ID, "2")).user("我是誰?").call().content();}@TestConfigurationstatic class ChatMemoryConfig {@Beanpublic ChatMemory chatMemory(JdbcChatMemoryRepository jdbcChatMemoryRepository) {return MessageWindowChatMemory.builder().chatMemoryRepository(jdbcChatMemoryRepository).maxMessages(10).build();}}
}
4.配置yml文件
spring:ai:ollama:base-url: http://localhost:11434embedding:options:model: nomic-embed-textchat:options:model: qwen3:8btemperature: 0.7chat:memory:repository:jdbc:initialize-schema: ALWAYSschema: classpath:db/schema.sqldatasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/spring-ai?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&allowPublicKeyRetrieval=true&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNullusername: rootpassword: root123
logging:level:#查看Rag查到的內容以及給大模型傳遞的內容org.springframework.ai.chat.client.advisor.SimpleLoggerAdvisor: debug
5.準備sql(連不上的話,手動創建庫和表)
CREATE TABLE IF NOT EXISTS SPRING_AI_CHAT_MEMORY (
`conversation_id` VARCHAR(36) NOT NULL,
`content` TEXT NOT NULL,
`type` VARCHAR(10) NOT NULL,
`timestamp` TIMESTAMP NOT NULL,
INDEX `SPRING_AI_CHAT_MEMORY_CONVERSATION_ID_TIMESTAMP_IDX` (`conversation_id`, `timestamp`)
);