**1.**测试对话是否有记忆
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Java package com.itguigu.java.ai.LangChain4j; import com.itguigu.java.ai.LangChain4j.assistant.Assistant; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest public class ChatMemoryTest { @Autowired private Assistant assistant; @Test public void testChatMemory() { String answer1 = assistant.chat("我是木鹅"); System.out .println(answer1); String answer2 = assistant.chat("我是谁"); System.out .println(answer2); } } |

我们发现并没有记忆
**2.**使用 ChatMemory 实现聊天记忆
这里用到前面学到的AIService,前面介绍,AISevice具有聊天记忆 Chat memory,现在我们使用Chat memory来实现聊天记忆
|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Java @Autowired private QwenChatModel qwenChatModel; @Test public void testChatMemory2() { *//*创建Chat memory MessageWindowChatMemory chatMemory = MessageWindowChatMemory.withMaxMessages (10); Assistant assistant = AiServices .builder (Assistant.class) .chatLanguageModel(qwenChatModel) .chatMemory(chatMemory) .build(); String answer1 = assistant.chat("我是木鹅"); System.out .println(answer1); String answer2 = assistant.chat("我是谁"); System.out .println(answer2); } |
出现的问题:
Cannot resolve method 'builder' in 'AiService'
错误原因:导错包
解决办法:
|-------------------------------------------------|
| Java import dev.langchain4j.service.AiServices; |
**3.**使用 AIService 实现聊天记忆
3.1****创建记忆对话智能体
|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| TypeScript package com.itguigu.java.ai.LangChain4j.assistant; import dev.langchain4j.service.spring.AiService; import static dev.langchain4j.service.spring.AiServiceWiringMode.EXPLICIT ; @AiService(wiringMode = EXPLICIT , chatModel = "qwenChatModel",chatMemory = "chatMemory") public interface ChatMemoryAssistant { String chat(String userMessage); } |
3.2****配置 ChatMemory
|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Java package com.itguigu.java.ai.LangChain4j.config; import dev.langchain4j.memory.ChatMemory; import dev.langchain4j.memory.chat.MessageWindowChatMemory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class ChatMemoryAssistantConfig { @Bean ChatMemory chatMemory() { return MessageWindowChatMemory.withMaxMessages (10); } } |
3.3****测试
|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| TypeScript @Autowired private ChatMemoryAssistant chatMemoryAssistant; @Test public void testChatMemory3() { String answer1 = chatMemoryAssistant.chat("我是小王"); System.out .println(answer1); String answer2 = chatMemoryAssistant.chat("我是谁"); System.out .println(answer2); } |
**4.**对话隔离
4.1****创建记忆隔离对话智能体
|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Java package com.itguigu.java.ai.LangChain4j.assistant; import dev.langchain4j.service.MemoryId; import dev.langchain4j.service.UserMessage; import dev.langchain4j.service.spring.AiService; import static dev.langchain4j.service.spring.AiServiceWiringMode.EXPLICIT ; @AiService(wiringMode = EXPLICIT , chatModel = "qwenChatModel", chatMemoryProvider = "chatMemoryProvider") public interface SeparateChatAssistant { String chat(@MemoryId int memoryId, @UserMessage String userMessage); } |
chatMemoryProvider = "chatMemoryProvider"可以替代chatMemory = "chatMemory"
4.2****配置 chatMemoryProvider
|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Java package com.itguigu.java.ai.LangChain4j.config; import com.itguigu.java.ai.LangChain4j.store.MongoChatMemoryStore; import dev.langchain4j.memory.chat.ChatMemoryProvider; import dev.langchain4j.memory.chat.MessageWindowChatMemory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class SeparateChatAssistantConfig { @Bean public ChatMemoryProvider chatMemoryProvider(){ return memoryId-> MessageWindowChatMemory .builder () .maxMessages(10) .id(memoryId) .chatMemoryStore(new MongoChatMemoryStore()) .build(); } } |
4.3****测试
|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| TypeScript @Autowired private SeparateChatAssistant separateChatAssistant; @Test public void testChatMemory4() { String answer1 = separateChatAssistant.chat(1, "我是光头强"); System.out .println(answer1); String answer2 = separateChatAssistant.chat(1, "我是谁"); System.out .println(answer2); String answer3 = separateChatAssistant.chat(2, "我是谁"); System.out .println(answer3); } |