LangChain4j 1.10.0
通过 @MemoryId 传递聊天记忆 ID 时,出现 In order to use @MemoryId, please configure the ChatMemoryProvider on the 'com.hxstrive.langchain4j.aiServices.RewriteChatRequestDemo2$Assistant' 错误。
详细错误如下:
Exception in thread "main" dev.langchain4j.service.IllegalConfigurationException: In order to use @MemoryId, please configure the ChatMemoryProvider on the 'com.hxstrive.langchain4j.aiServices.RewriteChatRequestDemo2$Assistant'.
at dev.langchain4j.service.IllegalConfigurationException.illegalConfiguration(IllegalConfigurationException.java:18)
at dev.langchain4j.service.AiServiceValidation.validateMethod(AiServiceValidation.java:67)
at dev.langchain4j.service.AiServiceValidation.lambda$validate$0(AiServiceValidation.java:28)
at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992)
at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762)
at dev.langchain4j.service.AiServiceValidation.validate(AiServiceValidation.java:27)
at dev.langchain4j.service.DefaultAiServices.validate(DefaultAiServices.java:87)
at dev.langchain4j.service.DefaultAiServices.build(DefaultAiServices.java:101)
at com.hxstrive.langchain4j.aiServices.RewriteChatRequestDemo2.main(RewriteChatRequestDemo2.java:49)关键代码:
// 定义业务接口
interface Assistant {
// userMessage 是用户输入的消息
// 返回值是 AI 回复的内容呢
@UserMessage("{{userMessage}}")
String chat(@MemoryId String memoryId, @V("userMessage") String userMessage);
}// 使用 AiServices 创建服务
Assistant assistant = AiServices.builder(Assistant.class)
.chatModel(chatModel)
.build();
// 发起对话
String answer = assistant.chat(myMemoryId, "你好! 我的名字是张三。");
System.out.println(answer);根据错误信息和上述代码可知,使用 @MemoryId,需要在使用 AiServices 类创建 AI 服务实例时配置 ChatMemoryProvider,获取聊天记忆 ID 对应的 ChatMemory。
修改后的代码如下:
// 使用 AiServices 创建服务
Assistant assistant = AiServices.builder(Assistant.class)
.chatModel(chatModel)
.chatMemoryProvider((chatMemoryId) -> chatMemory) // 【关键点】看这里
.build();
// 发起对话
String answer = assistant.chat(myMemoryId, "你好! 我的名字是张三。");
System.out.println(answer);注意,即使你通过 chatMemory() 设置了默认的 ChatMemory 也会抛出该错误。