Modular RAG
Modular RAG는 RAG 시스템을 독립적인 모듈로 분리하고, 이를 LEGO 블록처럼 조합하여 다양한 RAG 파이프라인을 구성하는 프레임워크입니다. Naive RAG와 Advanced RAG를 포함한 모든 RAG 아키텍처를 모듈 조합의 관점에서 통합적으로 설명합니다.핵심 아이디어
기존 RAG 아키텍처들은 각각 고유한 구조를 제안하지만, 분해해 보면 공통된 모듈의 조합으로 표현할 수 있습니다. Modular RAG는 이 관점에서 6개의 핵심 모듈을 정의하고, 이들의 조합 방식(플로우 패턴)을 체계화합니다.6개 핵심 모듈
| 모듈 | 역할 | 주요 연산자 |
|---|---|---|
| Indexing | 문서 분할, 임베딩, 인덱스 저장 | Chunk, Embed, Index |
| Pre-Retrieval | 쿼리 변환, 확장, 분해 | Rewrite, HyDE, Decompose |
| Retrieval | 벡터/키워드/하이브리드 검색 | Similarity Search, BM25, Hybrid |
| Post-Retrieval | 재순위화, 압축, 필터링 | Rerank, Compress, Filter |
| Generation | 프롬프트 구성, LLM 생성 | Prompt Template, LLM Call |
| Orchestration | 플로우 제어, 라우팅, 판단 | Route, Judge, Loop Control |
각 모듈의 연산자 상세
각 모듈의 연산자 상세
Indexing 모듈: 문서를 처리 가능한 단위로 변환합니다.
Chunk: 문서를 고정 크기 또는 의미 단위로 분할Embed: 청크를 벡터로 변환 (OpenAI, BGE, E5 등)Index: 벡터 데이터베이스에 저장 (Chroma, Qdrant, Milvus 등)
Rewrite: 쿼리를 검색에 적합한 형태로 변환HyDE: 가상 답변을 생성하여 검색 쿼리로 사용Decompose: 복잡한 질문을 하위 질문으로 분해
Similarity Search: 벡터 코사인 유사도 기반 검색BM25: 전통적인 키워드 기반 검색Hybrid: 벡터 검색과 키워드 검색을 결합
Rerank: Cross-encoder로 관련도 순서 재정렬Compress: 불필요한 내용 제거, 핵심 정보 추출Filter: 관련성 임계값 이하 문서 제거
Prompt Template: 컨텍스트와 질문을 프롬프트로 구성LLM Call: 프롬프트를 LLM에 전달하여 답변 생성
Route: 쿼리 특성에 따라 경로 결정Judge: 중간 결과 품질 평가 및 판정Loop Control: 반복 종료 조건 관리
플로우 패턴
모듈 간 연결 방식을 정의하는 패턴입니다.아래 4가지 패턴(Linear, Conditional, Branching, Loop)은 Gao et al. (2024) 원 논문에서 주로 강조하는 핵심 패턴입니다. Tuning 패턴은 추론 구조가 아닌 학습 단계의 최적화로, 실무 확장 관점에서 함께 다룹니다.
1. Linear (선형)
가장 기본적인 순차 처리입니다. Naive RAG가 이 패턴에 해당합니다.2. Conditional (조건부)
평가 결과에 따라 경로를 선택합니다. CRAG가 이 패턴을 사용합니다.3. Branching (분기)
하나의 입력에 대해 여러 경로로 분기하여 병렬 처리합니다. 다중 검색 소스를 사용하는 경우입니다.4. Loop (루프)
생성 결과가 기준을 충족할 때까지 반복합니다. Self-RAG가 이 패턴을 사용합니다.5. Tuning (튜닝) — 실무 확장 관점
검색기(Retriever)나 생성기(Generator)를 파인튜닝하여 RAG 성능을 향상시킵니다.- Retriever FT: 도메인 데이터로 임베딩 모델을 파인튜닝하여 검색 정확도 향상
- Generator FT: 검색 결과를 효과적으로 활용하도록 LLM을 파인튜닝 (Self-RAG의 Reflection Token 학습 등)
- Dual FT: 검색기와 생성기를 동시에 최적화하여 전체 파이프라인 성능 향상
LangGraph에서의 모듈 구성
LangGraph의 StateGraph는 Modular RAG의 모듈을 노드로, 플로우 패턴을 엣지로 직접 대응할 수 있습니다.- Conditional 패턴
- Branching 패턴
- Loop 패턴
기존 아키텍처와의 관계
Modular RAG 관점에서 각 RAG 아키텍처를 모듈 조합으로 표현할 수 있습니다.| 아키텍처 | 사용 모듈 | 플로우 패턴 |
|---|---|---|
| Naive RAG | Retrieval + Generation | Linear |
| Advanced RAG | Pre-Retrieval + Retrieval + Post-Retrieval + Generation | Linear |
| Self-RAG | Retrieval + Generation + Orchestration(자기 평가) | Loop |
| CRAG | Retrieval + Post-Retrieval(평가) + Generation | Conditional |
| Adaptive RAG | Orchestration(라우팅) + Retrieval + Generation | Conditional + Loop |
| Agentic RAG | Orchestration(에이전트) + 모든 모듈 | Conditional + Loop |
Modular RAG는 특정 구현이 아니라 RAG 시스템을 이해하고 설계하는 프레임워크입니다. 이후의 Self-RAG, CRAG, Adaptive RAG, Agentic RAG 문서에서 각 아키텍처의 구체적인 구현을 확인할 수 있습니다.
참고 논문
| 논문 | 링크 |
|---|---|
| Modular RAG: Transforming RAG Systems into LEGO-like Reconfigurable Frameworks (Gao et al., 2024) | arXiv 2407.21059 |
| Retrieval-Augmented Generation for Large Language Models: A Survey (Gao et al., 2023) | arXiv 2312.10997 |

