기술 투자/tech 트렌드

RAG(Retrieval-Augmented Generation)란 무엇이며, 어떻게 사용할까?

glasslego 2025. 3. 5. 15:00

최근 ChatGPT 등을 필두로 한 대규모 언어 모델(LLM)들의 등장으로 자연어 처리(NLP) 분야가 뜨겁습니다. 그러나 모델 자체만으로는 최신 정보나 전문적인 지식 베이스에 대한 답변이 부족할 수 있는데, 이를 보완하기 위해 RAG(Retrieval-Augmented Generation) 기법이 각광받고 있습니다. 이번 포스팅에서는 RAG의 개념을 쉽게 이해할 수 있도록 설명하고, 실제 사용 예시와 함께 관련 자료를 공유해 드리겠습니다.


1. RAG(Retrieval-Augmented Generation)란?

Retrieval-Augmented Generation은 대형 언어 모델(예: GPT, BERT 기반 모델 등)이 단순히 내부 파라미터에만 의존해서 답변을 생성하는 것이 아니라, 외부 지식 베이스나 문헌 등에서 관련 정보를 가져와(Retrieval) 답변에 반영(Generation)하는 기법입니다.

  • 왜 필요한가?
    • 대규모 언어 모델은 사전 학습 시점 이후에 발생한 최신 정보, 특정 전문 영역의 세부 지식 등을 잘 알지 못할 수 있습니다.
    • RAG를 활용하면, 실시간 정보대용량 문서(FAQ, DB) 등을 검색해 가장 관련성 높은 문서를 찾아오고, 이를 바탕으로 답변을 생성할 수 있어 보다 정확하고 풍부한 결과를 얻을 수 있습니다.
  • 작동 원리
    1. Query(사용자 질문)가 주어지면,
    2. Retrieval 단계에서 검색엔진(ES, Pinecone, Chroma 등) 또는 자체 구축한 문서 벡터 데이터베이스를 통해 **가장 유사한 문서(콘텐츠)**를 몇 개 추출합니다.
    3. Generation 단계에서 추출된 문서의 내용을 프로프트로 사용하여 대형 언어 모델이 최종 답변을 생성합니다.

2. 실제 사용 예시

예를 들어, 사내에 누적된 매뉴얼 문서고객문의 FAQ가 있는 상황에서 다음과 같은 질문을 받았다고 가정해봅시다.

"우리 회사의 제품 X를 처음 구매한 고객이 가장 궁금해하는 설치 방법은 무엇인가요?"

일반 ChatGPT(기본 지식만 있는 모델)에게 물어본다면, 학습범위를 벗어난 특정 매뉴얼의 내용까지 정밀하게 답하기 어려울 수 있습니다. 하지만 RAG 기법을 적용하면,

  1. 질문을 벡터화하여 문서 데이터베이스에서 가장 유사한 매뉴얼 문서와 FAQ 문서를 검색.
  2. 추출된 자료에서 설치 방법에 관한 핵심 내용을 모델에 전달.
  3. 모델은 해당 자료를 참고해 실제 제품 X 매뉴얼에 기반한 정확한 설치 방법을 생성.

이렇게 최신 또는 외부 문서를 근거로 답변하므로, 데이터의 신뢰도와 정확도가 크게 상승합니다.


3. 간단한 RAG 파이프라인 코드 예시

3.1 Hugging Face Transformers를 활용한 예시

Hugging Face는 RAG 모델을 지원하여, 외부 문서 검색과 결합한 생성이 가능합니다. 아래는 아주 단순화된 예시 코드입니다.
(실제로는 데이터베이스 세팅, 추가 설정 등이 필요하며, 공식 가이드를 참고하세요.)

!pip install transformers faiss-gpu  # faiss 등 백엔드 설치 필요 (환경에 맞춰 조절)

from transformers import RagTokenizer, RagRetriever, RagTokenForGeneration

# 1) 토크나이저 로드 (페이스북이 공개한 RAG 모델)
tokenizer = RagTokenizer.from_pretrained("facebook/rag-token-base")

# 2) Retriever 설정 
retriever = RagRetriever.from_pretrained(
    "facebook/rag-token-base",
    index_name="exact",  # 인덱스 종류에 따라 설정 (faiss 등)
    passages_path="path/to/your/knowledge_dataset"  # 이 부분에 실제 문서 경로 또는 DB 설정
)

