RAG(Retrieval-Augmented Generation)란?
LLM에 외부 지식 베이스를 연결하여 모델의 생성 능력과 사실 관계 파악 능력을 향상시키는 기술

외부에 있는 데이터를 전처리 과정을 통해 로드함
데이터를 적절한 길이로 분할하고, 텍스트가 가지고 있는 의미와 특성을 벡터화하는 임베딩 과정 수행
임베딩 결과 값들은 벡터DB에 저장되어, 사용자가 쿼리를 던지면 가장 적합한 답변을 벡터DB로부터 찾아 답변을 만들어냄
LLM이 가지고 있는 한계와 RAG의 등장
할루시네이션
생성형 AI가 정보를 출력하는 과정에서 발생하는 오류로, 허위 정보를 마치 '사실'인 것처럼 말하는 현상'
LLM은 기존의 학습된 데이터를 바탕으로 받은 질문에 가장 근접한 답변을 확률 계산을 통해 생성함.
이때, LLM이 잘못된 데이터를 학습하거나 학습되지 않은 부분에 대해서는 기존 학습 데이터에서 확률상 높은 답변을 생성하면서 잘못된 답변을 만들어낼 수 있음.
또한, 학습된 데이터의 진위 여부까지는 알지 못하는 LLM의 한계가 있음.
=> RAG를 통해서 할루시네이션 현상을 보완할 수 있음.
RAG가 주목받는 이유

한국 기업의 절반 정도가 AI를 도입 및 활용하는 매우 구체적인 계획을 가지고 있음.
LLM 모델에 기업 내부 데이터를 학습시킬 수 있는 RAG를 도입함으로써, 보다 높은 정확도의 답변을 생성할 수 있음.
내 휴가는 얼마나 남았어?
우리 회사 휴가 제도는 어떻게 돼?
RAG와 Fine tuning

RAG 구성 요소

RAG 동작 프로세스

Indexing
외부 데이터 준비
데이터 정제
데이터 청킹(chunking)
임베딩한 데이터를 벡터DB에 저장
Retrieval
사용자의 쿼리 이해
쿼리 벡터의 유사도 스코어 계산
DB에서 쿼리 벡터와 가장 높은 유사도를 가지는 Top-k를 검색 및 추출
Generation
결과값을 프롬프트에 맞춰 실제 최종 답변을 생성
RAG 구성 시 활용되는 프레임워크
LangChain
LLM 기반으로 복잡한 어플리케이션 구현 가능
다양한 모듈 제공
LlamaIndex
Retrieval과 Indexing에 초점이 맞춰져 있는 프레임워크
데이터로부터 보다 정확한 데이터를 추출해서 구성하고 싶다면 적합

Langchain이란?
대규모 언어 모델(LLM)을 기반으로 어플리케이션을 구축하기 위한 오픈 소스 프레임 워크

여러 개의 모듈로 구성되어 있는데, RAG, Agents, Extraction 등 어떤 작업을 할 것인지에 따라 원하는 모듈들을 조합하여 구성할 수 있음
Retrieval Augmented Generation
Retrieval > Prompt > Chat Model
Agents
Prompt > Model > Output Parser > Tools
Storage & Indexing
Document Loader > Text Splitter > Embeddings > Vector Store
Extraction
Document Loader > Prompt > Model > Output Parser
Langchain 주요 모듈


ChatPromptTemplates
from langchain_core.prompts import ChatPromptTemplate
chat_template = ChatPromptTemplate.from_messages(
[
("system", "You are a helpful AI bot. Your name is {name}."),
("human", "Hello, how are you doing?"),
("ai", "I'm doing well, thanks!"),
("human", "{user_input}"),
]
)
messages = chat_template.format_message(name="Bob", user_input="What is your name?")
Role 지정 (system, human, ai 등)
여러 개의 입력값을 받아서 하나의 반환값으로 결과값을 리턴
Role을 이용하여 언어 모델에 instruction이나 input 값을 넣을 수 있음.
Chat Model
Input, Output 챗 메시지를 만들어낼 수 있는 언어 모델을 의미
현재 랭체인에서는 많은 LLM 모델과 연동되어 있음

Output Parser
LLM의 응답값을 정형화된 데이터로 가공하고자 할 때 유용
예) StrOutputParser : 메시지의 content 속성을 추출하여 문자열 형태로 반환
Document Loader
from langchain_community.document_loaders import PyMuPDFLoader
loader = PyMuPDFLoader("example_data/layout-parser-paper.pdf"_
data = loader.load()
웹 페이지, PDF 파일, 데이터베이스 등 다양한 소스에서 문서를 불러올 수 있음.
불러온 문서 데이터를 부석하고 처리하여, 랭체인의 다른 모듈이나 알고리즘이 처리하기 쉬운 형태로 변환함. 불필요한 데이터를 제거하거나, 구조를 변경할 수도 있음.
대량의 문서 데이터를 효율적으로 관리하고, 필요할 때 쉽게 접근할 수 있도록 함. 이를 통해 검색 속도를 향상시키고, 전체 시스템의 성능을 높일 수 있음.
Text Splitter

위에서 문서를 로드하게 되면, 긴 텍스트를 chunk 단위로 쪼개는 작업을 수행
LLM 모델마다 input 값으로 받을 수 있는 토큰 길이에 제한이 있기 때문
모델이 텍스트의 문맥을 정확히 이해하기 위해서 필요함
Embedding
임베딩 모델은 인간의 언어를 기계가 이해할 수 있는 형식으로 변환

Vector Store
벡터 값을 기반으로 정보를 인덱싱하고 검색할 수 있는 데이터 저장소

Retrieval

사용자의 쿼리와 유사한 벡터를 뽑아내기 위해 Retreival 과정을 수행
AI 개발 플랫폼, CLOVA Studio


플레이그라운드
파라미터를 조정해 결과값 세부 설정
프롬프트를 입력해 원하는 형태 출력
조율한 값을 기반으로 API 생성
튜닝
기업 맞춤형 데이터로 모델을 학습
특화 모델 구축하여 AI 제작
작업 종류, 언어에 최적화하여 활용
익스플로러
AI 제작 작업에 활용할 도구 지원
임베딩 API 등 특화 모델 도구 제공
기존에 생성한 작업물 저장 및 공유
스킬 트레이너
모델에 외부 서비스 API 연결
특화 지식을 모델에 학습
최신 정보를 반영한 답변 제공
RAG 구성 시 활용되는 CLOVA Studio API
익스플로러 도구
Studio에서 유용하게 활용할 수 있는 특화 도구 및 API

플레이그라운드
프롬프트를 입력해 원하는 형태를 출력하고, 조율한 값을 기반으로 API 생성

Reference
