RAG patterns (KO)

From Systems analysis Wiki
Jump to navigation Jump to search

RAG 패턴 (영어: RAG Patterns) — Retrieval-Augmented Generation (RAG) 시스템을 구축하기 위한 아키텍처적·방법론적 접근법의 집합이다. 이 패턴들은 환각(hallucination), 지식 노후화, 도메인 특수성 부족 등 대형 언어 모델(LLM)의 근본적인 문제를 해결하기 위해 LLM을 외부의 동적으로 접근 가능한 데이터 소스와 통합하는 방식으로 설계되었다[1]. RAG의 발전은 단순한 선형 파이프라인에서 복잡한 모듈형·에이전트형 시스템으로 이어졌다[2].

RAG의 주요 패턴

기술이 발전함에 따라 다양한 RAG 패턴이 등장하였으며, 각 패턴은 특정 과제를 해결하고 품질·속도·비용 사이에서 고유한 절충점을 가진다.

  • Classic RAG (클래식 RAG) — 기본 접근법으로, 사용자 쿼리를 벡터화하여 벡터 DB에서 관련 청크(chunk)를 검색하고, 찾은 청크를 질문과 함께 LLM에 입력하여 답변을 생성한다[1].
  • Multi‑Query RAG (멀티 쿼리) — LLM이 원본 쿼리의 여러 변형·구체화된 버전을 생성하고, 모든 버전에 대해 검색을 수행한 뒤 결과를 통합함으로써 재현율(recall)을 높인다[3].
  • HyDE (Hypothetical Document Expansion) — 짧은 쿼리와 긴 문서 사이의 "의미론적 간극"을 극복하기 위해 사용된다. LLM이 먼저 "가상의" 답변 문서를 생성하고, 그 embedding을 검색에 활용하여 검색 품질을 향상시킨다[4].
  • Hybrid Retrieval (하이브리드 검색) — 의미론적(벡터) 검색과 어휘적(BM25) 검색의 조합이다. 하이브리드 방식은 프로덕션 시스템의 표준이 되었다. 벡터 검색은 의미적 유사성을, BM25는 정확한 용어·ID·약어를 찾아내며, 결과는 퓨전(fusion)으로 통합된다[5][6][7].
  • Re‑ranking (재순위화) — 2단계 프로세스로, 빠른 리트리버가 후보 집합(예: 상위 100개)을 반환한 후, 크로스 인코더(또는 다른 재순위화기)가 관련성을 재계산하여 LLM에 전달할 최적의 결과(예: 상위 5개)를 선별한다[8][9].
  • Query Routing (쿼리 라우팅) — 여러 이질적인 데이터 소스(서로 다른 인덱스·DB·API)가 있는 시스템에서, 라우터(LLM 선택기 또는 분류기)를 이용해 쿼리를 최적의 소스로 전달하며, fallback 전략도 포함한다[10].
  • Agentic/Web RAG (에이전트 RAG) — LLM이 에이전트로서 복잡한 질문을 분해하고, 반복을 계획하며, 피드백을 통해 도구(벡터 검색, 웹 검색)를 활용한다. 대표적인 구현 방식은 ReAct 패러다임[11]이며, 웹 중심의 수집과 의무적 인용에 대해서는 WebGPT[12]를 참조한다.

인접 및 신흥 패러다임

  • GraphRAG (그래프 RAG) — 지식 그래프를 컨텍스트 소스 및 선택 메커니즘으로 활용한다. 개체 간 연결 구조와 텍스트를 함께 검색하여 해석 가능성을 높이고 멀티홉(multi‑hop) 질문에서의 품질을 향상시킨다[13][14].
  • MM‑RAG (멀티모달 RAG) — 텍스트와 시각적 소스(스캔·다이어그램·표)를 함께 처리한다. 예시로 VisRAG는 멀티모달 문서에 대한 VLM 기반 검색 및 생성을 시연한다[15].
  • Packaging & Context Handling (컨텍스트 패키징) — 검색된 청크를 prompt에 통합하는 방법: Stuff, Map‑Reduce, Refine, Tree‑of‑Chunks (RAPTOR)[16].

패턴 비교표

주요 RAG 패턴 비교
패턴 적용 시점 품질에 미치는 영향 비용 / 지연 위험 및 한계
Classic RAG 동질적인 데이터베이스에 대한 PoC 및 간단한 Q&A 기본 수준; embedding 품질에 크게 의존[1] 낮음 표현 방식에 민감; 비관련 컨텍스트 위험
Hybrid Retrieval 대부분의 프로덕션 시나리오; 코드·약어·ID가 많은 경우 재현율 향상; 정확한 용어 커버[5][6][7] 낮음/중간 퓨전 가중치 조정 필요; 두 개의 인덱스 유지
Re‑ranking 높은 정밀도가 중요한 경우 상위 k에서 precision 상당히 향상[8][9] 중간/높음 추가 지연/비용 발생
Multi‑Query 짧거나 다면적인 쿼리 recall 향상[3] 중간 중복되거나 노이즈가 많은 변형 생성 가능
HyDE "의미론적 간극"이 큰 짧거나 모호한 쿼리 zero‑shot 검색 품질 향상[4] 중간 "가상의" 텍스트 품질에 의존
Query Routing 여러 소스(문서 DB, SQL, API, 웹) 올바른 소스 선택으로 관련성 향상[10] 중간 라우팅 오류 = 검색 실패
Agentic/Web RAG 복잡하고 탐색적인 다단계 쿼리 선형 파이프라인 범위를 넘어선 과제 해결[11][12] 높음 복잡성, 루프 위험; 가드레일 필요

