资讯动态

ai开发-langchain4j-进阶-04-记忆功能、记忆功能持久化

发布时间:2026/8/14 13:23:52 来源:尧图企业网站定制
一、记忆功能不带记忆功能配置文件# 设置响应的字符编码 server.servlet.encoding.charsetutf-8 server.servlet.encoding.enabledtrue server.servlet.encoding.forcetrue llm.config.aliQwenApiKeysk-.................. llm.config.aliQwenModelNameqwen-long llm.config.aliQwenUrlhttps://dashscope.aliyuncs.com/compatible-mode/v1配置类Value(${llm.config.aliQwenApiKey}) private String aliQwenApiKey; Value(${llm.config.aliQwenModelName}) private String aliQwenModelName; Value(${llm.config.aliQwenUrl}) private String aliQwenUrl; Bean public ChatModel chatModel() { return OpenAiChatModel.builder() .apiKey(aliQwenApiKey) .modelName(aliQwenModelName) .baseUrl(aliQwenUrl) .build(); } Bean(name chat) public ChatAssistant chatAssistant(ChatModel chatModel) { return AiServices.create(ChatAssistant.class, chatModel); }自定义service 接口package com.langchain.study.service; /** * auther xulk * Date 2026-06-30 18:59 * Description: TODO */ public interface ChatAssistant { /** * Description: 普通聊天对话不带记忆缓存功能 */ String chat(String prompt); }controller 测试// 不带记忆功能 Resource(name chat) private ChatAssistant chatAssistant; /** * Description: v1, 没有记忆缓存功能 * Auther: xulk * http://localhost:9008/chatmemory/test1 */ GetMapping(value /chatmemory/test1) public String chat() { String answer01 chatAssistant.chat(你好我的名字叫张三); System.out.println(answer01返回结果 answer01); String answer02 chatAssistant.chat(我的名字是什么); System.out.println(answer02返回结果 answer02); return success : DateUtil.now() br \n\n answer01: answer01 br \n\n answer02: answer02; }聊天带记忆缓存功能自定义service接口package com.langchain.study.service; import dev.langchain4j.service.MemoryId; import dev.langchain4j.service.UserMessage; /** * auther xulk * Date 2026-06-30 19:22 * Description: TODO */ public interface ChatMemoryAssistant { /** * 聊天带记忆缓存功能 * * param userId 用户 ID * param prompt 消息 * return {link String } */ String chatWithChatMemory(MemoryId Long userId, UserMessage String prompt); }配置类/** * 按消息数量淘汰 * Description: 按照MessageWindowChatMemory, * 知识出处https://docs.langchain4j.dev/tutorials/chat-memory/#eviction-policy * Auther: xulk */ Bean(name chatMessageWindowChatMemory) public ChatMemoryAssistant chatMessageWindowChatMemory(ChatModel chatModel) { return AiServices.builder(ChatMemoryAssistant.class) .chatModel(chatModel) //按照memoryId对应创建了一个chatMemory .chatMemoryProvider(memoryId - MessageWindowChatMemory.withMaxMessages(100)) .build(); } /** * 按 Token 数量淘汰 * Description: 按照TokenWindowChatMemory, 当堂编码给学生演示 * 知识出处https://docs.langchain4j.dev/tutorials/chat-memory/#eviction-policy * Auther: xulk */ Bean(name chatTokenWindowChatMemory) public ChatMemoryAssistant chatTokenWindowChatMemory(ChatModel chatModel) { //1 TokenCountEstimator默认的token分词器需要结合Tokenizer计算ChatMessage的token数量 TokenCountEstimator openAiTokenCountEstimator new OpenAiTokenCountEstimator(gpt-4); return AiServices.builder(ChatMemoryAssistant.class) .chatModel(chatModel) .chatMemoryProvider(memoryId - TokenWindowChatMemory.withMaxTokens(1000, openAiTokenCountEstimator)) .build(); }controller 测试1按消息数量淘汰// 聊天带记忆缓存功能 Resource(name chatMessageWindowChatMemory) private ChatMemoryAssistant chatMessageWindowChatMemory; /** * Description: MessageWindowChatMemory实现聊天功能 * Auther: xulk */ GetMapping(value /chatmemory/test2) public String chatMessageWindowChatMemory() { chatMessageWindowChatMemory.chatWithChatMemory(1L, 你好我的名字是Java.); String answer01 chatMessageWindowChatMemory.chatWithChatMemory(1L, 我的名字是什么); System.out.println(answer01返回结果 answer01); chatMessageWindowChatMemory.chatWithChatMemory(3L, 你好我的名字是C); String answer02 chatMessageWindowChatMemory.chatWithChatMemory(3L, 我的名字是什么); System.out.println(answer02返回结果 answer02); return chatMessageWindowChatMemory success : DateUtil.now() br \n\n answer01: answer01 br \n\n answer02: answer02; }conroller 测试2按 Token 数量淘汰// 聊天带记忆缓存功能 Resource(name chatTokenWindowChatMemory) private ChatMemoryAssistant chatTokenWindowChatMemory; /** * Description: TokenWindowChatMemory实现聊天功能 * Auther: xulk */ GetMapping(value /chatmemory/test3) public String chatTokenWindowChatMemory() { chatTokenWindowChatMemory.chatWithChatMemory(1L, 你好我的名字是mysql); String answer01 chatTokenWindowChatMemory.chatWithChatMemory(1L, 我的名字是什么); System.out.println(answer01返回结果 answer01); chatTokenWindowChatMemory.chatWithChatMemory(3L, 你好我的名字是oracle); String answer02 chatTokenWindowChatMemory.chatWithChatMemory(3L, 我的名字是什么); System.out.println(answer02返回结果 answer02); return chatTokenWindowChatMemory success : DateUtil.now() br \n\n answer01: answer01 br \n\n answer02: answer02; }

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价