[스프링캠프 2024] Spring AI: LLM에도 봄이 찾아오다

아래 글은 [스프링캠프 2024] Spring AI : LLM에도 봄이 찾아오다 (황민호)님의 발표를 듣고 정리한 글입니다.

 

 

1. 발표자 소개

황민호 개발자님은 카카오에서 10년차 개발자로서 다음 클라우드, 다음 검색, 모먼트 광고 플랫폼, 오픈소스 플랫폼 등 다양한 프로젝트를 스프링 부트로 개발해왔습니다. 현재는 AI 교육 자문과 CTO 기술 전략 스텝 역할을 수행하고 있으며, ChatGPT 등장 이후 AI 관련 발표를 활발히 진행하고 있습니다.

 

2. 생성형 AI의 역사와 현재

생성형 AI는 단순한 객체 인식 기술을 넘어, 텍스트, 이미지, 사운드 등 다양한 형태로 정보를 생성할 수 있는 능력을 갖추게 되었습니다. 기존 객체 인식 모델인 YOLO와 같은 딥러닝 모델은 특정 객체를 인식하는 데 주력했지만, 생성형 AI는 주어진 텍스트 입력에 맞춰 이미지나 동영상, 코드까지도 생성할 수 있게 되었습니다. 이를 통해 생성형 AI가 우리의 일상에 얼마나 깊숙이 스며들고 있는지 확인할 수 있습니다.

 

 

기존의 딥러닝 AI

  • 입력: 텍스트, 이미지, 사운드
  • 출력: 텍스트

생성형 AI

  • 입력: 텍스트
  • 출력: 텍스트, 이미지, 사운드, 비디오, 코드 등
  • 멀티모달도 가질 수 있어 입력 값으로 이미지, 사운드, 코드 등이 들어갈 수 있다.

 

3. 대표적인 생성형 AI 모델 소개

 

생성형 AI의 대표 모델로는 ChatGPT, Gemini, Claude가 있으며, 각각의 특성과 용도가 다릅니다.

 

특히 파라미터 크기가 성능에 중요한 영향을 미치는데, ChatGPT의 최신 버전 GPT-4는 이전 모델들에 비해 더 복잡하고 깊이 있는 질문에도 뛰어난 성능을 보여줍니다. 이러한 차이는 파라미터 수가 많을수록, 즉 AI 모델이 더욱 큰 데이터 집합을 학습할수록 더 복잡한 추론을 가능하게 한다는 것을 보여줍니다. 

 

파라미터 크기와 성능 관계

  • 80억 개: 기본적인 질문/답변
  • 620억 개: 문서 요약, 번역, 상식적 추론
  • 5,400억 개: 코딩, 패턴 파악, 농담
  • GPT-4: 약 1.7조 개 (비공식)

 

4. 오픈 소스 모델의 성장과 발전

 

최근 오픈 소스 AI 모델들의 성장이 가파르게 증가하며 독점적인 모델들과의 성능 격차가 점점 줄어들고 있습니다. 이제는 고가의 상용 모델뿐만 아니라, 다양한 오픈 소스 모델들도 AI 프로젝트에 유의미하게 활용할 수 있게 되었으며, 이를 통해 기업이나 개인 개발자들이 선택할 수 있는 옵션이 더욱 넓어졌습니다.

 

5. 개발자가 알아야 할 AI 핵심 개념

개발자가 알아야 할 AI 핵심 개념 9가지를 추려 봤습니다.

 

5.1. Models

5.1.1. 모델 액세스 방식

