代码:
public interface Assistant2 {
TokenStream chat(String chatMessage);
}
@Test
void langChain4jAiServicesStreamTest() {
String apiKey = "sk-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
StreamingChatLanguageModel openAiChatModel = OpenAiStreamingChatModel.builder()
.apiKey(apiKey)
.modelName(OpenAiChatModelName.GPT_4_O)
.baseUrl("https://api.3rd-party.com/v1/")
.build();
Assistant2 assistant = AiServices.create(Assistant2.class, openAiChatModel);
TokenStream tokenStream = assistant.chat("Tell me a joke");
tokenStream.onNext(new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(1123);
System.out.println(s);
}
})
.onComplete(System.out::println)
.ignoreErrors()
.start();
}
描述bug
在SpringBoot3的测试模块中运行上述代码后,既没有抛出错误,也没有输出任何信息;似乎onNext方法没有被调用。将 https://api.3rd-party.com/v1/ 替换为 https://baidu.com 后出现了相同的现象。理论上,对 https://baidu.com/chat/completions 的请求应该导致错误,例如提示没有这样的API或返回4XX错误代码。
由于没有任何提示,我不确定这种行为是由于我的bug还是配置问题。
我相信第三方的base_url是可以访问的,因为当我切换到OpenAiChatModel时,内容被正确输出。
日志和堆栈跟踪
重现
预期行为
请填写以下信息:
- LangChain4j版本:0.32.0
- 使用的LLM(s):openai
- Java版本:jdk17
- Spring Boot版本(如适用):3.1.1
其他上下文
3条答案
按热度按时间f2uvfpb91#
你好,@IMYR666,你正在拨打
.ignoreErrors()
,这可能是你看不到任何错误的原因。你能把它改成.onError()
吗?看看是否有所帮助?你也可以在模型上激活日志:
ecfdbz9o2#
感谢您的回复。我尝试使用onError、logRequests和logResponses,但结果仍然是一样的:没有报告错误,也没有输出消息。
然而,当我将代码集成到SpringBoot生产项目中时,返回了消息,这相当奇怪。
最初,我在测试模块中编写它,以便快速验证LangChain是否满足要求,而不修改业务代码。结果,由于这个意外的问题,我浪费了很多时间🤣。
nx7onnlm3#
当日志配置正确时,您至少应该能看到请求。如果您什么都没看到,似乎您没有配置任何slf4j日志后端,您可以添加这个并再次运行测试:
Spring Boot默认已经配置了日志,这可能是它能正常工作的原因。