실제 구현 및 아키텍처

도입 단계

  1. Proof of Concept (PoC): 제한적이지만 대표성 있는 데이터셋으로 Classic RAG를 시작하여 embedding 품질과 기본 검색을 검증한다[1].
  2. Minimum Viable Product (MVP): "노력 대비 효과" 최적의 조합인 Hybrid RetrievalRe‑ranking을 도입한다[5][8].
  3. Production: 쿼리 변환(HyDE, Multi‑Query)을 추가하고, 필요 시 Query Routing을 적용한다. 가관측성(observability)(검색·재순위화·응답 로깅)과 A/B 테스트를 설정한다[3][10].

핵심 구성 요소

  • 청킹(Chunking): 품질에 가장 중요한 요소 중 하나다. 단순한 고정 크기 방식은 의미 단위를 자주 분리한다. 구조 지향적(마크업 기반) 또는 재귀적 분할기(문단 → 문장 → 단어)를 권장한다[17][18].
  • Embedding 및 메타데이터: 각 청크에 document_id, 페이지/섹션, 제목, 날짜를 함께 저장한다. 이는 필터링과 정확한 출처 인용에 필수적이다.
  • 하이브리드 검색 및 재순위화: 퓨전(또는 RRF)을 활용한 BM25+벡터를 사용하고, 소규모 후보 풀에 대해 크로스 인코더로 재순위화를 수행한다[5][6][8].
  • 컨텍스트 패키징: 긴 코퍼스에는 Map‑Reduce, Refine 또는 Tree‑of‑Chunks를 선택한다[16][18].

일반적인 실수 (안티패턴)

  • 벡터 검색만 사용하고 BM25 없음 → 코드·ID·약어에서 검색 실패[5][7].
  • 청크 크기가 너무 크거나 작음 → 컨텍스트 손실 또는 embedding "희석"[17].
  • 프로덕션에서 재순위화 없음 → LLM이 노이즈가 많은 컨텍스트를 수신[8].
  • 가관측성 및 출처 추적 없음 → 오류 원인 분석 불가능(RAG 평가 참조).

품질 평가 및 지표

평가는 검색기 수준(오프라인)과 엔드투엔드(생성) 수준에서 수행된다.

검색기 지표

  • Hit Rate, Recall@k, MRR — 관련 문서의 커버리지와 순위 위치.
  • Context Precision & Recall — 검색된 컨텍스트가 "노이즈" 없이 필요한 내용을 얼마나 잘 커버하는지 (RAGAS에 구현됨)[19].

생성기 지표 (엔드투엔드)

  • Faithfulness / Groundedness — 응답이 제공된 컨텍스트에 얼마나 부합하는지.
  • Answer Relevancy (답변 관련성) — 원래 질문과의 일치 정도.

지표 자동화를 위해 오픈소스 프레임워크가 활용된다: RAGAS, TruLens (RAG triad: 컨텍스트 관련성, groundedness, 답변 관련성), DeepEval[20][21].

같이 보기

  • Retrieval-Augmented Generation (RAG)
  • 벡터 데이터베이스
  • Embedding
  • AI 에이전트
  • GraphRAG
  • MM-RAG
  • LLM 평가 및 benchmark