# 3) RAG 모델 로드 (토큰 방식)
model = RagTokenForGeneration.from_pretrained("facebook/rag-token-base", retriever=retriever)

# 4) 질의 입력
query = "What is Python and how do I install it?"

# 5) 인코딩
input_ids = tokenizer(query, return_tensors="pt").input_ids

# 6) 답변 생성
outputs = model.generate(input_ids=input_ids, max_length=50)
generated_text = tokenizer.batch_decode(outputs, skip_special_tokens=True)

print(generated_text)
  • 실제로는 path/to/your/knowledge_dataset에 문서(FAQ, 매뉴얼 등)를 벡터 형태로 준비해야 합니다.
  • 이 예시는 페이스북의 RAG 논문에 기반한 공개 모델을 활용했으며, 최신 Transformers 라이브러리에서 지원합니다.

3.2 LangChain을 이용한 RAG 예시

LangChainLLM과 외부 리소스(데이터베이스, 툴 등)를 연결하는 인기 라이브러리입니다. 다음은 간단한 RAG 구성 예시 흐름입니다.

!pip install langchain openai chromadb

from langchain.document_loaders import TextLoader
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.chains import RetrievalQA
from langchain.llms import OpenAI

# 1) 문서 로드
loader = TextLoader("./my_docs/*.txt")
docs = loader.load()

# 2) 벡터 임베딩 & Vector Store 생성 (예: Chroma)
embeddings = OpenAIEmbeddings(openai_api_key="YOUR_API_KEY")
vectorstore = Chroma.from_documents(docs, embeddings)

# 3) RetrievalQA Chain 만들기
retriever = vectorstore.as_retriever(search_kwargs={"k": 3}) # 상위 3개 문서 검색
qa_chain = RetrievalQA.from_chain_type(
    llm=OpenAI(openai_api_key="YOUR_API_KEY", temperature=0),
    chain_type="stuff",
    retriever=retriever,
)

# 4) 질의
query = "제품 X의 설치 방법을 단계별로 알려줘"
answer = qa_chain.run(query)

print("Answer:", answer)

위 코드 역시 최소한의 구조만 보여주는 예시이므로, 실제로는 문서 전처리, 임베딩 세부 설정, 추가 파인튜닝 등을 더 해야 합니다.


4. RAG 관련 참고 링크

  1. RAG 논문(Facebook AI Research)
    • arXiv 논문
    • RAG의 개념 및 초기 연구 내용 확인 가능
  2. Hugging Face RAG 모델 문서
  3. LangChain GitHub
  4. Haystack

5. 요약

  • **RAG(Retrieval-Augmented Generation)**는 대형 언어 모델이 외부 지식 베이스를 동시에 활용해 정확도최신성을 높이도록 고안된 방식입니다.
  • 검색(Retrieval)을 통해 문서(FAQ, 매뉴얼, 논문 등)를 가져오고, 그 내용을 기반으로 모델이 답변을 생성(Generation)합니다.
  • Hugging Face, LangChain, Haystack 등 다양한 오픈소스 라이브러리를 통해 RAG 파이프라인을 빠르고 쉽게 구현할 수 있습니다.
  • 기업 FAQ 봇, 지식 베이스 Q&A, 고객지원 시스템 등에 폭넓게 적용이 가능하며, 최신 데이터와 구체적인 도메인 지식까지 활용할 수 있다는 점에서 큰 강점을 지닙니다.

정리하자면, RAG는 대형 언어 모델의 지식 한계를 극복하기 위한 혁신적인 접근 방식입니다. 해당 기술을 통해 최신 정보나 전문적인 지식 베이스를 활용하여, 보다 정확하고 세밀한 대화형 답변을 만들어낼 수 있습니다.
직접 구현해보면서 Retrieval(검색) 단계와 Generation(생성) 단계가 어떻게 맞물려 동작하는지 이해하시면, 사내 지식 Q&A 봇부터 연구 논문 요약 시스템까지 다양한 응용이 가능할 것입니다. RAG 기술을 도입해 더 풍부하고 신뢰도 높은 대화형 AI를 구축해보세요!