在使用LangChain4j框架集成本地部署的Qwen3模型时,遇到了一个关于参数配置的问题。通过深入研究和调试,最终找到了解决方案,现将问题和解决过程分享如下。

问题描述

Qwen3模型提供了一种机制,允许通过传递特定参数在"思考模式"和"非思考模式"之间切换。根据官方文档,我们可以通过设置enable_thinking=True启用思考过程,设置enable_thinking=False禁用它。

然而,在使用LangChain4j的ChatModelAiService接口时,我发现无法直接传递这些模型特定的参数。当我尝试进行非流式调用时,遇到了以下错误:

{
  "error": "parameter.enable_thinking must be set to false for non-streaming calls",
  "type": "invalid_request_error"
}

这个错误表明,在非流式调用中必须将enable_thinking参数设置为false,但我找不到合适的方式来配置这个参数。

解决方案

经过一番研究,以通过自定义OpenAiChatRequestParameters并设置customParameters来传递Qwen3模型特定的参数。以下是解决问题的关键代码:

import java.net.http.HttpClient;
import java.time.Duration;
import java.util.Map;

import dev.langchain4j.data.message.AiMessage;
import dev.langchain4j.data.message.ChatMessage;
import dev.langchain4j.model.chat.ChatModel;
import dev.langchain4j.model.chat.StreamingChatModel;
import dev.langchain4j.model.openai.OpenAiChatModel;
import dev.langchain4j.model.openai.OpenAiChatRequestParameters;
import dev.langchain4j.model.openai.OpenAiStreamingChatModel;
import dev.langchain4j.model.http.JdkHttpClient;

public class Qwen3ModelIntegration {

    private static final int MAX_RETRIES = 3;

    public String callQwen3Model(List<ChatMessage> originalMessages) {
        // 构建HTTP客户端
        HttpClient.Builder httpClientBuilder = HttpClient.newBuilder()
                .version(HttpClient.Version.HTTP_1_1);

        JdkHttpClientBuilder jdkHttpClientBuilder = JdkHttpClient.builder()
                .httpClientBuilder(httpClientBuilder);
        Boolean enableThinking = false;
        //自定义参数
        Map<String, Object> customParameters = Map.of("enable_thinking", enableThinking);

        // 构建聊天请求
        OpenAiChatRequestParameters parameters = OpenAiChatRequestParameters.builder()
                .modelName("qwen3-1.7b")
                .customParameters(customParameters)
                .build();

        ChatRequest chatRequest = ChatRequest.builder()
                .messages(originalMessages)
                .parameters(parameters)
                .build();

        String apiKey = System.getenv("API_KEY");

        // 构建demo聊天模型
        ChatModel chatModel = OpenAiChatModel.builder()
                .baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1")
                .apiKey(apiKey)
                .logResponses(true)
                .logRequests(true)
                .temperature(0.15)
                .httpClientBuilder(jdkHttpClientBuilder)
                .timeout(Duration.ofSeconds(10) // 增加超时时间
                .maxRetries(3)
                .build();

                ChatResponse aiResponse = chatModel.chat(chatRequest);
                return aiResponse.content();
}

langchain4j version: 1.2.0-beta8
Java version: 17
Spring Boot version: 3.3.1

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