| [Glossary] RAG 완벽 정리 | 검색 증강 생성을 쉽게 이해하는 법 |
한 줄 요약: RAG(Retrieval-Augmented Generation)란, LLM이 답변을 생성하기 전에 외부 지식 데이터베이스를 실시간으로 검색해 참조하도록 하는 기술이다.
1. RAG란 무엇인가?
도서관에서 모든 책을 암기하려는 학생을 상상해 보세요. 아무리 뛰어난 학생이라도 수백만 권의 책을 완벽히 기억하기는 불가능합니다. 하지만 필요할 때 도서관에서 책을 꺼내 참고할 수 있다면 이야기가 달라집니다.
RAG(Retrieval-Augmented Generation)는 바로 이 원리를 LLM에 적용한 기술입니다. 2020년 Meta AI Research의 Lewis et al.이 발표한 논문 “Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks”에서 처음 제안되었으며, LLM의 고정된 지식(학습 데이터)의 한계를 외부 검색으로 보완합니다.
공식 정의 (Lewis et al., 2020):
“RAG combines parametric memory (LLM weights) with non-parametric memory (retrieved documents) to produce more accurate and up-to-date responses.”
핵심은 두 가지입니다:
- 파라메트릭 메모리: LLM이 학습으로 습득한 내부 지식
- 비파라메트릭 메모리: 실시간으로 검색되는 외부 문서
2. 핵심 개념 이해하기
RAG 파이프라인은 크게 두 단계로 나뉩니다.
인덱싱 단계 (Offline)
문서 수집 → 청크 분할 → 임베딩 생성 → 벡터 DB 저장
| 단계 | 설명 |
|---|---|
| 문서 수집 | PDF, 웹페이지, DB 등 소스 문서 수집 |
| 청크 분할 | 문서를 일정 크기(500~1000 토큰)로 분할 |
| 임베딩 생성 | 텍스트를 벡터(수치)로 변환 |
| 벡터 DB 저장 | Pinecone, Weaviate, Chroma 등에 저장 |
검색·생성 단계 (Online)
사용자 질문 → 임베딩 변환 → 유사도 검색 → 컨텍스트 주입 → LLM 생성
질문: "우리 회사 환불 정책은?"
↓ Embedding
[0.23, -0.41, 0.87, ...]
↓ Vector Search (Top-K)
관련 문서 3개 검색됨
↓ Prompt 구성
"다음 문서를 참고해 답변하세요:\n[문서1][문서2][문서3]\n질문: 우리 회사 환불 정책은?"
↓ LLM
"환불 정책에 따르면 구매 후 30일 이내..."
3. 실무 적용 예시
LangChain을 활용한 기본 RAG 구현 예시입니다.
from langchain_community.vectorstores import Chroma
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain.chains import RetrievalQA
from langchain_community.document_loaders import TextLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
# 1. 문서 로드 및 분할
loader = TextLoader("company_docs.txt", encoding="utf-8")
documents = loader.load()
splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
chunks = splitter.split_documents(documents)
# 2. 벡터 DB 생성
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(chunks, embeddings)
# 3. RAG 체인 구성
llm = ChatOpenAI(model="gpt-4o", temperature=0)
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
retriever=vectorstore.as_retriever(search_kwargs={"k": 3}),
return_source_documents=True
)
# 4. 질의
result = qa_chain.invoke({"query": "환불 정책이 어떻게 되나요?"})
print(result["result"])
4. RAG vs 유사 개념 비교
| 구분 | RAG | Fine-tuning | Prompt Engineering |
|---|---|---|---|
| 지식 업데이트 | 실시간 가능 | 재학습 필요 | 프롬프트에만 의존 |
| 비용 | 중간 | 높음 | 낮음 |
| 정확도 | 높음 (출처 근거) | 높음 (도메인 특화) | 낮음 |
| 최신 정보 | ✅ 반영 가능 | ❌ 학습 데이터 기준 | ❌ |
| 출처 추적 | ✅ 가능 | ❌ 어려움 | ❌ |
| 구현 복잡도 | 중간 | 높음 | 낮음 |
5. 마치며
RAG는 LLM의 고정된 지식 한계를 극복하는 가장 실용적인 방법입니다. 환각(Hallucination)을 줄이고, 최신 정보를 반영하며, 출처를 추적할 수 있다는 세 가지 강점이 기업 환경에서 RAG를 표준으로 만들었습니다. 다음 단계로는 그라운딩(Grounding), 벡터 DB 선택, 청크 전략 최적화를 학습하면 RAG 이해가 한층 깊어집니다.
참고 자료
- Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks — RAG 원논문 (Lewis et al., 2020, Meta AI)
- LangChain RAG 공식 튜토리얼 — 실습 중심 구현 가이드
함께 읽으면 좋은 용어
이 개념과 함께 알아두면 이해가 깊어지는 관련 용어들입니다.
댓글 남기기