콘텐츠로 건너뛰기

RAG를 통한 LLM정확도 향상(3)

  • 테크

지난번 글에서 Vector Database를 활용해 데이터를 임베딩 벡터의 형태로 저장하고 쿼리문과 유사한 데이터를 검색하는 방법에 대해서 알아보았습니다.

이전 글 보기: RAG를 통한 LLM 정확도 향상(2)

일반적으로 인공지능 프레임워크는 주로 파이썬에 치중되어 있습니다. 이전 까지는 스프링 프로젝트에서 인공지능의 기능이 필요한 경우 별도의 파이썬 서버를 구축, 파이썬 서버로 요청을 보내는 방식을 사용했습니다.
기능의 구현을 위해 코드가 파편화 될수록 관리에 드는 비용이 증가하기 때문에 효율적인 프로젝트 진행을 위해서 할 수 있다면 통합된 프레임워크를 사용하는 것이 중요합니다.

이번 글에서는 Spring AI를 이용해 RAG 클라이언트를 스프링에 통합하는 방법에 대해서 알아보겠습니다.

Spring AI

SpringAI는 스프링을 위한 AI 프레임워크 입니다. Antropic, OpenAI와 같은 AI 모델 제공업체의 API를 이용해 AI 서비스를 개발할 수 있습니다.

spring ai

Spring AI는 아래와 같은 모델들을 지원합니다.

  • Chat Completion
  • Embedding
  • Text to Image
  • Audio Transcription
  • Text to Speech
  • Moderation

Ollama

Ollama는 오픈소스 LLM을 로컬 PC에서 실행할 수 있게 해주는 도구입니다. 다양한 모델을 지원하고 Modelfile을 이용해 커스텀 모델을 사용할 수 있습니다.

ollama

이번 글에서는 Spring AI와 Ollama를 사용한 LLM 어플리케이션 설정과 간단한 예시를 살펴 보겠습니다.

Requirements

  • ollama 설치
    • Ollama 사이트에 접속 후 운영체제에 맞는 프로그램을 설치합니다.
  • Spring AI 설치
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-ollama-spring-boot-starter</artifactId>
    <version>1.0.0-M4</version>
</dependency>
  • Config
# spring AI
spring:
  ai:
    ollama:
      base-url: http://localhost:11434
      # these are default values
      init:
        pull-model-strategy: never
        timeout: 5m
        max-retries: 0
        chat:
          include: true
          additional-models:
            - [ ]
      embedding:
        enabled: true
        options:
          model: mistral
      chat:
        enabled: true
        model: mistral
        options:
          format: json
          keep-alive: 5m
          temperature: 0.1
# chroma DB
spring:
  ai:
    vectorstore:
      chroma:
        client:
          host: http://localhost
          port: 8000
        initialize-schema: true # auto gen collection
        collection-name: springAi

Spring의 auto-config 기능을 통해 springAi와 ollama가 자동으로 설정됩니다.

Example

Ollama를 통해서 mistral chat, embedding 모델을 사용할 준비가 되었습니다.
간단한 예시를 통해서 Spring AI를 사용해 보겠습니다.

public List<Document> add(List<Document> documents) { 
    try { 
        vectorStore.add(documents); 
    } catch (Exception e) { 
        throw new RuntimeException(e); 
    } 
    return documents; 
}

public List<Document> search(String query) {
	SearchRequest searchRequest = SearchRequest.defaults()
				.withQuery(query);
	return vectorStore.similaritySearch(searchRequest);
}
  • Spring AI는 VectorStore 클래스와 Document 클래스를 이용해 임베딩 벡터를 관리합니다.
  • add 함수는 입력된 데이터를 Document 클래스로 매핑해 저장합니다.
  • search 함수는 사용자의 입력(쿼리문)을 받아 VectorDB에서 입력과 유사하다고 판단되는 데이터를 검색합니다.
검색 예시

이번 글에서는 기존의 파이썬 코드 기반의 LLM 어플리케이션에서 Spring AI를 활용한 스프링 어플리케이션으로의 통합 방법과 예시를 살펴 보았습니다. Spring AI를 이용한 코드의 통합은 파편화된 코드를 줄여 프로젝트 관리의 비용을 감소 시킬 수 있습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다