当前位置: 首页 > news >正文

4. LangChain4j 模型参数配置超详细说明

4. LangChain4j 模型参数配置超详细说明

文章目录

  • 4. LangChain4j 模型参数配置超详细说明
  • LangChain4j 模型参数配置超详细说明
    • LangChain4j 日志配置
    • LangChain4j 监控配置
    • LangChain4J 重试机制(RetryConfiguration)默认重试3次
    • LangChain4J 超时机制 timeout
  • 最后:

LangChain4j 模型参数配置超详细说明

  • https://docs.langchain4j.dev/tutorials/model-parameters/

OpenAiChatModel model = OpenAiChatModel.builder().apiKey(System.getenv("OPENAI_API_KEY")).modelName("gpt-4o-mini").temperature(0.3).timeout(ofSeconds(60)).logRequests(true).logResponses(true).build();

quarkus.langchain4j.openai.api-key=${OPENAI_API_KEY}
quarkus.langchain4j.openai.chat-model.temperature=0.5
quarkus.langchain4j.openai.timeout=60s
  • https://docs.langchain4j.dev/integrations/language-models/open-ai/#spring-boot-1

# Mandatory properties:
langchain4j.open-ai.chat-model.api-key=${OPENAI_API_KEY}
langchain4j.open-ai.chat-model.model-name=gpt-4o-mini# Optional properties:
langchain4j.open-ai.chat-model.base-url=...
langchain4j.open-ai.chat-model.custom-headers=...
langchain4j.open-ai.chat-model.frequency-penalty=...
langchain4j.open-ai.chat-model.log-requests=...
langchain4j.open-ai.chat-model.log-responses=...
langchain4j.open-ai.chat-model.logit-bias=...
langchain4j.open-ai.chat-model.max-retries=...
langchain4j.open-ai.chat-model.max-completion-tokens=...
langchain4j.open-ai.chat-model.max-tokens=...
langchain4j.open-ai.chat-model.metadata=...
langchain4j.open-ai.chat-model.organization-id=...
langchain4j.open-ai.chat-model.parallel-tool-calls=...
langchain4j.open-ai.chat-model.presence-penalty=...
langchain4j.open-ai.chat-model.project-id=...
langchain4j.open-ai.chat-model.reasoning-effort=...
langchain4j.open-ai.chat-model.response-format=...
langchain4j.open-ai.chat-model.return-thinking=...
langchain4j.open-ai.chat-model.seed=...
langchain4j.open-ai.chat-model.service-tier=...
langchain4j.open-ai.chat-model.stop=...
langchain4j.open-ai.chat-model.store=...
langchain4j.open-ai.chat-model.strict-schema=...
langchain4j.open-ai.chat-model.strict-tools=...
langchain4j.open-ai.chat-model.supported-capabilities=...
langchain4j.open-ai.chat-model.temperature=...
langchain4j.open-ai.chat-model.timeout=...
langchain4j.open-ai.chat-model.top-p=
langchain4j.open-ai.chat-model.user=...

创建对应模块内容:注意:这里我们需要导入的 langchain4j 高阶 和 langchain4j 低阶。

想要使用 langchain4j 高阶 的就必须导入 langchain4j 低阶的配置。

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--langchain4j-open-ai 基础--><!--所有调用均基于 OpenAI 协议标准,实现一致的接口设计与规范LangChain4j 提供与许多 LLM 提供商的集成从最简单的开始方式是从 OpenAI 集成开始https://docs.langchain4j.dev/get-started    --><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-open-ai</artifactId></dependency><!--langchain4j 高阶--><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j</artifactId></dependency><!--lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency>

LangChain4j 日志配置

  • https://docs.langchain4j.dev/tutorials/logging/

  1. 创建配置大模型的配置类,同时,在配置类当中,开启日志。如下图所示:

