본문으로 건너뛰기

© 2026 Molayo

GitHub요약2026. 05. 26. 13:55

lamhotsiagian/rag-techniques-playbook

요약

Agentic RAG의 다양한 구현 기법과 워크플로우를 정리한 플레이북입니다. 단순 검색을 넘어 파싱, 재순위화, 검증 단계를 포함한 프로덕션 지향적 에이전트 설계 방식을 다룹니다.

핵심 포인트

  • Agentic RAG를 위한 34가지 핵심 기술 및 전략 제시
  • 단순 RAG 대비 높은 복잡도와 지연 시간 관리 필요
  • PydanticAI, LangChain 등 프레임워크 활용 가이드
  • 검증 훅과 피드백 루프를 통한 신뢰성 확보

저자: Lamhot Siagian — LinkedIn — Email

    1. Contextual AI를 활용한 Agentic RAG (Agentic RAG with Contextual AI)
    1. 기본 RAG (Basic RAG)
    1. CSV 파일을 활용한 RAG (RAG with CSV Files)
    1. 신뢰할 수 있는 RAG (Reliable RAG)
    1. 청크 크기 최적화 (Optimizing Chunk Sizes)
    1. 명제 기반 청킹 (Proposition Chunking)
    1. 쿼리 변환 (Query Transformations)
    1. HyDE (Hypothetical Document Embedding, 가설 문서 임베딩)
    1. HyPE (Hypothetical Prompt Embedding, 가설 프롬프트 임베딩)
    1. 문맥적 청크 헤더 (Contextual Chunk Headers)
    1. 관련 세그먼트 추출 (Relevant Segment Extraction)
    1. 컨텍스트 윈도우 강화 (Context Window Enhancement)
    1. 의미론적 청킹 (Semantic Chunking)
    1. 문맥 압축 (Contextual Compression)
    1. 문서 증강 (Document Augmentation)
    1. 퓨전 검색 (Fusion Retrieval)
    1. 재순위화 (Reranking)
    1. 다면적 필터링 (Multi-faceted Filtering)
    1. 계층적 인덱스 (Hierarchical Indices)
    1. 앙상블 검색 (Ensemble Retrieval)
    1. 다트보드 검색 (Dartboard Retrieval)
    1. 캡셔닝을 활용한 멀티모달 RAG (Multi-modal RAG with Captioning)
    1. 피드백 루프를 활용한 검색 (Retrieval with Feedback Loop)
    1. 적응형 검색 (Adaptive Retrieval)
    1. 반복적 검색 (Iterative Retrieval)
    1. DeepEval
    1. GroUSE
    1. 설명 가능한 검색 (Explainable Retrieval)
    1. LangChain을 활용한 Graph RAG (Graph RAG with LangChain)
    1. Microsoft GraphRAG
    1. RAPTOR
    1. Self-RAG
    1. 교정형 RAG (Corrective RAG (CRAG))
    1. 정교하고 제어 가능한 에이전트 (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가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0