LangChain4j:解决调用中enable_thinking参数问题
摘要:在使用LangChain4j集成Qwen3模型时,发现非流式调用必须设置enable_thinking=false但无法直接配置。解决方案是通过自定义OpenAiChatRequestParameters,在customParameters中传递该参数。关键步骤包括:构建HTTP客户端、创建含enable_thinking的参数字典,并配置到ChatModel中。最终通过chatModel.
·
在使用LangChain4j框架集成本地部署的Qwen3模型时,遇到了一个关于参数配置的问题。通过深入研究和调试,最终找到了解决方案,现将问题和解决过程分享如下。
问题描述
Qwen3模型提供了一种机制,允许通过传递特定参数在"思考模式"和"非思考模式"之间切换。根据官方文档,我们可以通过设置enable_thinking=True启用思考过程,设置enable_thinking=False禁用它。
然而,在使用LangChain4j的ChatModel或AiService接口时,我发现无法直接传递这些模型特定的参数。当我尝试进行非流式调用时,遇到了以下错误:
{
"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
更多推荐
所有评论(0)