package com.rainbowsea.langchain4jmodelparameters.config;import dev.langchain4j.model.chat.ChatModel;
import dev.langchain4j.model.openai.OpenAiChatModel;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** @Date 2025-05-27 22:04* @Description: 知识出处 https://docs.langchain4j.dev/get-started*/
@Configuration
public class LLMConfig
{@Bean(name = "qwen")public ChatModel chatModelQwen(){return OpenAiChatModel.builder().apiKey(System.getenv("aliQwen_api")).modelName("qwen-plus").baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1").logRequests(true) // 日志界别设置为debug才有效.logResponses(true)// 日志界别设置为debug才有效.build();}
}
  1. 在 application.prperties/yaml 配置文件当中,开启日志级别调整为:debug

注意:只有日志级别调整为debug级别,同时配置以上 langchain 日志输出开关才有效

server.port=9003
spring.application.name=langchain4j-03model-parameters
# 只有日志级别调整为debug级别,同时配置以上 langchain 日志输出开关才有效
logging.level.dev.langchain4j=DEBUG 
  1. 编写调用大模型测试类的 Cutroller 测试

package com.rainbowsea.langchain4jmodelparameters.controller;import dev.langchain4j.model.chat.ChatModel;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;/***/
@RestController
@Slf4j
public class ModelParameterController
{@Resourceprivate ChatModel chatModelQwen;// http://localhost:9003/chatconfig/config@GetMapping(value = "/modelparam/config")public String config(@RequestParam(value = "prompt", defaultValue = "你是谁") String prompt){String result = chatModelQwen.chat(prompt);System.out.println("通过langchain4j调用模型返回结果:"+result);return result;}
}

控制台打印显示日志如下:

- method: POST
- url: https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions
- headers: [Authorization: Beare...03], [User-Agent: langchain4j-openai], [Content-Type: application/json]
- body: {"model" : "qwen-plus","messages" : [ {"role" : "user","content" : "你是谁"} ],"stream" : false
}2025-08-03T14:35:10.126+08:00  INFO 22816 --- [langchain4j-03model-parameters] [nio-9003-exec-1] d.l.http.client.log.LoggingHttpClient    : HTTP response:
- status code: 200
- headers: [:status: 200], [content-length: 708], [content-type: application/json], [date: Sun, 03 Aug 2025 06:34:59 GMT], [req-arrive-time: 1754202897910], [req-cost-time: 1807], [resp-start-time: 1754202899718], [server: istio-envoy], [set-cookie: acw_tc=fc4c2368-33d6-91de-98a5-5dfa67e550c2ee7ef2f5553bde2a7a0f7a3d9825739d;path=/;HttpOnly;Max-Age=1800], [vary: Origin,Access-Control-Request-Method,Access-Control-Request-Headers, Accept-Encoding], [x-dashscope-call-gateway: true], [x-envoy-upstream-service-time: 1806], [x-request-id: fc4c2368-33d6-91de-98a5-5dfa67e550c2]
- body: {"choices":[{"message":{"role":"assistant","content":"我是通义千问,阿里巴巴集团旗下的通义实验室自主研发的超大规模语言模型。我可以帮助你回答问题、创作文字,比如写故事、写公文、写邮件、写剧本、逻辑推理、编程等等,还能表达观点,玩游戏等。如果你有任何问题或需要帮助,欢迎随时告诉我!"},"finish_reason":"stop","index":0,"logprobs":null}],"object":"chat.completion","usage":{"prompt_tokens":14,"completion_tokens":66,"total_tokens":80,"prompt_tokens_details":{"cached_tokens":0}},"created":1754202900,"system_fingerprint":null,"model":"qwen-plus","id":"chatcmpl-fc4c2368-33d6-91de-98a5-5dfa67e550c2"}通过langchain4j调用模型返回结果:我是通义千问,阿里巴巴集团旗下的通义实验室自主研发的超大规模语言模型。我可以帮助你回答问题、创作文字,比如写故事、写公文、写邮件、写剧本、逻辑推理、编程等等,还能表达观点,玩游戏等。如果你有任何问题或需要帮助,欢迎随时告诉我!

LangChain4j 监控配置

  • https://docs.langchain4j.dev/tutorials/observability/#chat-model-observability

