吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 40|回复: 0
上一主题 下一主题
收起左侧

[讨论] langchain4j调用本地大模型请求体为空问题

[复制链接]
跳转到指定楼层
楼主
Neo1024 发表于 2026-9-19 22:55 回帖奖励
测试调用本地大模型发现一个请求体为空问题现在的解决方案看着好鸡肋,大家有没有好的解决方案?
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



image.png (99.05 KB, 下载次数: 0)

依赖版本

依赖版本

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-9-20 05:51

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表