RAG 패턴 선택 가이드¶
개요¶
Retrieval-Augmented Generation(RAG)은 외부 지식을 LLM에 주입하는 핵심 아키텍처다. 상황에 따라 최적의 RAG 패턴이 달라지므로, 요구사항에 맞는 패턴을 선택하는 것이 중요하다.
RAG 패턴 비교¶
| 패턴 | 특징 | 적합한 상황 | 복잡도 |
|---|---|---|---|
| Naive RAG | 단순 검색 + 생성 | 프로토타입, 소규모 데이터 | 낮음 |
| Advanced RAG | 쿼리 변환 + 리랭킹 | 프로덕션 환경 | 중간 |
| Modular RAG | 모듈 조합 | 복잡한 도메인 | 중간-높음 |
| Agentic RAG | 에이전트 기반 | 다단계 추론 필요 | 높음 |
| Graph RAG | 지식그래프 연동 | 관계 중심 쿼리 | 높음 |
패턴별 상세¶
1. Naive RAG¶
구성 요소: - 임베딩 모델 (BGE-M3, OpenAI Ada) - 벡터 DB (Milvus, Pinecone, Qdrant) - LLM (GPT-4, Claude, Llama)
장점: - 구현 단순 - 빠른 프로토타이핑 - 낮은 운영 비용
단점: - 쿼리-문서 불일치 문제 - 문맥 손실 - 환각 발생 가능
적합한 경우: - FAQ 시스템 - 단순 문서 검색 - 초기 PoC
2. Advanced RAG¶
핵심 개선:
| 단계 | 기법 | 효과 |
|---|---|---|
| Pre-retrieval | 쿼리 확장, HyDE | 검색 품질 향상 |
| Retrieval | 하이브리드 검색 (Dense + Sparse) | 재현율 개선 |
| Post-retrieval | Reranking (Cohere, BGE) | 정밀도 개선 |
구현 예시:
# 쿼리 확장
expanded = llm.expand_query(original_query)
# 하이브리드 검색
dense_results = vector_db.search(embed(expanded))
sparse_results = bm25.search(expanded)
combined = reciprocal_rank_fusion(dense_results, sparse_results)
# 리랭킹
reranked = reranker.rank(query, combined)
# 생성
answer = llm.generate(query, reranked[:5])
적합한 경우: - 프로덕션 챗봇 - 기술 문서 검색 - 고객 지원 시스템
3. Modular RAG¶
모듈 구성:
| 모듈 유형 | 역할 | 예시 |
|---|---|---|
| Retriever | 검색 전략 | 벡터, BM25, SQL |
| Filter | 결과 필터링 | 메타데이터, 날짜 |
| Summarizer | 요약 | 맵리듀스, 청킹 |
| Validator | 검증 | 팩트체크, 출처 |
적합한 경우: - 다양한 데이터 소스 - 복잡한 비즈니스 로직 - 높은 정확도 요구
4. Agentic RAG¶
에이전트 기능: - 자율적 도구 선택 - 다단계 추론 - 자기 반성 (Self-reflection) - 동적 검색 전략
구현 패턴:
class AgenticRAG:
def __init__(self):
self.tools = [VectorSearch, SQLQuery, WebSearch, Calculator]
self.planner = LLM("planning")
self.executor = LLM("execution")
def run(self, query):
plan = self.planner.create_plan(query)
results = []
for step in plan:
tool = self.select_tool(step)
result = tool.execute(step)
results.append(result)
if self.should_revise(results):
plan = self.planner.revise_plan(query, results)
return self.executor.synthesize(query, results)
적합한 경우: - 복잡한 분석 질문 - 다중 소스 통합 필요 - 동적 의사결정
5. Graph RAG¶
핵심 요소: - 지식 그래프 (Neo4j, TigerGraph) - 엔티티 링킹 - 관계 추론 - 커뮤니티 감지
적합한 경우: - 관계 중심 질문 ("A와 B의 관계는?") - 추론 체인 필요 - 엔티티 네트워크 분석
상황별 선택 가이드¶
의사결정 플로우¶
데이터 규모?
├─ 소규모 (< 10K 문서)
│ └─ 복잡한 쿼리?
│ ├─ 아니오 → Naive RAG
│ └─ 예 → Advanced RAG
│
├─ 중규모 (10K-1M 문서)
│ └─ 다중 소스?
│ ├─ 아니오 → Advanced RAG
│ └─ 예 → Modular RAG
│
└─ 대규모 (> 1M 문서)
└─ 관계 중심?
├─ 아니오 → Modular RAG
└─ 예 → Graph RAG
다단계 추론 필요?
└─ 예 → Agentic RAG 고려
산업별 추천¶
| 산업 | 추천 패턴 | 이유 |
|---|---|---|
| 금융 | Advanced + Modular | 정확도 중요, 다양한 데이터 소스 |
| 의료 | Graph RAG | 엔티티 관계, 약물 상호작용 |
| 법률 | Agentic RAG | 복잡한 추론, 판례 분석 |
| 고객지원 | Advanced RAG | 비용 효율, 빠른 응답 |
| 연구 | Modular RAG | 다양한 논문 DB 연동 |
성능 최적화 팁¶
검색 품질 개선¶
| 기법 | 설명 | 효과 |
|---|---|---|
| Chunk Overlap | 청크 간 중복 | 문맥 보존 |
| Semantic Chunking | 의미 단위 분할 | 검색 정확도 |
| Metadata Filtering | 메타데이터 필터 | 검색 범위 축소 |
| Multi-query | 다중 쿼리 생성 | 재현율 향상 |
응답 품질 개선¶
| 기법 | 설명 | 효과 |
|---|---|---|
| Citation | 출처 명시 | 신뢰도 향상 |
| Fact-check | 사실 검증 | 환각 감소 |
| Confidence Score | 신뢰도 점수 | 불확실성 표현 |
참고 자료¶
마지막 업데이트: 2026-02-11