  • https://docs.langchain4j.dev/tutorials/spring-boot-integration/#observability

结论:重写 ChatModeListener 当中监听器的方法即可

  1. 实现 ChatModelListener 监听器的实现类,同时重写实现其中的 onRequest() ,onResponse,onError() 方法。

package com.rainbowsea.langchain4jmodelparameters.listener;import cn.hutool.core.util.IdUtil;
import dev.langchain4j.model.chat.listener.ChatModelErrorContext;
import dev.langchain4j.model.chat.listener.ChatModelListener;
import dev.langchain4j.model.chat.listener.ChatModelRequestContext;
import dev.langchain4j.model.chat.listener.ChatModelResponseContext;
import lombok.extern.slf4j.Slf4j;/*** @Description: 知识出处,https://docs.langchain4j.dev/tutorials/spring-boot-integration#observability*/
@Slf4j
public class TestChatModelListener implements ChatModelListener
{@Overridepublic void onRequest(ChatModelRequestContext requestContext){// onRequest配置的k:v键值对,在onResponse阶段可以获得,上下文传递参数好用String uuidValue = IdUtil.simpleUUID();requestContext.attributes().put("TraceID",uuidValue);log.info("请求参数requestContext:{}", requestContext+"\t"+uuidValue);}@Overridepublic void onResponse(ChatModelResponseContext responseContext){Object object = responseContext.attributes().get("TraceID");log.info("返回结果responseContext:{}", object);}@Overridepublic void onError(ChatModelErrorContext errorContext){log.error("请求异常ChatModelErrorContext:{}", errorContext);}
}

特别说明: onRequest配置的k:v键值对,在onResponse阶段可以获得,上下文传递参数好用

