Spring AI 应用开发中设置访问 Ollama 的超时时间

使用 Spring AI 开发 AI 应用时,Ollama 通常在本地开发和测试时使用,用来在本地运行大模型。由于本地开发机器的资源限制,当使用 Ollama 运行较大的模型时,大模型给出响应的时间会比较长。Spring AI 提供的 OllamaChatModel 与 Ollama 服务器交互时,默认的超时时间是 30 秒。也就是说,如果 Ollama 服务器无法在 30 秒内给出响应,Spring AI 的 OllamaChatModel 会出错,导致整个请求出现错误。超时的错误在本地开发中经常会出现,严重影响开发的体验和效率。我们需要的是把超时时间延长一些。

14d1a92bad5e0daf0107546ecf685991.png

那怎么做呢?OllamaChatModel 使用 OllamaApi 与 Ollama 服务器交互。非流式接口使用的是 Spring 的 RestClient,流式接口使用的是 Spring 的 WebClient。OllamaApi 的构造器接受一个 RestClient.Builder 对象,用来创建 RestClient。所以,我们只需要提供一个自定义的 RestClient.Builder 对象即可。

这里需要一个 ClientHttpRequestFactory 实现,用来创建 HTTP 请求对象。不同的 ClientHttpRequestFactory 有各自独有的设置请求超时时间的方式。这里使用的是 JdkClientHttpRequestFactory,也就是使用 JDK 自带的 HttpClient 来发送请求,这样可以避免引入不必要的外部依赖。使用 setReadTimeout 方法来设置超时时间即可。在创建 OllamaApi 时,使用自定义的 RestClient.Builder 对象即可。

完整的 Spring 配置如下面所示。这里把超时时间设置为 3 分钟。

public class AppConfiguration {
    @Bean
    @Qualifier("OllamaRestClientBuilder")
    public RestClient.Builder ollamaRestClientBuilder() {
      JdkClientHttpRequestFactory requestFactory = new JdkClientHttpRequestFactory(
          HttpClient.newHttpClient());
      requestFactory.setReadTimeout(Duration.ofMinutes(3));
      return RestClient.builder().requestFactory(requestFactory);
    }
    
    @Bean
    public OllamaApi ollamaApi(OllamaConnectionDetails connectionDetails,
        @Qualifier("OllamaRestClientBuilder") RestClient.Builder restClientBuilder) {
      return new OllamaApi(connectionDetails.getBaseUrl(), restClientBuilder);
    }
}

添加了上述配置之后,OllamaChatModel 在与 Ollama 服务器交互时,会使用配置提供的超时时间,避免了频繁出现的超时错误。

上一篇:opencv—常用函数学习_“干货“_12


下一篇:JuiceFS缓存特性