会话记忆

问题

使用langchain4j的版本为 1.9.1-beta17 ,引入聊天记忆后运行报错

原因:

AiCodeHelperServiceFactory 中使用了单一的 ChatMemory 实例,但 AiCodeHelperService 接口使用了 @MemoryId 注解来支持多会话记忆。

当使用 @MemoryId 时,需要配置 ChatMemoryProvider 而不是单一的 ChatMemory。当前配置只有一个共享的 ChatMemory,所以所有用户(不管 memoryId 是 123 还是 234)都会共享同一个对话历史。

解决

AiCodeHelperService

import dev.langchain4j.service.MemoryId;
import dev.langchain4j.service.SystemMessage;
import dev.langchain4j.service.UserMessage;
import dev.langchain4j.service.spring.AiService;

@AiService
public interface AiCodeHelperService {

    @SystemMessage(fromResource = "system-prompt.txt")
    String chat(@UserMessage String userMessage, @MemoryId int memoryId);

}

AiCodeHelperServiceFactory

import dev.langchain4j.memory.chat.ChatMemoryProvider;
import dev.langchain4j.memory.chat.MessageWindowChatMemory;
import dev.langchain4j.model.chat.ChatModel;
import dev.langchain4j.service.AiServices;
import jakarta.annotation.Resource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class AiCodeHelperServiceFactory {

    @Resource
    private ChatModel qwenChatModel;

    @Bean
    ChatMemoryProvider chatMemoryProvider() {
        return memoryId ->
                MessageWindowChatMemory.withMaxMessages(10);
    }
}

posted @ 2025-12-24 15:46  棠仔517890027  阅读(2)  评论(0)    收藏  举报