4. LangChain4j 模型参数配置超详细说明
@[toc]
LangChain4j 模型参数配置超详细说明


java
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();

properties
quarkus.langchain4j.openai.api-key=${OPENAI_API_KEY}
quarkus.langchain4j.openai.chat-model.temperature=0.5
quarkus.langchain4j.openai.timeout=60s

properties
# 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 低阶的配置。

xml
<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 日志配置

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

java
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();
}
}
- 在 application.prperties/yaml 配置文件当中,开启日志级别调整为:debug。
注意:只有日志级别调整为debug级别,同时配置以上 langchain 日志输出开关才有效

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

java
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
{
@Resource
private 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;
}
}
控制台打印显示日志如下:
json
- 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 监控配置



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

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

java
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
{
@Override
public void onRequest(ChatModelRequestContext requestContext)
{
// onRequest配置的k:v键值对,在onResponse阶段可以获得,上下文传递参数好用
String uuidValue = IdUtil.simpleUUID();
requestContext.attributes().put("TraceID",uuidValue);
log.info("请求参数requestContext:{}", requestContext+"\t"+uuidValue);
}
@Override
public void onResponse(ChatModelResponseContext responseContext)
{
Object object = responseContext.attributes().get("TraceID");
log.info("返回结果responseContext:{}", object);
}
@Override
public void onError(ChatModelErrorContext errorContext)
{
log.error("请求异常ChatModelErrorContext:{}", errorContext);
}
}
特别说明: onRequest配置的k:v键值对,在onResponse阶段可以获得,上下文传递参数好用
- 在我们创建配置接入的大模型的配置类当中,指明我们自定义的监听器是那个(就是上面我们创建实现 ChatModelListener 接口类的实现类)。

java
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;
- 运行测试:

LangChain4J 重试机制(RetryConfiguration)默认重试3次
所谓的重试机制:当我们第一次连接大模型失败了,就自动尝试连接第 2 次,第 3 次,默认是三次,当超过了 3 次还是没有连接上大模型就,会抛出异常,终止连接。
默认的情况下是重试 3 次。
- 在我们的创建配置连接大模型基本三件套(大模型 key,大模型 name,大模型 url) 的配置类当中,加上配置重试配置即可如下。

java
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
同理:
- 在我们的创建配置连接大模型基本三件套(大模型 key,大模型 name,大模型 url) 的配置类当中,加上配置 "超时机制" 配置即可如下。
.timeout(Duration.ofSeconds(2))//向大模型发送请求时,如在指定时间内没有收到响应,该请求将被中断并报requesttimedout

java
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();
}
}
运行测试:

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