박종훈 기술블로그

Spring AI 사용을 위한 AI 핵심 컨셉 (1) - AI, 프롬프트, 템플릿, 벡터, 임베딩

아래 글은 Spring AI 의 doc 을 번역하여 옮긴 것입니다.

원문 : AI Concepts


AI 이해하기

이 문서에서는 Spring AI 에서 다루는 핵심 개념들을 설명합니다. Spring AI가 어떻게 구현되었는지 이해하려면 이 문서를 자세히 읽어보시기 바랍니다.

AI 모델

AI 모델은 정보를 처리하고 생성하도록 설계된 알고리즘으로, 종종 인간의 인지 기능을 모방합니다. 대규모 데이터 셋에서 패턴과 인사이트를 학습함으로써 예측, 텍스트, 이미지 또는 그 외의 결과물을 만들어 산업 전반의 다양한 애플리케이션을 향상시킬 수 있습니다.

AI 모델에는 다양한 유형이 있으며, 사용 사례에 따라 적합한 모델이 있습니다. 많은 모델과 회사들에서 다양한 입력 및 출력을 제공합니다.

ChatGPT는 텍스트 입력 및 출력을 통해 사용자의 마음을 사로잡았습니다. ChatGPT 이전에는 많은 사람들이 미드저니(Midjourney)와 스테이블 디퓨전(Stable Diffusion)과 같은 텍스트-이미지 생성 모델에 마음을 사로잡혔습니다.

아래 표는 입력 및 출력 유형에 따라 여러 모델을 분류한 것입니다:

spring-ai-concepts-model-types

현재 Spring AI는 입력과 출력을 언어, 이미지, 오디오로 처리하는 모델을 지원합니다. 위 표의 마지막 줄은 임베딩 텍스트를 나타냅니다. 텍스트를 입력으로 받아들이고 숫자를 출력하는데 이는 AI 모델 내부에서 사용되는 내부 데이터 구조를 나타냅니다. Spring AI는 고급 사용 사례를 지원하기 위해 임베딩을 지원합니다.

GPT와 같은 모델의 차별점은 사전 학습(Pre-trained)된 상태로 제공된다는 점입니다. 이 특성 덕분에 광범위한 기계 학습이나 모델 훈련에 대한 깊은 이해가 없어도 일반 개발자들이 쉽게 사용할 수 있습니다.

프롬프트 (Prompts)

프롬프트는 AI 모델이 특정 출력을 생성하도록 유도하는 언어 기반 입력의 기초가 됩니다. ChatGPT에 익숙한 사람들에게는 프롬프트가 API로 전송되는 입력창에 입력된 텍스트 라고 생각할 수도 있습니다. 그러나 프롬프트에는 그 이상의 의미가 담겨 있습니다. 많은 AI 모델에서 프롬프트 텍스트는 단순한 문자열이 아닙니다.

ChatGPT의 API에는 프롬프트 내에 여러 개의 텍스트 입력이 있으며 각 텍스트 입력에는 역할이 할당됩니다. 예를 들어, 모델에 작동 방법을 알려주고 어떻게 상호 작용 할지에 대한 컨텍스트를 설정하는 시스템 역할이 있습니다. 또한 일반적으로 사용자의 입력인 사용자 역할도 있습니다.

효과적인 프롬프트를 만드는 것은 예술이자 과학입니다. ChatGPT는 사람 간의 대화를 위해 설계되었습니다. SQL과 같은 언어를 사용하여 질문을 하는 것과는 상당히 다릅니다. 다른 사람과 대화하는 것처럼 AI 모델과 대화해야 합니다.

이러한 상호 작용 방식의 중요성으로 ‘프롬프트 엔지니어링’ 이라는 용어가 하나의 학문으로 등장했습니다. 프롬프트의 효과를 개선하는 기법들이 급성장하고 있습니다. 프롬프트를 작성하는 데 시간을 투자하면 결과물이 크게 향상될 수 있습니다.