AI 모델을 사용할 때는 API, 인퍼런스 엔진, 로컬 실행이라는 세 가지 주요 액세스 방식이 있습니다. 각 방식에는 장단점과 고려사항이 존재합니다.

  • API 방식
    • 특징: 가장 많이 쓰이는 방식입니다. GPT, Gemini, Claude와 같은 AI 모델들은 클라우드 기반 API를 통해 접근할 수 있습니다. API를 활용하면 쉽게 모델을 호출하고 결과를 받을 수 있습니다.
    • 장점: 클라우드에서 제공되기 때문에 별도의 하드웨어 설치나 인프라 관리가 필요 없으며, 모델이 업데이트될 때 자동으로 최신 성능을 사용할 수 있습니다.
    • 단점: API 사용량에 따라 토큰 단위로 과금이 발생하므로, 비용이 급증할 수 있습니다. 특히 대규모 데이터를 처리할 때는 과금 구조를 주의해야 합니다.
  • 인퍼런스 엔진
    • 특징: vLLM과 같은 오픈소스 인퍼런스 엔진은 AI 모델을 로컬 서버나 사내 인프라에 배포하여 자체적으로 운영할 수 있게 해줍니다.
    • 장점: 데이터를 외부로 전송하지 않아도 되므로 보안성이 강화됩니다. 또한 대규모 데이터 처리 시 네트워크 비용을 줄일 수 있습니다.
    • 단점: 고성능 하드웨어가 필요하며, 특히 대형 언어 모델일수록 연산 비용이 증가합니다. 운영과 유지 보수를 위한 인프라와 전문 지식이 필요하므로 초기 구축 비용이 높을 수 있습니다.
    • 활용 예: 사내 구축용으로 사용할 때 보안이 중요한 데이터를 자체적으로 관리할 수 있습니다.
  • 로컬 실행
    • 특징: Ollama 모델과 같은 일부 AI 모델은 로컬 환경에서도 실행 가능합니다. 로컬 실행은 사내 데이터 보안이 중요한 프로젝트나 비용 절감을 원하는 경우 유용합니다.
    • 장점: 로컬에서 직접 모델을 실행하기 때문에 데이터 유출 위험이 줄어들고 API 비용을 절감할 수 있습니다.
    • 단점: 대규모 모델일수록 고성능 GPU가 필요하며, 예를 들어 Ollama 3 모델을 실행하려면 높은 자원의 GPU가 드는데, 이것을 돈으로 환산하면 약 8000만원이 듭니다. 그래서 모델 성능을 낮추는 양자화 작업을 통해 메모리 사용량을 줄여서 사용해야 합니다.

 

5.2. AI 프롬프트

 

원하는 결과물을 얻기 위해서 좀 더 자세한 프롬프트를 작성해야 합니다.

 

5.3. 프롬프트 엔지니어링

 

특히 데이터 컨텍스트를 추가해서 프롬프트를 입력 해주면 할루시네이션 현상을 최소화 할 수 있다고 합니다.

 

 

5.4. Tokenizer

 

AI 모델에서 텍스트를 이해하기 위해 사용하는 토크나이저는, 입력 텍스트를 일정한 단위로 분리해 모델이 처리할 수 있게 합니다. 특히 ChatGPT와 같은 AI 모델은 토큰 단위로 과금이 이루어지기 때문에, 프롬프트 작성 시 비용 효율성 또한 고려해야 합니다. 최근에는 GPT 모델들이 효율적으로 토큰 수를 줄이는 방식으로 비용 절감이 가능해지고 있습니다.

 

5.5. Embedding

 

임베딩은 데이터를 벡터 형태로 변환하여 의미와 구조를 보존하는 과정입니다. 벡터 데이터베이스는 이러한 벡터 정보를 활용해 질문과 유사한 의미의 답변을 효과적으로 찾을 수 있습니다. 이를 통해 사용자는 질문에 대한 답변을 더 정확하게 받을 수 있으며, 특히 AI 검색 기능에서 유용하게 활용되고 있습니다.

 

5.6. RAG(Retrieval Augmented Generation)

 

RAG의 개념은 오픈북 테스트와 비슷합니다. 전체 데이터를 임베딩하여 데이터베이스에 저장한 뒤, 질문이 들어오면 임베딩된 데이터와 유사한 답변을 찾습니다. 마치 시험 전 중요 내용을 마킹한 책을 참고해 문제에 답하는 것처럼, AI도 필요한 정보와 학습된 데이터를 융합하여 최종 답변을 생성합니다.

대표적인 예시는 ChatGPT 3.5와 ChatCPT 4에게 해당 질문을 했을 때를 들 수 있습니다.

 

 

GPT-3.5에게 "강감찬 장군이 갤럭시 폰으로 어떤 업무를 했나요?"라는 질문을 하면 갤럭시 폰으로 전략을 세웠다고 엉뚱한 답변을 할 수 있습니다. 그러나 GPT-4는 이런 할루시네이션을 줄이고, 강감찬 장군과 갤럭시 폰이 같은 시대가 아님을 알려주는 정확한 답변을 제공합니다.

 

할루시네이션이 생기는 이유는 이 모델이 갖고 있는 지식이 적다는 것을 의미하기도 합니다.

 

