Spring AI:Chat client 超时时间设置

原文链接Spring AI:Chat client 超时时间设置

!TIP\] 背景:在一次正常的跟 AI 模型交互的过程中,比如说 call 调用,会使用 RestClient 类发起 API 请求,我们希望自主控制 RestClient 的连接时间、请求时间

示例代码可见:spring-ai-tutorial 仓库的 chat 目录下的 chat-setting 模块

AI 模型调用使用的 RestClient 的链路如下,最终定位到提供一个 ClientHttpRequestFactorySettings 的 Bean 即可

首先看到,AI 模型的调用方 RestClient 是由 RestClient.Builder restClientBuilder 传递

OpenAiChatAutoConfiguration 类实例化 OpenAiApi 类,并导入 RestClient.Builder restClientBuilder

再往上溯源 RestClientAutoConfiguration 实际提供 RestClient.Builder,在这里通过 restClientBuilderConfigurer 方法对 RestClient.Builder 进行配置

实际是在 ClientHttpRequestFactorySettings 类中设置 connectTimeout、readTimeout

也就是说我们只需要新增一个 ClientHttpRequestFactorySettings 的 Bean 类即可

java 复制代码
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.http.client.ClientHttpRequestFactorySettings;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.time.Duration;

@Configuration
public class HTTPConfig {

    @Value("${http.client.connect-timeout:60s}")
    private Duration connectTimeout;

    @Value("${http.client.read-timeout:60s}")
    private Duration readTimeout;

    @Bean
    public ClientHttpRequestFactorySettings clientHttpRequestFactorySettings() {
        return new ClientHttpRequestFactorySettings(ClientHttpRequestFactorySettings.Redirects._FOLLOW_WHEN_POSSIBLE_, connectTimeout,
                readTimeout, null);
    }
}

修改之后的 readTimeout、connectTimeout 都变为我们设置 1 分钟了

往期资料

Spring AI + Spring Ai Aliabba系统化学习资料

本教程将采用2025年5月20日正式的GA版,给出如下内容

  1. 核心功能模块的快速上手教程
  2. 核心功能模块的源码级解读
  3. Spring ai alibaba增强的快速上手教程 + 源码级解读

版本:

  • JDK21
  • SpringBoot3.4.5
  • SpringAI 1.0.0
  • SpringAI Alibaba 跟着最新

免费渠道:

  1. 为Spring Ai Alibaba开源社区解决解决有效的issue or 提供有价值的PR,可免费获取上述教程
  2. 往届微信推文

收费服务:收费69.9元

  1. 飞书在线云文档
  2. Spring AI会员群教程代码答疑

学习交流圈

你好,我是影子,曾先后在🐻、新能源、老铁就职,兼任Spring AI Alibaba开源社区的Committer。目前新建了一个交流群,一个人走得快,一群人走得远,另外,本人长期维护一套飞书云文档笔记,涵盖后端、大数据系统化的面试资料,可私信免费获取

相关推荐
v***88566 小时前
Springboot项目:使用MockMvc测试get和post接口(含单个和多个请求参数场景)
java·spring boot·后端
IMPYLH6 小时前
Lua 的 require 函数
java·开发语言·笔记·后端·junit·lua
爱找乐子的李寻欢6 小时前
线上批量导出 1000 个文件触发 OOM?扒开代码看本质,我是这样根治的
后端
大鸡腿同学7 小时前
大量频繁记录有效击球方式
后端
稚辉君7 小时前
Gemini永久会员 01不等概率随机到01等概率随机
后端
z***56567 小时前
springboot整合mybatis-plus(保姆教学) 及搭建项目
spring boot·后端·mybatis
q***98528 小时前
Spring Boot:Java开发的神奇加速器(二)
java·spring boot·后端
小蒜学长8 小时前
基于spring boot的汽车4s店管理系统(代码+数据库+LW)
java·数据库·spring boot·后端·汽车
q***42058 小时前
Spring Data 什么是Spring Data 理解
java·后端·spring
一 乐8 小时前
餐厅管理智能点餐系统|基于java+ Springboot的餐厅管理系统(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·后端