프롬프트를 공유하는 것은 관행이 되었으며, 프롬프트에 대한 학술 연구도 활발하게 진행되고 있습니다. 효과적인 프롬프트를 만드는 것이 반직관적일 수 있다는 것을 보여주는 최근 연구 논문이 있습니다. 이 논문에 따르면 가장 효과적인 프롬프트 중 하나는 “심호흡을 하고 이 작업을 단계별로 진행하세요.(Take a deep breath and work on this step by step.)” 라는 문구로 시작하는 것으로 나타났습니다. 이러한 예시는 언어가 왜 중요한지를 보여줍니다. 최신 버전들은 물론이고, 우리는 ChatGPT 3.5와 같은 이전 버전의 기술을 가장 효과적으로 사용하는 방법을 아직 완전히 이해하지 못했습니다.

프롬프트 템플릿 (Prompt Templates)

효과적인 프롬프트를 만들려면 요청의 컨텍스트를 설정하고 요청의 일부를 사용자 입력에 맞는 값으로 대체해야 합니다.

Spring AI는 신속한 생성 및 관리를 위해 기존의 텍스트 기반 템플릿 엔진인 오픈소스 라이브러리 StringTemplate를 사용합니다.

예를들어,간단한 프롬프트 템플릿을 살펴보겠습니다

Tell me a {adjective} joke about {content}.

Spring AI에서 프롬프트 템플릿은 Spring MVC 아키텍처의 “View”에 비유될 수 있습니다. 템플릿 내의 플레이스 홀더(placeholders)를 채우기 위해 모델 객체(일반적으로 java.util.Map)가 제공됩니다. 렌더링된 문자열은 AI 모델에 제공되는 프롬프트의 내용이 됩니다.

프롬프트의 데이터 형식은 많이 바뀌어 왔습니다. 처음에는 단순한 문자열로 시작했지만, 이제 프롬프트는 여러 메시지를 포함하도록 발전했습니다. 각 메시지의 각 문자열은 모델의 고유한 역할을 나타냅니다.

임베딩 (Embeddings)

임베딩은 텍스트를 숫자 배열이나 벡터로 변환하여 AI 모델이 언어 데이터를 처리하고 해석할 수 있게 해줍니다. 텍스트에서 숫자로의 변환은 AI가 인간의 언어와 상호작용하고 이해하는 방식의 핵심 요소입니다.

벡터 : 크기와 방향을 함께 갖는 양 (역자 주)

spring-ai-embeddings

Java 개발자로서 AI을 처음 접한다면, 벡터 표현의 복잡한 수학 이론이나 구현 방식까지 완벽하게 이해할 필요는 없습니다. 애플리케이션에 AI 기능을 통합할 때는 AI 시스템 내에서의 역할과 기능에 대한 기본적인 이해만 있으면 충분합니다.

임베딩은 검색 증강 생성(RAG) 패턴과 같은 실제 응용 분야에서 특히 중요한 역할을 합니다. 임베딩을 사용하면 유클리드 기하학의 2차원 공간과 유사하지만 더 높은 차원의 의미 공간(semantic space)상의 점으로 표현할 수 있습니다.

의미공간 : semantic space wiki 데이터 간의 관계를 나타내는 추상적인 공간 정도로 이해하면 될 것 같다. (역자 주)

유클리드 기하학에서 평면상의 점들이 좌표에 따라 가깝거나 먼 것처럼, 의미 공간에서는 점들의 근접성이 의미의 유사성을 반영합니다. 그래프에서 점들이 서로 가까이 있는 것처럼, 비슷한 주제에 대한 문장은 이 다차원 공간에서 더 가깝게 배치됩니다. 이러한 근접성(proximity)은 텍스트 분류, 의미론적 검색, 심지어 제품 추천과 같은 작업에 도움이 되는데, AI가 확장된 의미론적 환경(expanded semantic landscape)에서의 ‘위치’를 기반으로 관련 개념을 식별하고 그룹화할 수 있게 해주기 때문입니다.

이 의미 공간을 벡터로 생각할 수 있습니다.


다음 글에 이어서.

Spring AI 사용을 위한 AI 핵심 컨셉 (2) - 토큰, 구조화된 출력, 모델 튜닝, 함수 호출, RAG, 평가