langchain4j [BUG] 在使用输出解析器时,版本33中的空指针错误

643ylb08  于 4个月前  发布在  其他
关注(0)|答案(2)|浏览(77)

你好,

我尝试从32升级到33,但突然我的代码抛出了一个空指针异常:
Java.lang.NullPointerException: 无法调用 "java.lang.Class.isEnum()",因为 "typeArgumentClass" 为空

at dev.langchain4j.service.output.DefaultOutputParserFactory.get(DefaultOutputParserFactory.java:53)
at dev.langchain4j.service.output.ServiceOutputParser.outputFormatInstructions(ServiceOutputParser.java:90)

这个问题出现在ServiceOutputParser类中:
ServiceOutputParser.outputFormatInstructions(Class<?>))
在之前的版本中,这是一个静态方法,现在已经不再是这样了。
如果将List.class作为参数传递给此方法,将抛出空指针异常。

nwlqm0z1

nwlqm0z11#

@PrimosK,你能看一下吗?这与#725的更改有关。我可以复制,当使用List.class时,NPE发生是因为他没有参数化类型。

emeijp43

emeijp432#

我们可以将当前实现与旧行为(轻松地)对齐,但鉴于 AiServices 只支持 List<String>List<Enum>(在其他情况下出错),我对您的具体用例感到好奇。
您期望得到一个字符串列表吗?如果是,您可能可以使用以下方法:

Type listOfStringsType = new TypeToken<List<String>>() {}.getType();
String formatInstructions = sut.outputFormatInstructions(listOfStringsType);

此代码片段使用 TypeToken 将预期类型定义为 List<String>,然后相应地获取格式说明符。这是否符合您的要求?
鉴于以下事实:

  • 我很难确定这是否是真正的错误
  • 我将离开两周

...我建议 @langchain4j 在需要时介入...

相关问题