  1. 在我们创建配置接入的大模型的配置类当中,指明我们自定义的监听器是那个(就是上面我们创建实现 ChatModelListener 接口类的实现类)

package com.rainbowsea.langchain4jmodelparameters.config;import com.rainbowsea.langchain4jmodelparameters.listener.TestChatModelListener;
import com.sun.tools.javac.util.List;
import dev.langchain4j.model.chat.ChatModel;
import dev.langchain4j.model.openai.OpenAiChatModel;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** @Date 2025-05-27 22:04* @Description: 知识出处 https://docs.langchain4j.dev/get-started*/
@Configuration
public class LLMConfig
{@Bean(name = "qwen")public ChatModel chatModelQwen(){return OpenAiChatModel.builder().apiKey(System.getenv("aliQwen_api")).modelName("qwen-plus").baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1").logRequests(true) // 日志界别设置为debug才有效.logResponses(true)// 日志界别设置为debug才有效.listeners(List.of(new TestChatModelListener())) //监听器.build();}
}

注意:这里的 List.of(new TestChatModelListener() 是 import com.sun.tools.javac.util.List; 包下的。JDK 17 包当中工具类,也可以用 JDK8 当中的import java.util.List;

  1. 运行测试:

LangChain4J 重试机制(RetryConfiguration)默认重试3次

  • https://docs.langchain4j.dev/integrations/language-models/open-ai/#spring-boot-1

所谓的重试机制:当我们第一次连接大模型失败了,就自动尝试连接第 2 次,第 3 次,默认是三次,当超过了 3 次还是没有连接上大模型就,会抛出异常,终止连接。

默认的情况下是重试 3 次。

  1. 在我们的创建配置连接大模型基本三件套(大模型 key,大模型 name,大模型 url) 的配置类当中,加上配置重试配置即可如下。

package com.rainbowsea.langchain4jmodelparameters.config;import com.rainbowsea.langchain4jmodelparameters.listener.TestChatModelListener;
import dev.langchain4j.model.chat.ChatModel;
import dev.langchain4j.model.openai.OpenAiChatModel;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import java.util.List;/*** @Date 2025-05-27 22:04* @Description: 知识出处 https://docs.langchain4j.dev/get-started*/
@Configuration
public class LLMConfig {@Bean(name = "qwen")public ChatModel chatModelQwen() {return OpenAiChatModel.builder().apiKey(System.getenv("aliQwen_api")).modelName("qwen-plus").baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1").logRequests(true) // 日志界别设置为debug才有效.logResponses(true)// 日志界别设置为debug才有效.listeners(List.of(new TestChatModelListener()))  //监听器.maxRetries(2)// 重试机制共计2次.build();}
}

运行测试:关闭WiFI后中断网络再访问,看后台打印几次

LangChain4J 超时机制 timeout

同理:

  1. 在我们的创建配置连接大模型基本三件套(大模型 key,大模型 name,大模型 url) 的配置类当中,加上配置 “超时机制” 配置即可如下。

.timeout(Duration.ofSeconds(2))//向大模型发送请求时,如在指定时间内没有收到响应,该请求将被中断并报requesttimedout

package com.rainbowsea.langchain4jmodelparameters.config;import com.rainbowsea.langchain4jmodelparameters.listener.TestChatModelListener;
import dev.langchain4j.model.chat.ChatModel;
import dev.langchain4j.model.openai.OpenAiChatModel;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import java.time.Duration;
import java.util.List;/*** @Date 2025-05-27 22:04* @Description: 知识出处 https://docs.langchain4j.dev/get-started*/
@Configuration
public class LLMConfig {@Bean(name = "qwen")public ChatModel chatModelQwen() {return OpenAiChatModel.builder().apiKey(System.getenv("aliQwen_api")).modelName("qwen-plus").baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1").logRequests(true) // 日志界别设置为debug才有效.logResponses(true)// 日志界别设置为debug才有效.listeners(List.of(new TestChatModelListener()))  //监听器.maxRetries(2)// 重试机制共计2次.timeout(Duration.ofSeconds(2)) //向大模型发送请求时,如在指定时间内没有收到响应,该请求将被中断并报requesttimedout.build();}
}

运行测试:

最后:

“在这个最后的篇章中,我要表达我对每一位读者的感激之情。你们的关注和回复是我创作的动力源泉,我从你们身上吸取了无尽的灵感与勇气。我会将你们的鼓励留在心底,继续在其他的领域奋斗。感谢你们,我们总会在某个时刻再次相遇。”

在这里插入图片描述

http://www.dtcms.com/a/357664.html

相关文章:

  • LangChain框架入门02:开发环境配置
  • 光伏发多少电才够用?匹配家庭用电需求
  • 【C/C++】柔性数组
  • 用html+js下拉菜单的demo,当鼠标点击后展开,鼠标点击别的地方后折叠
  • 高斯滤波的简介、C语言实现和实测
  • simd笔记
  • 嵌入式-定时器的从模式控制器、PWM参数测量实验-Day24
  • 命令拓展(草稿)
  • C++ 并发编程:全面解析主流锁管理类
  • 虚拟私有网络笔记
  • HDMI2.1 8K验证平台
  • websocket建立连接过程
  • 航电系统路径规划技术解析
  • C++Primer笔记——第六章:函数(下)
  • Python气象与海洋:安装入门+科学计算库+可视化+台风数据+WRF/ROMS后处理+EOF分析+机器学习
  • C++标准库断言头文件<cassert>使用指南
  • 告别音色漂移!微软超长语音合成模型VibeVoice正式开源​
  • Ubuntu磁盘分区重新挂载读写指南
  • 蓓韵安禧活性叶酸专利益生菌优生优选
  • 3D 数字孪生可视化技术在学校项目中的应用
  • AI 自动化编程 trae 体验3 开发小程序
  • 通过Kubernetes安装mysql5服务
  • Aha Moment——啊哈时刻!
  • ContextMenuManager for Win:优化右键菜单,解决用户痛点
  • Coze源码分析-API授权-编辑令牌-前端源码
  • 今天聊聊支付里的三个小概念:同名充值、非同代付和 D0。
  • NLP:驱动人工智能迈向 “理解” 与 “对话” 的核心引擎
  • 2025年06月 Scratch 图形化(一级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • 小杰机器视觉(five day)——直方图均衡化
  • five86: 1靶场渗透测试