Tan Kim

rag-routing

RAG Routing / Query Routing

RAG Routing은 입력 쿼리의 의도·도메인·복잡도를 분석해 가장 적합한 검색 경로로 동적으로 분기하는 기법이다. 단일 파이프라인으로 모든 쿼리를 처리하는 방식의 한계를 극복하고, 쿼리 유형별로 최적화된 경로를 선택함으로써 정밀도와 효율을 동시에 높인다.

핵심 개념

RAG Routing의 핵심은 "어떤 쿼리를 어디서 찾을 것인가"를 런타임에 결정하는 것이다. 라우터는 쿼리를 분류하는 분류기(classifier) 역할을 하며, 분류 결과에 따라 서로 다른 retriever, 인덱스, 또는 파이프라인으로 요청을 전달한다.

라우팅 기준

  • 도메인: 쿼리가 속하는 주제 영역 (법률, 의료, 기술 등)
  • 의도(intent): 사실 조회, 비교, 요약, 생성 등 목적
  • 복잡도: 단순 키워드 검색으로 해결 가능한지, 추론이 필요한지
  • 언어/형식: 자연어, 코드, 수식 등

라우터 구현 방식

라우터는 규칙 기반부터 LLM 기반까지 다양한 방식으로 구현한다.

규칙 기반 라우터

키워드 매칭이나 정규식으로 쿼리를 분류한다. 속도가 빠르고 예측 가능하지만 커버리지가 제한적이다.

def rule_based_router(query: str) -> str:
    if any(w in query for w in ["법", "계약", "소송"]):
        return "legal_index"
    if any(w in query for w in ["혈압", "약", "증상"]):
        return "medical_index"
    return "general_index"

임베딩 기반 라우터

쿼리 임베딩과 각 경로의 대표 임베딩 간 유사도를 계산해 가장 가까운 경로를 선택한다. 규칙 기반보다 일반화 성능이 높다.

LLM 기반 라우터

LLM에게 쿼리 분류를 위임한다. 유연성이 가장 높지만 레이턴시와 비용이 증가한다. 간단한 분류 프롬프트로 구현한다.

쿼리: "{query}"
위 쿼리가 속하는 카테고리를 하나만 선택하라: [technical, legal, medical, general]

분류 모델 기반 라우터

BERT 계열 소형 분류 모델을 파인튜닝해 라우터로 사용한다. LLM 대비 빠르고 저렴하며, 도메인 특화 분류에서 높은 정확도를 낸다.

라우팅 패턴

Single-path Routing

하나의 최적 경로만 선택한다. 가장 단순하며 레이턴시가 낮다.

Multi-path Routing

복수의 경로를 병렬로 실행한 뒤 결과를 병합한다. 재현율(recall)이 높아지지만 비용이 증가한다.

Cascading Routing

먼저 저렴한 경로를 시도하고, 결과 품질이 미달이면 상위 경로로 에스컬레이션한다.

장단점

항목 내용
장점 쿼리별 최적화, 불필요한 검색 비용 절감, 전문 인덱스 활용 가능
단점 라우터 자체의 오분류 위험, 파이프라인 복잡도 증가

관련 개념

  • Retriever Routing: 검색기(retriever) 수준의 라우팅
  • Multi-RAG Orchestration: 여러 RAG 파이프라인을 통합 조율하는 상위 개념
  • Federated Retrieval: 복수의 독립 데이터 소스에 동시 쿼리