聊天记忆

**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); } |

相关推荐
不愿是过客19 小时前
java实战干货——长方法深递归
java
小北方城市网20 小时前
Redis 分布式锁高可用实现:从原理到生产级落地
java·前端·javascript·spring boot·redis·分布式·wpf
六义义20 小时前
java基础十二
java·数据结构·算法
毕设源码-钟学长21 小时前
【开题答辩全过程】以 基于SpringBoot的智能书城推荐系统的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端
笨手笨脚の1 天前
深入理解 Java 虚拟机-03 垃圾收集
java·jvm·垃圾回收·标记清除·标记复制·标记整理
莫问前路漫漫1 天前
WinMerge v2.16.41 中文绿色版深度解析:文件对比与合并的全能工具
java·开发语言·python·jdk·ai编程
九皇叔叔1 天前
【03】SpringBoot3 MybatisPlus BaseMapper 源码分析
java·开发语言·mybatis·mybatis plus
挖矿大亨1 天前
c++中的函数模版
java·c++·算法
a程序小傲1 天前
得物Java面试被问:RocketMQ的消息轨迹追踪实现
java·linux·spring·面试·职场和发展·rocketmq·java-rocketmq
青春男大1 天前
Redis和RedisTemplate快速上手
java·数据库·redis·后端·spring·缓存