聊天记忆

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

相关推荐
我命由我123452 小时前
Java 开发使用 MyBatis PostgreSQL 问题:使用了特殊字符而没有正确转义
java·开发语言·数据库·postgresql·java-ee·mybatis·学习方法
源码获取_wx:Fegn08952 小时前
基于springboot + vue图书商城系统
java·vue.js·spring boot·后端·spring·课程设计
未秃头的程序猿2 小时前
解决ShardingSphere分片算法在Devtools热重启后SpringUtil.getBean()空指针问题
java·后端
better_liang2 小时前
每日Java面试场景题知识点之-RabbitMQ
java·消息队列·rabbitmq·面试题·异步通信·企业级开发·系统解耦
芒克芒克2 小时前
《Git分支实战:从创建到合并的全流程》
java·git
Chloeis Syntax2 小时前
MySQL初阶学习日记(5)--- 联合查询
java·笔记·学习·mysql
ArabySide2 小时前
【Spring Boot】用Spring AOP优雅实现横切逻辑复用
java·spring boot·后端
snow123f2 小时前
Lambda 表达式怎么用
java·开发语言·线程
梓䈑2 小时前
【C++】C++11(右值引用和移动语义、可变参数模板 和 包装器)
java·开发语言·c++