ChatRequestParameters 是 LangChain4j 中定义的、用于封装大多数大模型通用请求参数的接口。
该接口是 LLM(大语言模型)聊天请求参数的“通用模板”,整合了绝大多数模型服务商(如 OpenAI、Bedrock、Ollama 等)都支持的基础参数,比如 modelName(指定模型名)、temperature(控制输出随机性)、topK/topP(控制输出多样性)、maxOutputTokens(最大输出长度)等。其目的是为上层调用提供统一的参数交互标准,避免因不同服务商参数命名 / 含义差异导致的重复开发。
由于不同 LLM 服务商可能有专属参数,该接口允许具体服务商通过“实现接口 + 新增参数” 的方式扩展。比如 OpenAiChatRequestParameters 作为接口的实现类,除了实现 modelName 等通用方法,还可额外添加 OpenAI 专属的参数(如 user 标识字段),既保证了共性参数的统一,又兼容了服务商的个性化需求。
JavaDoc 地址:https://docs.langchain4j.dev/apidocs/dev/langchain4j/model/chat/request/ChatRequestParameters.html
你可以创建一个 AI 服务(AI Service)方法,该方法还接受一个类型为 ChatRequestParameters(或任何特定于提供商的类型,如 OpenAiChatRequestParameters)的参数。这会告知 LangChain4j 在每次调用期间接受并合并这些参数。
注意:ChatRequestParameters 中配置的 toolSpecifications 和 responseFormat,拥有更高优先级,会覆盖 AI Service 本身默认生成的对应配置。
1、定义你的接口:
interface AssistantWithChatParams {
String chat(@UserMessage String userMessage, ChatRequestParameters params);
}2、 构建 AI 服务:
Assistant assistant = AiServices.builder(Assistant.class)
.chatModel(chatModel)
.build();3、 每次会话时,使用任意的参数来调用它:
// 自定义参数
ChatRequestParameters customParams = ChatRequestParameters.builder()
.temperature(0.7)
.maxOutputTokens(50)
.responseFormat(ResponseFormat.JSON)
.build();
// 发起对话
String answer = assistant.chat("我叫张三,今年28岁,爱好踢球。\n" +
"提取上面内容中的信息,将提取的信息封装成JSON格式,JSON对象必须符合RFC8259标准,不得有偏差。", customParams);
System.out.println(answer);注意,作为参数传递给 AI 服务方法的 ChatRequestParameters 对象也会被传播到前面讨论的chatRequestTransformer() 方法,如果有必要,也可以在那里对其进行访问和修改。
下面示例展示了如何在每次发起对话时传递自己的 ChatRequestParameters 参数对象:
package com.hxstrive.langchain4j.aiServices;
import dev.langchain4j.model.chat.ChatModel;
import dev.langchain4j.model.chat.request.ChatRequestParameters;
import dev.langchain4j.model.chat.request.ResponseFormat;
import dev.langchain4j.model.openai.OpenAiChatModel;
import dev.langchain4j.service.AiServices;
import dev.langchain4j.service.UserMessage;
public class ChatRequestParametersDemo {
// 推荐:将OPEN_API_KEY设置成环境变量, 避免硬编码或随着代码泄露
// 注意,设置完环境变量记得重启IDEA,不然可能环境变量不会生效
private static final String API_KEY = System.getenv("OPEN_API_KEY");
// 定义业务接口
interface Assistant {
// userMessage 是用户输入的消息
// 返回值是 AI 回复的内容呢
String chat(@UserMessage String userMessage, ChatRequestParameters chatRequestParameters);
}
public static void main(String[] args) {
// 创建 ChatModel 实现类(OpenAI 为例)
ChatModel chatModel = OpenAiChatModel.builder()
.baseUrl("https://api.xty.app/v1")
.apiKey(API_KEY)
.modelName("gpt-3.5-turbo")
.temperature(0.7)
.logRequests(true)
.logResponses(true)
.build();
// 使用 AiServices 创建服务
Assistant assistant = AiServices.builder(Assistant.class)
.chatModel(chatModel)
.build();
// 自定义参数
ChatRequestParameters customParams = ChatRequestParameters.builder()
.temperature(0.7)
.maxOutputTokens(50)
.responseFormat(ResponseFormat.JSON)
.build();
// 发起对话
String answer = assistant.chat("我叫张三,今年28岁,爱好踢球。\n" +
"提取上面内容中的信息,将提取的信息封装成JSON格式,JSON对象必须符合RFC8259标准,不得有偏差。", customParams);
System.out.println(answer);
}
}运行示例,输出日志如下:
15:42:15.316 [main] INFO dev.langchain4j.http.client.log.LoggingHttpClient -- HTTP request:
- method: POST
- url: https://api.xty.app/v1/chat/completions
- headers: [Authorization: Beare...00], [User-Agent: langchain4j-openai], [Content-Type: application/json]
- body: {
"model" : "gpt-3.5-turbo",
"messages" : [ {
"role" : "user",
"content" : "我叫张三,今年28岁,爱好踢球。\n提取上面内容中的信息,将提取的信息封装成JSON格式,JSON对象必须符合RFC8259标准,不得有偏差。"
} ],
"temperature" : 0.7,
"stream" : false,
"max_tokens" : 50,
"response_format" : {
"type" : "json_object"
}
}
15:42:24.581 [main] INFO dev.langchain4j.http.client.log.LoggingHttpClient -- HTTP response:
- status code: 200
- headers: [:status: 200], [access-control-allow-headers: *], [access-control-allow-methods: POST, GET, OPTIONS, DELETE,PUT], [access-control-allow-origin: *], [access-control-max-age: 3600], [alt-svc: h3=":443"; ma=86400], [cf-cache-status: DYNAMIC], [cf-ray: 9c804a674c16d595-AMS], [content-length: 603], [content-type: application/json;charset=UTF-8], [date: Tue, 03 Feb 2026 07:42:24 GMT], [nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}], [report-to: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=3ObldzXKvpsdbeeTvkmGbtGc7loyPPslzFmpxL1uf67Bm0LLMvQeeSdQCYKvGZDLuIRwewu5c1lgOMPANXXE6JgGaIMH3651hyKP"}]}], [server: cloudflare], [server-timing: [cfCacheStatus;desc="DYNAMIC", cfEdge;dur=8,cfOrigin;dur=8297]], [x-oneapi-request-id: 20260203154216291666205KOLV6Qi7]
- body: {
"id": "chatcmpl-R4zY8SlG7jp8eO29lEJO1EykBMQ2a",
"object": "chat.completion",
"created": 1770104543,
"model": "gpt-3.5-turbo-0613",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "```json\n{\n \"name\": \"张三\",\n \"age\": 28,\n \"hobbies\": [\"踢球\"]\n}\n```"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 68,
"completion_tokens": 32,
"total_tokens": 100
},
"system_fingerprint": "fp_b28b39ffa8"
}
```json
{
"name": "张三",
"age": 28,
"hobbies": ["踢球"]
}
```
Process finished with exit code 0更多 LangChain4j 知识请阅读后续教程……