본문 바로가기
Databricks/RAG

RAG 품질 ③ 아키텍처 — LangGraph 기반 Agentic RAG 검색 처리 흐름

by 여행을 떠나자! 2026. 7. 4.

📚 시리즈 — RAG 품질

 

 

1. 개요

본 에이전트는 LangGraph 기반 ReAct 구조로 동작합니다. 핵심은 두 노드의 반복(루프)입니다.

  • Agent 노드 — LLM(Gemini 3 Flash)이 검색 쿼리를 생성하거나 최종 답변을 작성합니다.
  • 검색 노드 — 하이브리드 검색(시맨틱 + 키워드)을 수행하고 Self-RAG 평가로 적합성을 판정합니다.

ReAct(Reasoning + Acting) 구조란 — LLM이 추론(Reasoning)으로 "다음에 무엇을 할지"를 판단하고 행동(Acting)으로 도구를 호출한 뒤, 그 결과(관찰)를 바탕으로 다시 추론하는 과정을 목표 달성까지 반복하는 에이전트 패턴입니다. 한 번의 질의응답으로 끝나는 단순 RAG와 달리, 검색이 부족하면 스스로 다시 검색하는 자율적 반복이 특징입니다. 본 에이전트에서는 Agent 노드의 추론(검색 필요 여부·검색 쿼리 판단)과 검색 노드의 행동·관찰(하이브리드 검색 실행 + Self-RAG 적합성 판정)이 번갈아 도는 루프가 ReAct 사이클에 해당합니다.

검색 결과가 충분하지 않으면 직전 문서를 제외하고 재검색하며, 충분하면 그 문서를 근거로 답변을 생성합니다. 검색 결과는 두 갈래로 전달됩니다 — 하나는 답변 생성을 위해 LLM 입력으로, 다른 하나는 화면 표시를 위해 검색 문서 목록·인용 출처로 사용됩니다.

기술 스택

  • 오케스트레이션 — LangGraph (ReAct · StateGraph / ToolNode)
  • 서빙·관측 — MLflow (ResponsesAgent 서빙, Tracing, Prompt Registry)
  • 검색 — Databricks Vector Search (HNSW ANN + Full-Text/BM25), Kiwi 형태소 분석, Qwen3 임베딩
  • LLM — Gemini 3 Flash (응답) / GPT-5-4-nano (Self-RAG Judge)
  • 저장소 — Delta 원본 테이블 + Spark (원문 조회)

 

2. 전체 흐름도

사용자 질문부터 하이브리드 검색 · Self-RAG 적합성 평가 · 재검색 루프를 거쳐 출처 기반 답변까지의 전체 처리 흐름입니다.

 

3. 단계별 상세

 

3.1 질의 입력과 Agent

  • 사용자가 질문을 입력하면 검색 범위 필터(문서 분류 기준)를 함께 지정할 수 있습니다. 검색 대상을 특정 문서군으로 한정하며, 미지정 시 전체를 검색합니다.
  • ① Agent (LLM · Gemini 3 Flash) 가 질문을 보고 검색이 필요하다고 판단하면 자연어 검색 쿼리를 생성합니다. 재검색 단계에서는 평가 결과의 힌트를 반영해 쿼리를 다시 작성합니다. 이 자연어 쿼리는 두 검색 채널(시맨틱·키워드)의 공통 입력이 됩니다.

 

3.2 하이브리드 검색

검색 도구는 두 검색을 병렬로 실행합니다. 두 검색이 쿼리를 다루는 방식이 다른 점에 유의합니다.

  • Vector Search (시맨틱) — ①이 생성한 원본 자연어 질의를 그대로 임베딩하여 의미 기반 ANN(HNSW) 검색을 수행합니다(형태소 재작성을 거치지 않음).
  • Full-Text Search (키워드) — 질의를 Kiwi 토크나이저로 형태소 분석·동의어 확장한 뒤 BM25 키워드 검색을 수행합니다. 이 전처리는 키워드 검색에만 적용됩니다.

①의 "검색 쿼리 생성"은 LLM이 무엇을 검색할지 자연어 질의를 만드는 단계이고, Kiwi 처리는 그 질의를 키워드 검색용 토큰으로 변환하는 전처리입니다. 둘은 역할이 다릅니다.

이어서 다음 순서로 처리합니다.

  1. 하이브리드 융합 — 두 검색의 점수를 Min-Max 정규화한 뒤 가중 합산하여 상위 문서를 정렬합니다.
  2. 원문 조회 — 검색으로 식별한 청크의 전체 본문과 메타데이터를 원본 테이블에서 조회해 결합합니다(Claim-Check 패턴).

 

3.3 Self-RAG 적합성 평가와 재검색

  • ③ Self-RAG 적합성 평가(Judge LLM) 가 후보 문서 전체를 한 번의 호출로 묶어 각 문서의 적합성(적합 / 부적합)과 검색 충분성(충분 / 불충분)을 동시에 판정합니다(문서별 개별 호출이 아닙니다).
  • 적합 판정된 문서만 최종 컨텍스트로 전달되므로, LLM에 전달되는 문서 수는 0~5건으로 가변입니다(num_results 상한).
  • 적합 문서가 0건이면 빈 컨텍스트를 막기 위해 융합 점수 상위 문서를 num_results건까지 보충(NOT_RELEVANT_SUPPLEMENTED)하고, 동시에 추가 검색이 필요함을 표시합니다.
  • 불충분(또는 적합 0건)으로 판정되면, 직전에 검색된 문서를 제외하고 평가 힌트(REASON)를 반영해 재검색합니다.
  • 재검색은 최대 2회로 제한됩니다. 한도에 도달하면 더 이상 검색하지 않고 확보된 문서로 답변을 작성합니다.

 

3.4 응답 생성과 출력

  • 검색 결과가 충분하면 ④ Agent (LLM · Gemini 3 Flash) 가 해당 문서를 근거로 최종 답변을 생성합니다. ①과 ④는 동일한 응답 LLM(같은 Agent 노드)이며, 별도 LLM은 Self-RAG 평가(③ · GPT-5-4-nano)뿐입니다.

LLM 호출 횟수 — 기본 경로(검색 1회로 충분)에서 응답 LLM(Gemini 3 Flash)은 2번 호출됩니다(① 쿼리 생성 → ④ 최종 답변). 재검색이 발생하면 3번(① → 재검색 쿼리 → ④)이 됩니다. Self-RAG Judge(GPT-5-4-nano)는 검색 라운드 수만큼(1~2회) 호출됩니다. - 응답은 두 가지로 구성됩니다. - 답변 본문 — 실제로 인용한 출처를 본문에 함께 표기합니다. - 검색된 문서 목록 · 참고 출처 — 검색 단계에서 확보한 문서 목록을 별도로 제공합니다.

 

4. 주요 파라미터

구분 설정값 비고
응답 LLM databricks-gemini-3-flash 장애 시 databricks-claude-sonnet-4-6 로 폴백
임베딩 databricks-qwen3-embedding-0-6b 시맨틱 검색용
검색 결과 수 검색기별 Top-K = 10 → 최종 5건 top_k=10, num_results=5
융합 방식 Min-Max 정규화 + 시맨틱 가중치 0.5 fusion_method=min_max, semantic_weight=0.5
Self-RAG 평가 사용 (databricks-gpt-5-4-nano) 적합성·충분성 판정
Judge 컨텍스트 상한 문서당 최대 40,000자 judge_doc_max_chars=40000
재검색 한도 최대 2회 max_iterations=2

 

5. 관련 문서

 

📚 시리즈 — RAG 품질

댓글