이를 해결하기 위해 RAG와 같은 방식을 사용해 질문에 대한 정보를 추가로 주면, GPT-3.5도 GPT-4에 가까운 답변을 제공할 수 있습니다.

 

 

6. Spring AI의 특징

파이썬은 LangChain과 Llama Index와 같은 프레임워크들이 등장 했습니다.

이런 배경으로 Spring AI도 생성 AI 애플리케이션이 많은 프로그래밍 언어에서 보편화 될 것이라는 믿음으로 시작되었습니다.

 

 

스프링 AI는 주요 AI 모델과 벡터 데이터베이스를 지원합니다. API와 모델들이 다양하게 존재하고 스펙이 다르기 때문에, 스프링 AI는 이를 추상화하여 통합적인 접근을 제공합니다. 또한, Function Calling과 같은 기능을 통해 고급 사용이 가능하며, 이를 스프링 부트 스타터로 쉽게 패키징하여 사용할 수 있습니다.

 

Spring의 경우에는 flux를 사용하여 구현되어있습니다.

지원하는 모델들

 

7. Spring AI 구성 요소 및 Flow

현재는 많은 변경들이 일어나고 있어서 실무에서 쓰기에는 불안정해서 토이 프로젝트 정도는 충분히 해볼 것이라 생각됩니다.

 

Spring AI의 구성 요소와 전체 흐름은 다음 단계로 요약할 수 있습니다.

  1. 채팅 옵션 초기 값으로 Client를 생성: 사용자 입력 및 프롬프트 구성
    • 사용자가 텍스트, 이미지, 오디오와 같은 다양한 입력 형식으로 AI 서비스에 요청을 합니다.
    • 이 입력 내용은 프롬프트에 담겨 클라이언트로 전달됩니다.
  2. 처리에 필요한 데이터를 포함한 지시사항 생성: 프롬프트 처리 및 설정값 병합
    • Spring AI 클라이언트는 전달받은 프롬프트를 내부적으로 변환하거나 필요한 설정값들을 병합하여 최적화된 요청을 만듭니다.
    • 이때, 여러 모델을 지원하므로 모델마다 다를 수 있는 요청 형식을 통일해 관리하기 위해 추상화된 형태로 프롬프트를 처리합니다.
  3. 실행 시점에 사용할 수 있는 채팅 옵션 제공: 초기 설정 및 클라이언트 생성
    • Spring Boot의 초기 설정값으로 클라이언트가 생성됩니다.
    • 기본 설정 외에도 런타임 시점에서 들어오는 추가 옵션들을 반영해, 사용자에게 최적화된 경험을 제공합니다.
  4. 지시사항을 AI 모델이 이해할 수 있는 네이티브 요청으로 변환
    • 프롬프트와 설정값을 기반으로 AI 모델이 이해할 수 있는 네이티브 요청이 생성됩니다.
    • 런타임에 새로 반영된 옵션 값들이 우선 순위에 따라 오버라이딩되며, 최종 요청이 완성됩니다.
  5. Client가 런타임 채팅 옵션으로 오버라이드
  6. AI 모델 호출 및 응답 처리
    • 완성된 네이티브 요청을 통해 AI 모델이 호출됩니다.
    • AI 모델은 요청을 처리한 결과를 Spring AI로 다시 전달하며, 이 결과는 리스폰스 객체에 저장됩니다.
  7. 반환 과정: 리스폰스 객체와 메타데이터
    • 리스폰스 객체에는 AI 모델의 결과뿐 아니라, 메타데이터도 포함됩니다.
    • 예를 들어, OpenAI API를 호출한 경우 토큰 사용량, 레이트 리밋 정보 등이 메타데이터로 함께 제공됩니다.

 

8. Spring AI 사용하는 방법

 

 

개인적으로 AI가 가져온 가장 큰 기능이라고 생각.

 

 

 

API를 사용해서 개발 할 수도 있지만, 비용이 들기 때문에 로컬 LLM을 사용해서 개발 할 수 있도록 Ollama를 위한 의존성도 있습니다.

 


 

후에는 AI가 접목되어 있는 그런 프로그래밍 스킬을 가지고 있는 개발자들이 주목받을 거라고 생각합니다.

Spring AI 실습을 위해 최근 만들었던 로컬 LLM을 통한 코드 리뷰 봇의 경우 Spring AI와 함께 다시 도전해봐야겠다는 생각도 듭니다.