A.I, Spring

Spring AI: Spring Boot와 LLM(대형 언어 모델)의 연동

Spring AI

안녕하세요, Devloo 입니다 !! (_ _). 최근 저는 대형 언어 모델(LLM) 응용에 관심이 많았는데요, 이번에 여러분께 흥미로운 소식을 전하고자 합니다. 바로 Spring AI 입니다. Spring AI 는 Spring Boot가 LLM을 연동하여 어플리케이션을 만드는 것을 돕습니다. 오늘은 Spring AI와 Ollama 로컬 모델을 어떻게 통합할 수 있는지 자세히 설명해 드리겠습니다. AI와 Spring Boot의 연동을 통해 새로운 가능성을 발견해 봅시다 🙂

Spring AI

Spring AI, Spring Initializr
Spring AI, Spring Initializr에 등록됨

2024년 2월 29일, Spring AI가 공식적으로 Spring Initializr에 등록되었습니다. 이를 통해 AI와의 상호작용이 더욱 쉬워져 자바 프로젝트에 LLM 모델을 통합하는 데 필요한 학습 시간이 줄어듭니다. 이제 start.spring.io에서 쉽게 설정하고 사용할 수 있습니다.

Spring AI는 인공지능 엔지니어링을 위한 애플리케이션 프레임워크로, 이식성과 모듈형 디자인 등 Spring 생태계의 디자인 원칙을 AI 분야에 적용하여 POJO를 AI 애플리케이션의 구성 요소로 사용하는 것을 목표로 합니다.

주요 기능

Spring AI는 다양한 AI 제공자 간의 상호작용을 지원하는 이식 가능한 API를 제공하며, 대화, 텍스트-이미지, 임베딩 모델을 포함합니다. 동기 및 스트림 API 옵션을 지원하며, 특정 모델에 접근하기 위한 매개변수 설정도 가능합니다.

지원되는 대화 모델:

  • OpenAI
  • Azure Open AI
  • Amazon Bedrock
  • Anthropic’s Claude
  • Cohere’s Command
  • AI21 Labs’ Jurassic-2
  • Meta’s LLama 2
  • Amazon’s Titan
  • Google Vertex AI
  • HuggingFace — 여러 모델 포함 (예: Llama2)
  • Ollama — GPU 없이 로컬에서 AI 모델 실행 지원

지원되는 텍스트-이미지 모델:

  • OpenAI with DALL-E
  • StabilityAI

지원되는 벡터 모델:

  • OpenAI
  • Azure OpenAI
  • Ollama
  • ONNX
  • PostgresML
  • Bedrock Cohere
  • Bedrock Titan
  • Google VertexAI

공식 문서: spring.io/projects/spring-ai

빠른 시작

IDEA를 사용하여 필요한 AI 모델 의존성을 선택해 새 프로젝트를 빠르게 시작할 수 있습니다. 여기서는 Ollama 모델을 예로 들어보겠습니다:

Spring AI 모델 선택

Ollama

Ollama는 GPU 자원 없이도 로컬 컴퓨터에서 대형 모델을 단 한 번의 클릭으로 구축할 수 있게 해주며, 콘솔 및 RestfulAPI를 통해 빠르게 테스트하고 통합할 수 있습니다.

Ollama가 지원하는 모델: ollama.com/library

Ollama가 지원하는 모델
  • Gemma는 Google Meta에서 최근 출시한 모델입니다.
  • Llama2 모델은 중국어를 잘 지원하지 않지만, Gemma 모델은 중국어에 더 친숙합니다.

의존성 추가

참고 : Spring AI 관련 의존성은 Maven 공식 저장소에 없으므로 Spring의 저장소를 설정해야 합니다.

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.ai</groupId>
        <artifactId>spring-ai-ollama-spring-boot-starter</artifactId>
    </dependency>
</dependencies>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-bom</artifactId>
            <version>${spring-ai.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

Ollama 모델 실행

로컬 컴퓨터 콘솔에서 ollama run gemma:2b 명령을 실행하세요 (여기서는 Gemma 모델을 사용합니다).

Ollama 모델 실행

첫 실행 시 모델 파일을 다운로드합니다 (약 3GB, 시간이 걸릴 수 있음). 모델 리소스를 다운로드한 후 모델이 자동으로 시작되며, 콘솔에서 모델을 테스트하고 상호작용할 수 있습니다.

Ollama 모델 구성

프로젝트의 application.yml 구성 파일에 다음을 추가합니다:

spring:
  ai:
    ollama:
      base-url: http://localhost:11434
      chat:
        model: gemma:2b

테스트

@Test
void contextLoads() {
    String message = """
                Who is Donald Trump?                               
            """;
    System.out.println(chatClient.call(message));
}
Spring AI : Spring Boot Ollama 모델 실행

스트림을 통한 구현

@Test
void streamChat() throws ExecutionException, InterruptedException {
    // 비동기 함수를 만들어 테스트 함수를 수동으로 종료
    CompletableFuture<Void> future = new CompletableFuture<>();

    String message = """
            year-end work summary report
            """;
    PromptTemplate promptTemplate = new PromptTemplate("""
            You are a Java development engineer, and you are good at writing the company’s year-end work summary report.
            Write a 100-word summary report based on: {message} scenario
            """);
    Prompt prompt = promptTemplate.create(Map.of("message", message));
    chatClient.stream(prompt).subscribe(
            chatResponse -> {
                System.out.println("response: " + chatResponse.getResult().getOutput().getContent());
            },
            throwable -> {
                System.err.println("err: " + throwable.getMessage());
            },
            () -> {
                System.out.println("complete~!");
                // 함수 종료
                future.complete(null);
            }
    );
    future.get();
}

지금까지 Spring AI를 활용하여 Spring Boot에서 LLM 모델을 작동해 보았습니다.

끝까지 읽어주셔서 정말 감사합니다.

궁금한 점이 있으시면 편하게 댓글 남겨주세요 !! (_ _)

Written by 개발자서동우
안녕하세요! 저는 기술 분야에서 활동 중인 개발자 서동우입니다. 명품 플랫폼 (주)트렌비의 창업 멤버이자 CTO로 활동했으며, AI 기술회사 (주)헤드리스의 공동 창업자이자 CTO로서 역할을 수행했습니다. 다양한 스타트업에서 일하며 회사의 성장과 더불어 비즈니스 상황에 맞는 기술 선택, 개발팀 구성 및 문화 정착에 깊은 경험을 쌓았습니다. 개발 관련 고민은 언제든지 편하게 연락주세요 :) https://linktr.ee/dannyseo Profile

Leave a Reply

Your email address will not be published. Required fields are marked *