커스터마이즈 가능한 HTTP 클라이언트

커스터마이즈 가능한 HTTP 클라이언트

LLM 제공자 API를 호출할 때 사용하는 HTTP 클라이언트를 바꾸고 싶을 때가 있어요. 예컨대 커스텀 SSL 컨텍스트를 넣거나 타임아웃·연결 방식을 바꾸려는 경우죠. LangChain4j의 일부 모듈(현재 OpenAI와 Ollama)은 이런 커스터마이징을 지원해요.

출처: 공식문서 - Customizable HTTP Client

langchain4j-http-client 모듈은 HttpClient SPI를 구현하는데, 이걸로 해당 모듈들이 LLM 제공자의 REST API를 호출해요. 즉 기반이 되는 HTTP 클라이언트를 커스터마이즈할 수 있고, HttpClient SPI를 구현하는 한 어떤 HTTP 클라이언트든 통합할 수 있어요.

현재 다음과 같은 기본 제공 구현이 있어요.

  • JdkHttpClientlangchain4j-http-client-jdk 모듈 소속. 지원 모듈(예: langchain4j-open-ai)을 쓸 때 기본으로 사용돼요.
  • SpringRestClientlangchain4j-http-client-spring-boot4-restclient/langchain4j-http-client-spring-restclient 모듈 소속. 지원 모듈의 Spring Boot starter(예: langchain4j-open-ai-spring-boot4-starter/langchain4j-open-ai-spring-boot-starter)를 쓸 때 기본으로 사용돼요.
  • ApacheHttpClientlangchain4j-http-client-apache 모듈 소속.
  • OkHttpClientlangchain4j-http-client-okhttp 모듈 소속.

JDK HttpClient 커스터마이징

HttpClient.Builder httpClientBuilder = HttpClient.newBuilder()
        .sslContext(...);

JdkHttpClientBuilder jdkHttpClientBuilder = JdkHttpClient.builder()
        .httpClientBuilder(httpClientBuilder);

OpenAiChatModel model = OpenAiChatModel.builder()
        .httpClientBuilder(jdkHttpClientBuilder)
        .apiKey(System.getenv("OPENAI_API_KEY"))
        .modelName("gpt-4o-mini")
        .build();

:::note HttpClient 구현은 논블로킹 대응물도 제공할 수 있어요. 단일 응답용 executeAsync(...)와, 파싱된 server-sent events의 cold Flow.Publisherstream(...)이죠. 기본 제공되는 JDK·OkHttp·Apache 클라이언트는 둘 다 구현해요. Non-blocking and Reactive를 참고하세요. :::

Spring RestClient 커스터마이징

RestClient.Builder restClientBuilder = RestClient.builder()
        .requestFactory(new HttpComponentsClientHttpRequestFactory());

SpringRestClientBuilder springRestClientBuilder = SpringRestClient.builder()
        .restClientBuilder(restClientBuilder)
        .streamingRequestExecutor(new VirtualThreadTaskExecutor());

OpenAiChatModel model = OpenAiChatModel.builder()
        .httpClientBuilder(springRestClientBuilder)
        .apiKey(System.getenv("OPENAI_API_KEY"))
        .modelName("gpt-4o-mini")
        .build();

Apache HttpClient 커스터마이징

org.apache.hc.client5.http.impl.classic.HttpClientBuilder httpClientBuilder = org.apache.hc.client5.http.impl.classic.HttpClientBuilder.create();

ApacheHttpClientBuilder apacheHttpClientBuilder = ApacheHttpClient.builder()
        .httpClientBuilder(httpClientBuilder);

OpenAiChatModel model = OpenAiChatModel.builder()
        .httpClientBuilder(apacheHttpClientBuilder)
        .apiKey(System.getenv("OPENAI_API_KEY"))
        .modelName("gpt-4o-mini")
        .build();

더 알아보기