会话记忆
问题
使用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);
}
}

浙公网安备 33010602011771号