ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

LangChain4j快速入门5(会话功能_会话记忆)

2026/8/3 23:34:17 拓冰建站 浏览量
LangChain4j快速入门5(会话功能_会话记忆)

一.大模型记忆机制
大模型本身不具备记忆能力,要让它记住之前的聊天内容,必须把历史对话内容和新提示词一起发送给模型。

image

 

image

 

image

 

image

 相关代码

1.

package com.vivo.config;import dev.langchain4j.memory.ChatMemory;
import dev.langchain4j.memory.chat.ChatMemoryProvider;
import dev.langchain4j.memory.chat.MessageWindowChatMemory;
import dev.langchain4j.model.openai.OpenAiChatModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class CommonConfig {@Autowiredprivate OpenAiChatModel model;//    @Bean
//    public ConsultantService consultantService() {
//        return AiServices.builder(ConsultantService.class)
//                .chatModel(model)
//                .build();
//    }
@Beanpublic ChatMemory chatMemory() {MessageWindowChatMemory memory = MessageWindowChatMemory.builder().maxMessages(20).build();return memory;}@Beanpublic ChatMemoryProvider chatMemoryProvider() {ChatMemoryProvider chatMemoryProvider = new ChatMemoryProvider() {@Overridepublic ChatMemory get(Object memoryId) {return MessageWindowChatMemory.builder().id(memoryId).maxMessages(20).build();}};return chatMemoryProvider;}
}

 

2.接口

package com.vivo.aiservice;import dev.langchain4j.service.MemoryId;
import dev.langchain4j.service.SystemMessage;
import dev.langchain4j.service.UserMessage;
import dev.langchain4j.service.spring.AiService;
import dev.langchain4j.service.spring.AiServiceWiringMode;
import reactor.core.publisher.Flux;@AiService(wiringMode = AiServiceWiringMode.EXPLICIT, // 手动装配chatModel = "openAiChatModel", // 指定模型streamingChatModel = "openAiStreamingChatModel",// chatMemory = "chatMemory" // 配置会话记忆对象chatMemoryProvider = "chatMemoryProvider" // 配置会话记忆提供者对象
)
public interface ConsultantService {// 方式1:直接在注解中写系统提示词@SystemMessage("你是毅哥的助手小甜甜,人美心善。")// 方式2:从资源文件中加载系统提示词//@SystemMessage("system.txt")// 方式3:使用UserMessage注解并占位符//@UserMessage("你是毅哥的助手小甜甜,人美心善。{{it}}")// 方式4:使用UserMessage注解+自定义占位符名称//@UserMessage("你是毅哥的助手小甜甜,人美心善。{{msg}}")public Flux<String> chat(/*@V("msg")*/ @MemoryId String memoryId, @UserMessage String message);
}

 

3.controller

package com.vivo.controller;import com.vivo.aiservice.ConsultantService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;@RestController
public class ChatController {@Autowiredprivate ConsultantService consultantService;@RequestMapping(value = "/chat", produces = "text/html;charset=utf-8")public Flux<String> chat(String memoryId, String message) {Flux<String> chat = consultantService.chat(memoryId, message);return chat;}
}