聊天记忆

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

相关推荐
devilnumber17 分钟前
静态代理 & 动态代理:实战运用 + 场景区别 + 怎么选
java·开发语言·代理模式
Upsy-Daisy24 分钟前
Hermes Agent 学习笔记 02:安装、配置与第一次运行
java·前端·数据库
用户46825574591335 分钟前
Testcontainers 在 Windows Docker Desktop 上跑不通:协议层不兼容 + 4 种可行环境
java·后端
程序员小羊!1 小时前
12.Java 多线程编程
java·开发语言
xuhaoyu_cpp_java1 小时前
项目学习(三)代码生成器
java·经验分享·笔记·学习
乐观勇敢坚强的老彭1 小时前
C++信息学奥赛lesson1
java·开发语言·c++
San813_LDD1 小时前
[深度学习] 数据序列化格式对比:以日志级别配置为例
xml·java·前端
github_czy1 小时前
更加优雅的类型检查与传参---mcp源码分析
java·服务器·开发语言
专注_每天进步一点点1 小时前
IDEA中,Apifox Helper 的 2.0.15-243版本的插件 导出指定的接口,入参的中文名为空,描述为空
java·ide·intellij-idea
兰令水1 小时前
leecodecode【区间DP+树形DP】【2026.6.10打卡-java版本】
java·算法·leetcode