AI Services:ChatRequestParameters 接口

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

ChatRequestParameters 的应用

你可以创建一个 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 知识请阅读后续教程……

  

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
其他应用
公众号