콘텐츠로 이동
Data Prep
상세

RAG 패턴 선택 가이드

개요

Retrieval-Augmented Generation(RAG)은 외부 지식을 LLM에 주입하는 핵심 아키텍처다. 상황에 따라 최적의 RAG 패턴이 달라지므로, 요구사항에 맞는 패턴을 선택하는 것이 중요하다.

RAG 패턴 비교

패턴 특징 적합한 상황 복잡도
Naive RAG 단순 검색 + 생성 프로토타입, 소규모 데이터 낮음
Advanced RAG 쿼리 변환 + 리랭킹 프로덕션 환경 중간
Modular RAG 모듈 조합 복잡한 도메인 중간-높음
Agentic RAG 에이전트 기반 다단계 추론 필요 높음
Graph RAG 지식그래프 연동 관계 중심 쿼리 높음

패턴별 상세

1. Naive RAG

Query → Embed → Vector Search → Top-K → LLM → Answer

구성 요소: - 임베딩 모델 (BGE-M3, OpenAI Ada) - 벡터 DB (Milvus, Pinecone, Qdrant) - LLM (GPT-4, Claude, Llama)

장점: - 구현 단순 - 빠른 프로토타이핑 - 낮은 운영 비용

단점: - 쿼리-문서 불일치 문제 - 문맥 손실 - 환각 발생 가능

적합한 경우: - FAQ 시스템 - 단순 문서 검색 - 초기 PoC

2. Advanced RAG

Query → Query Transform → Hybrid Search → Reranking → LLM → Answer

핵심 개선:

단계 기법 효과
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

Query → Router → [Module A] → [Module B] → ... → LLM → Answer

모듈 구성:

모듈 유형 역할 예시
Retriever 검색 전략 벡터, BM25, SQL
Filter 결과 필터링 메타데이터, 날짜
Summarizer 요약 맵리듀스, 청킹
Validator 검증 팩트체크, 출처

적합한 경우: - 다양한 데이터 소스 - 복잡한 비즈니스 로직 - 높은 정확도 요구

4. Agentic RAG

Query → Agent → [Plan] → [Execute Tools] → [Reflect] → Answer

에이전트 기능: - 자율적 도구 선택 - 다단계 추론 - 자기 반성 (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

Query → Entity Extract → Graph Traverse → Subgraph → LLM → Answer

핵심 요소: - 지식 그래프 (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