测试调用本地大模型发现一个请求体为空问题现在的解决方案看着好鸡肋,大家有没有好的解决方案?
1、先贴依赖版本、代码配置信息
依赖版本
[Asm] 纯文本查看 复制代码 <properties>
<java.version>21</java.version>
<spring-boot.version>3.5.4</spring-boot.version>
<langchain4j.version>1.20.0</langchain4j.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencyManagement>
<dependencies>
<!-- LangChain4j BOM -->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-bom</artifactId>
<version>${langchain4j.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
代码配置
[Java] 纯文本查看 复制代码 public class DefaultChatModelFactory implements ChatModelFactory {
private final ChatModel chatModel;
public DefaultChatModelFactory(LLMProperties properties) {
this.chatModel = OpenAiChatModel.builder()
.baseUrl(properties.getBaseUrl())
.apiKey(properties.getApiKey())
.modelName(properties.getModel())
.temperature(properties.getTemperature())
.logRequests(true)
.logResponses(true)
.timeout(Duration.ofSeconds(properties.getTimeout()))
.build();
}
@Override
public ChatModel getChatModel() {
return chatModel;
}
}
2、描述问题:发送调用大模型之后,返回异常校验InvalidRequestException
请求报文日志
[Java] 纯文本查看 复制代码 2026-09-19T22:26:59.466+08:00 INFO 131000 --- [sql-agent] [nio-8080-exec-1] d.l.http.client.log.LoggingHttpClient : HTTP request:
- method: POST
- url: http://127.0.0.1:8000/v1/chat/completions
- headers: [Authorization: Beare...r ], [Content-Type: application/json], [User-Agent: langchain4j-openai]
- body: {
"model" : "Qwen/Qwen3-8B",
"messages" : [ {
"role" : "user",
"content" : "你是一名专业SQL生成专家。\n\n你的任务:\n根据用户问题生成SQL。\n\n\n当前数据库:\nOceanBase\n\n\n数据库结构:\n\n\n\n安全规则:\n只允许SELECT\n禁止INSERT\n禁止UPDATE\n禁止DELETE\n禁止DROP\n禁止TRUNCATE\n\n\n用户问题:\n查询研发平均工资\n\n\n请严格返回JSON,不要输出任何其他内容:\n\n{\n \"sql\": \"SELECT ...\",\n \"explanation\": \"说明为什么生成这条SQL\",\n \"risk\": \"LOW\"\n}\nYou must answer strictly in the following JSON format: {\n\"sql\": (type: string),\n\"explanation\": (type: string),\n\"risk\": (type: enum, must be one of [LOW, MEDIUM, HIGH, BLOCKED])\n}"
} ],
"temperature" : 0.0,
"stream" : false
}
返回异常信息
[Java] 纯文本查看 复制代码
dev.langchain4j.exception.InvalidRequestException: {"error":{"message":"1 validation error:\n {'type': 'missing', 'loc': ('body',), 'msg': 'Field required', 'input': None}","type":"Bad Request","param":"body","code":400}}
at dev.langchain4j.internal.ExceptionMapper$DefaultExceptionMapper.mapHttpStatusCode(ExceptionMapper.java:71) ~[langchain4j-core-1.20.0.jar:na]
at dev.langchain4j.internal.ExceptionMapper$DefaultExceptionMapper.mapException(ExceptionMapper.java:44) ~[langchain4j-core-1.20.0.jar:na]
![]()
3、目前解决方案:
经过GPT排查,最终让替换 langchain4j-http-client-apache 作为 httpClient
调整后新增依赖
[XML] 纯文本查看 复制代码 <dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-http-client-apache</artifactId>
<version>1.20.0-beta30</version>
<scope>compile</scope>
</dependency>
代码配置
[Asm] 纯文本查看 复制代码 public class DefaultChatModelFactory implements ChatModelFactory {
private final ChatModel chatModel;
public DefaultChatModelFactory(LLMProperties properties) {
this.chatModel = OpenAiChatModel.builder()
.baseUrl(properties.getBaseUrl())
.apiKey(properties.getApiKey())
.modelName(properties.getModel())
.temperature(properties.getTemperature())
// 解决请求body为空的问题
.httpClientBuilder(ApacheHttpClient.builder()
.connectTimeout(Duration.ofMinutes(5))
.readTimeout(Duration.ofMinutes(5)))
.logRequests(true)
.logResponses(true)
.timeout(Duration.ofSeconds(properties.getTimeout()))
.build();
}
@Override
public ChatModel getChatModel() {
return chatModel;
}
}
![]()
看了一下 github 上也有登记这个bug,不知道为啥后面版本依然这样来处理。
大家有没有知道,为什么langchain4j没有解决这个问题,基于什么考虑的?欢迎大家评论区讨论一下。
https://github.com/langchain4j/langchain4j/issues/3883
|