langchain4j OpenAIStreamingChatModel 使用了第三方的 base_url,但它无法正常工作,

lyfkaqu1  于 4个月前  发布在  其他
关注(0)|答案(3)|浏览(40)

代码:

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
    其他上下文
f2uvfpb9

f2uvfpb91#

你好,@IMYR666,你正在拨打.ignoreErrors(),这可能是你看不到任何错误的原因。你能把它改成.onError()吗?看看是否有所帮助?
你也可以在模型上激活日志:

OpenAiStreamingChatModel.builder()
                ...
                .logRequests(true)
                .logResponses(true)
                .build();
ecfdbz9o

ecfdbz9o2#

@Test
    void langChain4jAiServicesStreamTest() {
         String apiKey = "sk-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
        StreamingChatLanguageModel openAiChatModel = OpenAiStreamingChatModel.builder()
                .apiKey(apiKey)
                .logRequests(true)
                .logResponses(true)
                .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)
                .onError(System.out::println)
                .start();
    }

感谢您的回复。我尝试使用onError、logRequests和logResponses,但结果仍然是一样的:没有报告错误,也没有输出消息。
然而,当我将代码集成到SpringBoot生产项目中时,返回了消息,这相当奇怪。
最初,我在测试模块中编写它,以便快速验证LangChain是否满足要求,而不修改业务代码。结果,由于这个意外的问题,我浪费了很多时间🤣。

nx7onnlm

nx7onnlm3#

当日志配置正确时,您至少应该能看到请求。如果您什么都没看到,似乎您没有配置任何slf4j日志后端,您可以添加这个并再次运行测试:

<dependency>
               <groupId>org.tinylog</groupId>
               <artifactId>tinylog-impl</artifactId>
               <version>2.6.2</version>
           </dependency>

           <dependency>
               <groupId>org.tinylog</groupId>
               <artifactId>slf4j-tinylog</artifactId>
               <version>2.6.2</version>
           </dependency>

Spring Boot默认已经配置了日志,这可能是它能正常工作的原因。

相关问题