🤖 AI/ML

RAG

Retrieval-Augmented Generation

검색 증강 생성. 외부 지식을 검색하여 LLM 응답의 정확도를 높이는 기술. 할루시네이션 감소.

📖 상세 설명

RAG(Retrieval-Augmented Generation, 검색 증강 생성)는 대규모 언어 모델(LLM)이 응답을 생성하기 전에 외부 지식 베이스에서 관련 정보를 검색하여 활용하는 기술입니다. 이를 통해 LLM의 지식 한계를 극복하고, 최신 정보나 특정 도메인 지식을 반영한 정확한 답변을 제공할 수 있습니다.

RAG는 2020년 Facebook AI Research에서 처음 제안되었으며, LLM의 할루시네이션(환각) 문제를 해결하기 위한 대안으로 급부상했습니다. 기존 LLM은 학습 데이터에만 의존하여 최신 정보 반영이 어렵고, 사실과 다른 내용을 생성하는 문제가 있었습니다.

RAG의 핵심 원리는 "검색 + 생성" 2단계 파이프라인입니다. 먼저 사용자 질문을 임베딩하여 벡터 데이터베이스에서 유사한 문서를 검색(Retrieval)하고, 검색된 문서를 컨텍스트로 LLM에 전달하여 응답을 생성(Generation)합니다. 이 과정에서 Chunking, Embedding, Vector Search가 핵심 기술로 사용됩니다.

실무에서 RAG는 기업 내부 문서 검색, 고객 지원 챗봇, 법률/의료 전문 어시스턴트 등에 필수적으로 적용됩니다. Fine-tuning보다 비용 효율적이며, 지식 베이스 업데이트만으로 즉시 최신 정보를 반영할 수 있어 엔터프라이즈 AI 솔루션의 표준이 되었습니다.

💻 코드 예제

LangChain을 활용한 기본 RAG 파이프라인 예제입니다.

# pip install langchain langchain-openai chromadb
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_community.vectorstores import Chroma
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.chains import RetrievalQA

# 1. 문서 로드 및 청킹
documents = ["AI는 인공지능의 약자입니다...", "머신러닝은 AI의 하위 분야입니다..."]
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
splits = text_splitter.create_documents(documents)

# 2. 임베딩 및 벡터 저장소 생성
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
vectorstore = Chroma.from_documents(splits, embeddings)

# 3. RAG 체인 구성
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
qa_chain = RetrievalQA.from_chain_type(
    llm=llm,
    chain_type="stuff",
    retriever=vectorstore.as_retriever(search_kwargs={"k": 3})
)

# 4. 질의 실행
response = qa_chain.invoke({"query": "AI와 머신러닝의 관계는?"})
print(response["result"])

🗣️ 실무에서 이렇게 말하세요

💬 회의에서
"내부 문서 기반 챗봇은 RAG로 구현하면 됩니다. Fine-tuning보다 업데이트가 쉽고 비용도 절감돼요."
💬 면접에서
"RAG는 Retrieval 단계의 품질이 전체 성능을 좌우합니다. Chunk 크기, Embedding 모델 선택, Reranking 전략이 핵심 튜닝 포인트입니다."
💬 기술 토론에서
"Naive RAG의 한계를 극복하려면 Query Expansion, HyDE, Self-RAG 같은 Advanced RAG 기법을 적용해야 합니다."

⚠️ 흔한 실수 & 주의사항

Chunk 크기를 고려하지 않음: 너무 작으면 문맥이 끊기고, 너무 크면 관련 없는 정보가 포함됩니다. 일반적으로 500-1000 토큰이 적절합니다.
검색 결과를 그대로 사용: Top-K 검색 결과가 항상 최적이 아닙니다. Reranker(Cohere, BGE)를 적용해 관련성을 재평가하세요.
Hybrid Search 활용: 키워드 검색(BM25)과 시맨틱 검색을 결합하면 검색 정확도가 20-30% 향상됩니다.

🔗 관련 용어

📚 더 배우기