langchain4j [BUG] 在使用LocalAI时,当与AIServices一起使用时,会出现空指针异常,

guykilcj  于 3个月前  发布在  其他
关注(0)|答案(1)|浏览(80)

描述bug

在使用 AIServices 与 LocalAI 时,出现了一个 bug。

日志和堆栈跟踪

我目前没有堆栈跟踪,但问题出现在以下几行代码中:
langchain4j/langchain4j/src/main/java/dev/langchain4j/service/DefaultAiServices.java
第 166 行的 6c49573
| | tokenUsageAccumulator = tokenUsageAccumulator.add(response.tokenUsage()); |
langchain4j/langchain4j/src/main/java/dev/langchain4j/service/AiServiceStreamingResponseHandler.java
第 85 行的 6c49573
| | tokenUsage.add(response.tokenUsage()) |
langchain4j/langchain4j/src/main/java/dev/langchain4j/service/AiServiceStreamingResponseHandler.java
第 92 行的 6c49573
| | tokenUsage.add(response.tokenUsage()), |

重现方法

使用 AIServices 与 LocalAI 模型进行聊天。

预期行为

AIServices 助手获得聊天回复。

请填写以下信息:

  • LangChain4j 版本:0.27.1
  • Java 版本:17
  • Spring Boot 版本(如适用):3.2.2(未使用 langchain4j starter)
    附加上下文

似乎在使用 LocalAI 时,Response.tokenUsage 一直等于 null
langchain4j/langchain4j-local-ai/src/main/java/dev/langchain4j/model/localai/LocalAiChatModel.java
第 105 行的 6c49573
| | returnResponse.from( |
langchain4j/langchain4j-open-ai/src/main/java/dev/langchain4j/model/openai/OpenAiStreamingResponseBuilder.java
第 175 行的 6c49573
| | privateTokenUsagetokenUsage(Stringcontent, Tokenizertokenizer) { |
我已经通过提供自定义的 LocalAiChatModelBuilderFactory 并忽略 null 来自 Response.tokenUsage 解决了这个问题,但这可能不是最好的解决方案。
我注意到 LocalAI 的 JSON 回复中确实包含了令牌使用情况(设置为0),目前被 Langchain4J 忽略,而 Response.tokenUsage 只是设置为 null
LocaLAI 可能在未来添加一些配额,因此从响应中提取令牌使用情况可能是一个更好的解决方案?

相关问题