lamhotsiagian/rag-techniques-playbook
요약
Agentic RAG의 다양한 구현 기법과 워크플로우를 정리한 플레이북입니다. 단순 검색을 넘어 파싱, 재순위화, 검증 단계를 포함한 프로덕션 지향적 에이전트 설계 방식을 다룹니다.
핵심 포인트
- Agentic RAG를 위한 34가지 핵심 기술 및 전략 제시
- 단순 RAG 대비 높은 복잡도와 지연 시간 관리 필요
- PydanticAI, LangChain 등 프레임워크 활용 가이드
- 검증 훅과 피드백 루프를 통한 신뢰성 확보
저자: Lamhot Siagian — LinkedIn — Email
-
- Contextual AI를 활용한 Agentic RAG (Agentic RAG with Contextual AI)
-
- 기본 RAG (Basic RAG)
-
- CSV 파일을 활용한 RAG (RAG with CSV Files)
-
- 신뢰할 수 있는 RAG (Reliable RAG)
-
- 청크 크기 최적화 (Optimizing Chunk Sizes)
-
- 명제 기반 청킹 (Proposition Chunking)
-
- 쿼리 변환 (Query Transformations)
-
- HyDE (Hypothetical Document Embedding, 가설 문서 임베딩)
-
- HyPE (Hypothetical Prompt Embedding, 가설 프롬프트 임베딩)
-
- 문맥적 청크 헤더 (Contextual Chunk Headers)
-
- 관련 세그먼트 추출 (Relevant Segment Extraction)
-
- 컨텍스트 윈도우 강화 (Context Window Enhancement)
-
- 의미론적 청킹 (Semantic Chunking)
-
- 문맥 압축 (Contextual Compression)
-
- 문서 증강 (Document Augmentation)
-
- 퓨전 검색 (Fusion Retrieval)
-
- 재순위화 (Reranking)
-
- 다면적 필터링 (Multi-faceted Filtering)
-
- 계층적 인덱스 (Hierarchical Indices)
-
- 앙상블 검색 (Ensemble Retrieval)
-
- 다트보드 검색 (Dartboard Retrieval)
-
- 캡셔닝을 활용한 멀티모달 RAG (Multi-modal RAG with Captioning)
-
- 피드백 루프를 활용한 검색 (Retrieval with Feedback Loop)
-
- 적응형 검색 (Adaptive Retrieval)
-
- 반복적 검색 (Iterative Retrieval)
-
- DeepEval
-
- GroUSE
-
- 설명 가능한 검색 (Explainable Retrieval)
-
- LangChain을 활용한 Graph RAG (Graph RAG with LangChain)
-
- Microsoft GraphRAG
-
- RAPTOR
-
- Self-RAG
-
- 교정형 RAG (Corrective RAG (CRAG))
-
- 정교하고 제어 가능한 에이전트 (Sophisticated Controllable Agent)
요약 정보 (Quick facts)
카테고리 (Category): 핵심 협업 (Key Collaboration)
유형 (Type): 에이전트형 / 오케스트레이션 RAG (Agentic / Orchestrated RAG)
핵심 기능 (Key Feature): 도구 사용 에이전트 + 파싱/재순위화 + 근거 기반 생성 + 검증
🟨
정의 (What It Is): 파싱(parsing) 및 검증(verification)과 함께 여러 검색 도구를 결합한 프로덕션 지향적 에이전트형 RAG 워크플로우입니다.
from pydantic_ai import Agent
agent = Agent(
"openai:gpt-4o-mini",
...
-
복잡하고 다단계인 질문 처리
-
유연한 검색 (청크 vs 전체 문서)
-
단계별 검증 훅 (Verification hooks)
-
작동해야 할 구성 요소가 더 많음
-
단순 RAG보다 높은 지연 시간(latency)/비용
-
강력한 가드레일(guardrails) 필요
-
기업용 문서 QA, 고객 지원, 연구 보조원
-
PydanticAI/LangChain/LangGraph
-
문서 파서 (Docling, unstructured)
-
벡터 DB + 재순위화 모델 (reranker)
요약 정보 (Quick facts)
카테고리 (Category): 기초 (Foundational)
유형 (Type): 표준 RAG (Standard RAG)
핵심 기능 (Key Feature): Top-k 검색 + 프롬프트 증강 (prompt augmentation)
🟨
정의 (What It Is): 클래식한 베이스라인: 상위 k개의 청크를 검색하고 해당 컨텍스트를 모델의 프롬프트에 제공합니다.
from pydantic_ai import Agent
agent = Agent(
"openai:gpt-4o-mini",
...
-
구축이 빠름
-
평가를 위한 좋은 베이스라인 (Baseline)
-
순수 LLM 대비 사실성 (Factuality) 향상
-
청킹 (Chunking) 및 검색 (Retrieval) 오류에 민감함
-
핵심 증거를 놓칠 수 있음
-
컨텍스트 (Context)가 약할 경우 환각 (Hallucination)이 발생할 수 있음
-
고정된 코퍼스 (Corpus)에 대한 일반적인 질의응답; FAQ
-
LangChain/LlamaIndex/Haystack
-
FAISS/Chroma/pgvector
-
e5/bge/OpenAI 임베딩 (Embeddings)
Quick facts
Category: Foundational
Type: Standard RAG (structured source)
Key Feature: 행 단위 인덱싱 (Row-wise indexing) + 메타데이터 필터 (Metadata filters)
🟨
What It Is
행(또는 그룹)을 메타데이터를 포함한 검색 가능한 단위로 변환하여 구조화된 CSV에 대해 RAG를 수행하는 방식입니다.
import pandas as pd
from pydantic_ai import Agent
agent = Agent("openai:gpt-4o-mini", system_prompt="Answer using retrieved rows as evidence.")
...
-
강력한 출처 (Provenance, 행 ID)
-
쉬운 컬럼 필터링
-
내보내기/카탈로그에 적합
-
스키마-텍스트 (Schema-to-text) 설계 필요
-
조인 (Joins)/관계 처리에 추가 로직 필요
-
대규모 CSV의 경우 그룹화가 필요할 수 있음
-
제품 카탈로그, 티켓 내보내기, 조회 테이블
-
Pandas + DuckDB/SQLite
-
CSV 로더 (Loaders)
-
벡터 DB 메타데이터 필터
Quick facts
Category: Foundational
Type: Reliability / Grounding
Key Feature: 검증 루프 (Validation loop) (관련성 + 근거 확인)
🟨
What It Is
관련성 (Relevance) 및 근거 (Grounding)를 확인하고, 필요할 때 재검색하거나 정제하는 신뢰성 중심의 RAG 루프입니다.
from pydantic_ai import Agent
agent = Agent("openai:gpt-4o-mini", system_prompt="Be grounded. If evidence is weak, retrieve again.")
@agent.tool
...
-
환각 (Hallucination) 위험 감소
-
엣지 케이스 (Edge cases)에 대해 더 견고함
-
더 나은 추적 가능성 (Traceability)
-
더 높은 지연 시간 (Latency)
-
불완전한 검증기 (Validators)
-
임계값 (Thresholds)/테스트 세트 필요
-
높은 신뢰도가 요구되는 도메인; 지원 자동화
-
LLM-as-judge / 휴리스틱 (Heuristics)
-
리랭커 (Rerankers)
-
DeepEval/TruLens/LangSmith
Quick facts
Category: Foundational
Type: Chunking / Indexing
Key Feature: 오프라인 평가를 통한 청크/오버랩 (Chunk/overlap) 튜닝
🟨
What It Is
오프라인 평가를 사용하여 재현율 (Recall), 일관성 (Coherence), 토큰 비용 (Token cost) 사이의 균형을 맞추기 위해 청크 크기/오버랩을 조정합니다.
청크 크기 튜닝 (오프라인). 테스트 세트에서 각 구성을 평가합니다.
# Chunk size tuning (offline). Evaluate each configuration on a test set.
def tune_chunking(corpus: list[str], queries: list[str], sizes: list[int]) -> dict:
results = {}
...
-
높은 ROI (투자 대비 효율) 개선
-
더 나은 재현율 (Recall) 및 일관성 (Coherence)
-
토큰 낭비 감소
-
데이터 의존적
-
재색인 (Re-indexing) 필요
-
과적합 (Overfit) 가능성
-
모든 RAG 시스템; 회귀 테스트 (Regression tests) 실행
-
청커 (Chunkers) + 평가 하네스 (Eval harness) (RAGAS/DeepEval)
-
벡터 DB (Vector DB)
Quick facts
Category: Foundational
Type: Chunking / 지식 추출 (Knowledge extraction)
Key Feature: LLM 지원 명제 추출 (LLM-assisted proposition extraction)
🟨
What It Is 고정밀 검색을 위해 문서를 원자적 사실 명제 (Atomic factual propositions)로 분할합니다.
from pydantic_ai import Agent
agent = Agent("openai:gpt-4o-mini", system_prompt="Answer using proposition-level evidence.")
async def extract_propositions(text: str) -> list[str]:
...
-
사실 관계 기반 질의응답 (Q&A)에 대한 높은 정밀도 (Precision)
-
세밀한 근거 제시 (Fine-grained grounding)
-
정책/사양서 (Policies/specs)에 유용함
-
인덱싱 시점의 비용 발생
-
추출기 (Extractor)의 품질이 중요함
-
서사적 흐름 (Narrative flow)을 잃을 수 있음
-
컴플라이언스/정책/사양서; 사실 확인 (Fact lookup)
-
LLM 명제 추출기 (Proposition extractor) + 채점기 (Graders)
-
벡터 DB 명제 인덱스 (Vector DB proposition index)
Quick facts
Category: Query Enhancement
Type: 쿼리 재작성 (Query rewriting) / 분해 (Decomposition)
Key Feature: 쿼리 재작성 (Query rewriting) + 분해 (Decomposition)
🟨
What It Is 쿼리를 더 나은 검색 쿼리(충실한 패러프레이징 및 하위 질문)로 재작성하거나 분해합니다.
from pydantic_ai import Agent
agent = Agent("openai:gpt-4o-mini", system_prompt="Rewrite queries without changing intent.")
@agent.tool
...
-
모호한 쿼리에 대한 재현율 (Recall) 개선
-
다중 부분 질문 (Multi-part questions)에 도움을 줌
-
코퍼스 (Corpus) 변경 불필요
-
제약 조건이 없으면 의미가 이탈할 수 있음
-
더 많은 검색 호출 발생
-
가드레일 (Guardrails) 필요
-
대화형 어시스턴트; 모호한 질문
-
LLM 쿼리 재작성기 (Query rewriter)
-
하이브리드 검색기 (Hybrid retrievers)
-
캐싱 (Caching)
Quick facts
Category: Query Enhancement
Type: 쿼리-문서 합성 (Query-to-document synthesis)
Key Feature: 합성 문서 임베딩 (Synthetic document embedding)
🟨
What It Is HyDE: 가상의 구절 (Hypothetical passage)을 생성하고, 이를 임베딩하여 일치하는 실제 문서를 검색합니다.
from pydantic_ai import Agent
agent = Agent("openai:gpt-4o-mini", system_prompt="Use HyDE to improve retrieval.")
@agent.tool
...
-
짧거나 모호한 쿼리 (queries)에 대한 검색 성능 향상
-
롱테일 질문 (long-tail questions)에 도움을 줌
-
모든 벡터 DB (vector DB)와 호환됨
-
추가적인 LLM 호출
-
가설 (Hypothesis)이 잘못된 방향을 제시할 수 있음
-
안전한 프롬프트 (prompts)가 필요함
-
희소 쿼리 (Sparse queries); 연구용 Q&A
-
HyDE를 위한 LLM
-
임베딩 (Embeddings) + 벡터 검색 (vector search)
-
선택적 리랭커 (reranker)
Quick facts
Category: 쿼리 강화 (Query Enhancement)
Type: 검색을 위한 프롬프트 합성 (Prompt synthesis for retrieval)
Key Feature: 프롬프트 스타일의 쿼리 확장 (Prompt-style query expansion)
🟨
What It Is
HyPE: 프롬프트와 유사한 작업 지침 (task instructions)을 생성하고 이를 임베딩하여, 검색이 작업 의도 (task intent)를 향하도록 유도합니다.
from pydantic_ai import Agent
agent = Agent("openai:gpt-4o-mini", system_prompt="Use HyPE to align retrieval with task intent.")
@agent.tool
...
-
검색을 작업 의도와 일치시킴
-
요약/비교/추출 작업에 유용함
-
제약 조건 (Constraint) 적용에 용이함
-
추가적인 LLM 호출
-
과도하게 구체화될 수 있음
-
튜닝 (tuning)이 필요함
-
작업 지향형 어시스턴트 (Task-oriented assistants)
-
LLM 프롬프트 합성기 (prompt synthesizer)
-
임베딩 (Embeddings) + 벡터 검색 (vector search)
-
선택적 라우터 (router)
Quick facts
Category: 컨텍스트 강화 (Context Enrichment)
Type: 컨텍스트화 (Contextualization) / 청크 증강 (Chunk augmentation)
Key Feature: 문서/섹션 컨텍스트 접두사 (Document/section context prefixes)
🟨
What It Is
모호성을 줄이기 위해 임베딩 전 각 청크 (chunk)에 섹션 인지 헤더 (section-aware header)를 추가합니다.
from pydantic_ai import Agent
agent = Agent("openai:gpt-4o-mini", system_prompt="Use section-aware chunks.")
def add_header(chunk: str, title: str, heading_path: str) -> str:
...
-
검색 정밀도 (retrieval precision) 향상
-
청크의 모호성 감소
-
긴 문서에 매우 효과적임
-
더 많은 토큰 (tokens) 소모
-
잘못된 헤더는 성능을 저해함
-
일관된 헤더 (headings)가 필요함
-
핸드북/정책/긴 PDF 문서
-
헤더 추출 (Heading extraction)
-
벡터 DB (Vector DB)
-
선택적 리랭커 (reranker)
Quick facts
Category: 컨텍스트 강화 (Context Enrichment)
Type: 컨텍스트 선택 (Context selection) / 추출 (Extraction)
Key Feature: 검색 후 스팬 수준 추출 (Span-level extraction after retrieval)
🟨
What It Is
문서를 검색한 후, 생성 전 가장 관련성이 높은 스팬 (spans)만을 추출합니다.
from pydantic_ai import Agent
agent = Agent("openai:gpt-4o-mini", system_prompt="Extract only the relevant spans.")
@agent.tool
...
-
더 높은 신호 대 잡음비 (Signal-to-noise ratio)
-
컨텍스트 내에 더 많은 증거 포함 가능
-
무관한 콘텐츠 감소
-
추출기 (Extractor)가 뉘앙스를 놓칠 수 있음
-
지연 시간 (Latency) 추가
-
정교한 파싱 (Parsing) 필요
-
긴 문서; 엄격한 토큰 예산 (Token budgets)
-
LLM 스팬 추출기 (LLM span extractor)
-
압축 검색기 (Compression retrievers)
-
교차 인코더 추출기 (Cross-encoder extractors)
Quick facts
Category: Context Enrichment
Type: Sliding-window / Neighbor expansion
Key Feature: Neighbor expansion
🟨
What It Is
각 검색 결과 주변의 이웃 청크 (Neighbor chunks)를 사용하여 검색된 컨텍스트를 확장합니다.
from pydantic_ai import Agent
agent = Agent("openai:gpt-4o-mini", system_prompt="Use neighbor chunks for coherence.")
@agent.tool
...
-
로컬 컨텍스트 (Local context) 복구
-
일관성 (Coherence) 향상
-
구현이 간단함
-
노이즈를 추가할 수 있음
-
더 높은 토큰 사용량
-
청크 순서 메타데이터 (Chunk ordering metadata) 필요
-
기술/서사 문서
-
청크 위치 메타데이터 (Chunk position metadata)
-
Docstore API
Quick facts
Category: Context Enrichment
Type: Chunking (semantic boundaries)
Key Feature: Boundary-aware chunking
🟨
What It Is
고정된 크기가 아닌 의미론적 경계 (Semantic boundaries, 주제 전환)를 기준으로 청킹 (Chunking) 합니다.
# Semantic chunking: split at topic boundaries instead of fixed windows.
def semantic_chunks(text: str) -> list[str]:
sentences = split_sentences(text)
...
-
더 일관된 청크
-
더 나은 개념적 검색 (Conceptual retrieval)
-
파편화 감소
-
더 복잡한 전처리 (Preprocessing)
-
경계 오류 가능성
-
가변적인 청크 크기
-
논문/사양서/정책서
-
문장 분할 (Sentence segmentation) + 클러스터링 (Clustering)
-
LLM 지원 청킹 (LLM-assisted chunking)
Quick facts
Category: Context Enrichment
Type: Compression / Summarization for retrieval
Key Feature: Query-aware compression
🟨
What It Is
답변하기 전에 검색된 컨텍스트를 쿼리에 집중된 요약/추출물로 압축합니다.
from pydantic_ai import Agent
agent = Agent("openai:gpt-4o-mini", system_prompt="Compress context before answering.")
@agent.tool
...
-
더 많은 증거 포함
-
관련성 밀도 (Relevance density) 향상
-
작은 컨텍스트 윈도우 (Context window)에 도움
-
압축 시 뉘앙스 손실 가능성
-
추가 연산 비용 (Extra compute)
-
출처 표기 (Attribution) 복잡성
-
긴 문서 + 토큰 제한
-
LangChain 압축 리트리버 (Compression retrievers)
-
LLM 요약기 (Summarizers)
Quick facts
Category: 컨텍스트 강화 (Context Enrichment)Type: 검색을 위한 합성 데이터 증강 (Synthetic data augmentation)Key Feature: 인덱스 시점 증강 (Index-time augmentation)
🟨
What It Is검색 가능성을 높이기 위해 인덱스 시점 (Index time)에 합성 질문/키워드로 문서를 증강합니다.
# 문서 증강: 인덱스 시점에 합성 질문/키워드 추가.
async def augment(doc_text: str) -> str:
qs = await llm.generate_list(f"Generate 5 likely user questions answered by this text:\n\n{doc_text}")
...
-
재현율 (Recall) 향상
-
간접적인 표현에 도움
-
작은 지식 베이스 (KB)에 적합
-
인덱스 시점 비용
-
합성 노이즈 (Synthetic noise) 위험
-
평가 (Eval) 필요
-
희소 코퍼스 (Sparse corpora); 다양한 사용자 언어
-
LLM 질문 생성기
-
벡터 DB (Vector DB)
Quick facts
Category: 고급 검색 (Advanced Retrieval)Type: 하이브리드 / 퓨전 검색 (Hybrid / Fusion retrieval)Key Feature: Dense + BM25 퓨전 (Fusion)
🟨
What It Is강력한 검색을 위해 Dense + BM25 결과를 결합합니다 (예: RRF).
from pydantic_ai import Agent
agent = Agent("openai:gpt-4o-mini", system_prompt="Use evidence. Prefer precise matches.")
@agent.tool
...
-
강력한 재현율 (Recall)
-
정확한 용어와 의미론적 (Semantics) 검색 모두 처리
-
다양한 쿼리 유형에 대해 견고함
-
더 많은 인프라 필요
-
튜닝 필요
-
더 높은 지연 시간 (Latency)
-
지원 사항 (에러 코드), 로그, 혼합 전문 용어
-
Elasticsearch/OpenSearch
-
벡터 DB (Vector DB)
-
RRF 퓨전 (RRF fusion)
Quick facts
Category: 고급 검색 (Advanced Retrieval)Type: 랭킹 / 관련성 모델링 (Ranking / Relevance modeling)Key Feature: 2단계 재순위화 (Second-stage reranking)
🟨
What It Is많은 후보군을 검색한 다음, 답변하기 전에 더 강력한 모델로 재순위화 (Rerank) 합니다.
from pydantic_ai import Agent
agent = Agent("openai:gpt-4o-mini", system_prompt="Ground answers in context.")
@agent.tool
...
-
큰 정밀도 (Precision) 이득
-
관련 없는 컨텍스트 감소
-
더 근거 있는 (Grounded) 답변
-
추가 비용/지연 시간
-
후보군 세트 필요
-
리랭커 (Reranker) 인프라
-
정밀도가 중요한 Q&A
-
bge-reranker/cross-encoders/Cohere
-
캐싱 (Caching)
Quick facts
Category: 고급 검색 (Advanced Retrieval)
Type: 메타데이터 및 규칙 기반 필터링 (Metadata & rule-based filtering)
Key Feature: 메타데이터 인식 검색 (Metadata-aware retrieval)
🟨
개념 (What It Is)
검색 전/후에 ACL(액세스 제어 목록)/테넌트(tenant)/시간/제품 필터를 적용합니다.
from pydantic_ai import Agent
agent = Agent("openai:gpt-4o-mini", system_prompt="Respect metadata filters (ACL, tenant, product).")
@agent.tool
...
장점 (Pros)
- 더 나은 관련성 (Relevance)
- 컴플라이언스(Compliance) 및 액세스 제어 (Access control)
- 개인화 (Personalization)
단점 (Cons)
- 깨끗한 메타데이터 필요
- 과도한 필터링은 재현율 (Recall)을 저해함
- 데이터 수집 (Ingestion) 복잡성
사용 사례 (Use Cases)
- 엔터프라이즈 멀티 테넌트 (Multi-tenant) RAG
관련 기술 (Related Technologies)
- 벡터 DB 메타데이터 필터 (Vector DB metadata filters)
- RBAC/ABAC
Quick facts
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub AI Tools의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기