Ollama
那怎么做呢?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 服务器交互时,会使用配置提供的超时时间,避免了频繁出现的超时错误。