참고 문헌

  • Lewis, P., Perez, E., et al. (2020). Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks. NeurIPS. arXiv:2005.11401.
  • Fan, W., Ding, Y., et al. (2024). A Survey on RAG Meeting LLMs: Towards Retrieval-Augmented Large Language Models. KDD. DOI:10.1145/3637528.3671470; arXiv:2405.06211.
  • Gao, L., Ma, X., Lin, J., Callan, J. (2023). Precise Zero‑Shot Dense Retrieval without Relevance Labels (HyDE). ACL 2023. ACL Anthology; arXiv:2212.10496.
  • Nogueira, R., Cho, K. (2019). Passage Re‑ranking with BERT. arXiv:1901.04085.
  • Weaviate Docs. Hybrid search (BM25+Vector). [1].
  • Qdrant Docs. Hybrid Queries. [2].
  • Milvus Docs. Full‑Text Search / Hybrid Search. [3] / [4].
  • LangChain Docs. MultiQueryRetriever. [5].
  • Cohere Docs. Rerank — best practices. [6].
  • LlamaIndex Docs. Routing (query routers/selectors). [7].
  • Yao, S., et al. (2023). ReAct: Synergizing Reasoning and Acting in Language Models. ICLR. arXiv:2210.03629.
  • Nakano, R., et al. (2021). WebGPT: Browser‑assisted question‑answering with human feedback. arXiv:2112.09332.
  • Microsoft Research Blog. GraphRAG: Unlocking LLM discovery on narrative private data. (2024). [8].
  • Microsoft Research. Project GraphRAG. (2024). [9].
  • Yu, S., et al. (2024). VisRAG: Vision‑based Retrieval‑augmented Generation on Multi‑modality Documents. arXiv:2410.10594.
  • Sarthi, P., et al. (2024). RAPTOR: Recursive Abstractive Processing for Tree‑Organized Retrieval. arXiv:2401.18059.
  • Es, S., et al. (2024). RAGAs: Automated Evaluation of Retrieval Augmented Generation. EACL (Demo). [10].
  • TruLens Docs. RAG Triad. [11].
  • DeepEval (GitHub). The LLM Evaluation Framework. [12].
  • LangChain Docs. RecursiveCharacterTextSplitter. [13].
  • LlamaIndex Docs. HierarchicalNodeParser; Response Synthesis (Tree/Refine). [14]; [15].

주석

  1. 1.0 1.1 1.2 1.3 Lewis, P., Perez, E., et al. (2020). Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks. NeurIPS. arXiv:2005.11401.
  2. Fan, W., Ding, Y., et al. (2024). A Survey on RAG Meeting LLMs: Towards Retrieval-Augmented Large Language Models. KDD. DOI:10.1145/3637528.3671470; arXiv:2405.06211.
  3. 3.0 3.1 3.2 LangChain Docs. MultiQueryRetriever. https://python.langchain.com/docs/how_to/MultiQueryRetriever/
  4. 4.0 4.1 Gao, L., Ma, X., Lin, J., Callan, J. (2023). Precise Zero‑Shot Dense Retrieval without Relevance Labels. ACL 2023. arXiv:2212.10496; ACL Anthology: 2023.acl‑long.99.
  5. 5.0 5.1 5.2 5.3 5.4 Weaviate Docs. Hybrid search (BM25+Vector). https://docs.weaviate.io/weaviate/concepts/search/hybrid-search
  6. 6.0 6.1 6.2 Qdrant Docs. Hybrid Queries. https://qdrant.tech/documentation/concepts/hybrid-queries/
  7. 7.0 7.1 7.2 Milvus Docs. Full‑Text Search и Hybrid Search. https://milvus.io/docs/full-text-search.md; https://milvus.io/docs/hybrid_search_with_milvus.md
  8. 8.0 8.1 8.2 8.3 8.4 Nogueira, R., Cho, K. (2019). Passage Re‑ranking with BERT. arXiv:1901.04085.
  9. 9.0 9.1 Cohere Docs. Rerank — best practices. https://docs.cohere.com/docs/reranking-best-practices
  10. 10.0 10.1 10.2 LlamaIndex Docs. Routing (query routers/selectors). https://docs.llamaindex.ai/en/stable/module_guides/querying/router/
  11. 11.0 11.1 Yao, S., et al. (2023). ReAct: Synergizing Reasoning and Acting in Language Models. ICLR 2023. arXiv:2210.03629.
  12. 12.0 12.1 Nakano, R., et al. (2021). WebGPT: Browser‑assisted question‑answering with human feedback. arXiv:2112.09332.
  13. Microsoft Research Blog. GraphRAG: Unlocking LLM discovery on narrative private data. 2024. https://www.microsoft.com/en-us/research/blog/graphrag-unlocking-llm-discovery-on-narrative-private-data/
  14. Microsoft Research. Project GraphRAG. https://www.microsoft.com/en-us/research/project/graphrag/
  15. Yu, S., et al. (2024). VisRAG: Vision‑based Retrieval‑augmented Generation on Multi‑modality Documents. arXiv:2410.10594; OpenReview: zG459X3Xge.
  16. 16.0 16.1 Sarthi, P., et al. (2024). RAPTOR: Recursive Abstractive Processing for Tree‑Organized Retrieval. arXiv:2401.18059.
  17. 17.0 17.1 LangChain Docs. RecursiveCharacterTextSplitter. https://python.langchain.com/docs/how_to/recursive_text_splitter/
  18. 18.0 18.1 LlamaIndex Docs. HierarchicalNodeParser и Tree Summarization. https://docs.llamaindex.ai/en/stable/api/llama_index.core.node_parser.HierarchicalNodeParser.html; https://docs.llamaindex.ai/en/stable/examples/low_level/response_synthesis/
  19. Es, S., et al. (2024). RAGAs: Automated Evaluation of Retrieval Augmented Generation. EACL (Demo). https://aclanthology.org/2024.eacl-demo.16/
  20. TruLens Docs. RAG Triad. https://www.trulens.org/getting_started/core_concepts/rag_triad/
  21. DeepEval (GitHub). https://github.com/confident-ai/deepeval