Tan Kim

retriever-routing

Retriever Routing

Retriever Routing은 RAG 파이프라인 내에서 쿼리의 특성을 분석하여 dense retriever, sparse retriever, hybrid retriever 등 가장 적합한 검색기를 런타임에 동적으로 선택하는 기법이다. RAG Routing이 인덱스나 도메인 수준의 분기라면, Retriever Routing은 검색 방식(알고리즘) 수준의 분기다.

핵심 개념

검색기(retriever)마다 강점이 다르기 때문에, 쿼리 유형에 따라 알맞은 검색기를 고르는 것이 정밀도를 크게 향상시킨다. Retriever Routing은 이 선택 과정을 자동화한다.

주요 Retriever 유형과 강점

Retriever 방식 강점
Sparse (BM25, TF-IDF) 키워드 매칭 정확한 용어·고유명사 검색
Dense (DPR, bi-encoder) 벡터 유사도 의미적 유사성, 동의어 처리
Hybrid Sparse + Dense 결합 균형 잡힌 성능
Learned Sparse (SPLADE) 희소 벡터 학습 Sparse의 속도 + Dense의 의미 이해
Multi-vector (ColBERT) 토큰별 벡터 세밀한 의미 매칭

라우팅 기준

Retriever Routing의 분기 기준은 쿼리가 어떤 성질을 갖느냐에 달려 있다.

키워드 중심 쿼리

"PostgreSQL VACUUM 명령어 옵션"처럼 정확한 용어를 포함할 때 → Sparse retriever가 유리. 벡터 임베딩은 이런 전문 용어를 희석시킬 수 있다.

의미 중심 쿼리

"데이터베이스 공간 회수 방법"처럼 개념을 설명하는 쿼리 → Dense retriever가 유리. 동의어·paraphrase를 처리할 수 있다.

혼합 쿼리

키워드와 의미가 모두 중요한 경우 → Hybrid retriever 또는 Multi-path로 두 결과를 병합.

구현 패턴

규칙 기반 분기

쿼리에 특수 용어, 코드, 숫자, 고유명사가 포함되면 Sparse, 그렇지 않으면 Dense로 라우팅한다.

import re
 
def route_retriever(query: str):
    has_exact_terms = bool(re.search(r'[A-Z]{2,}|\d+\.\d+|`[^`]+`', query))
    if has_exact_terms:
        return sparse_retriever
    return dense_retriever

분류 모델 기반 분기

쿼리를 "keyword-heavy" vs "semantic-heavy"로 분류하는 소형 모델을 학습해 사용한다. 레이블 데이터는 각 retriever별 검색 품질 평가로 자동 생성 가능하다.

Confidence 기반 에스컬레이션

Dense retriever의 top-1 스코어가 임계값 미만이면 Sparse retriever로 재검색한다.

result = dense_retriever.search(query)
if result.score < THRESHOLD:
    result = sparse_retriever.search(query)

앙상블과의 차이

Retriever Routing은 단일 retriever를 선택(select)하는 반면, 앙상블(ensemble)은 복수의 retriever를 항상 실행하고 결과를 병합(merge)한다. 라우팅은 비용 효율적이고 앙상블은 재현율이 높다.

관련 개념

  • RAG Routing: 인덱스·도메인 수준의 상위 라우팅
  • Hybrid Retrieval: Sparse + Dense를 결합하는 검색 방식
  • Tiered Retrieval: 비용-품질 트레이드오프에 따른 계층적 검색