"RAG 핵심 학습 (19/26) — Query Routing: Multi-Retriever·Collection 라우팅"

질문을 잘 고친 뒤에도 남는 핵심은 이것이다. "어느 문서군에서, 어느 검색기로 찾게 할 것인가?"

Query Routing은 질문을 보고 적절한 retriever, collection, filter, fallback 경로를 선택하는 단계다. 17편이 질문 유형을 나눴고 18편이 질문을 더 잘 찾히게 바꿨다면, 19편은 그 질문을 올바른 검색 공간으로 보내는 문제를 다룬다. RAG에서 검색 품질은 "무엇을 찾느냐" 못지않게 "어디에서 찾느냐"에 달려 있다.


0. Prerequisites

  • 17편 query classification
  • 18편 query rewrite
  • 3편 ingestion 설계의 filter-first retrieval

1. 학습 목표

  1. query routing의 역할을 설명한다.
  2. collection routing과 retriever routing의 차이를 구분한다.
  3. filter-first 구조가 왜 중요한지 이해한다.
  4. fallback 전략이 필요한 이유를 안다.

2. 핵심 요약

Routing은 질문을 "전체 검색 공간"에 던지지 않고, 먼저 맞는 문서군과 검색기로 보낸다. collection routing은 어느 문서 묶음에서 찾을지를 정하고, retriever routing은 dense, sparse, hybrid 중 무엇을 우선 쓸지를 정한다. 이 구조는 latency를 줄이고 precision을 높인다. 핵심 원칙은 classify → route → retrieve → fallback이다. 제대로 된 routing이 없으면 RAG는 작은 성능 이득을 위해 거대한 검색 공간 전체를 뒤지는 비효율에 빠진다.


3. 직관 — 같은 질문도 문서군이 다를 수 있다

질문: "외부 공유 예외는 누가 승인하는가?"

가능한 문서군: - 정책 문서 - 교육용 문서 - 회의록 - 법무 해설

정답이 가장 신뢰할 만한 곳은 보통 "현재 유효한 정책 문서"다. Routing은 이 우선순위를 파이프라인에 명시한다.


4. 정의 — routing의 핵심 용어

용어 정의
Collection Routing 어느 문서군이나 인덱스에서 찾을지 선택
Retriever Routing dense, sparse, hybrid 중 어떤 검색기를 쓸지 선택
Filter-first Retrieval 먼저 필터로 검색 공간을 줄이고 그 안에서 retrieval 수행
Fallback Retriever 1차 검색 실패 시 대체로 시도할 검색 경로
Source Authority 같은 내용이라도 어떤 출처를 우선 신뢰할지에 대한 규칙

5. 구조 — routing은 검색 전의 의사결정층이다

질문이 들어오면 보통 다음 순서를 탄다.

  1. 질문 유형 분류
  2. source / collection 후보 결정
  3. metadata filter 구성
  4. retriever 선택
  5. 실패 시 fallback 경로 실행

이때 routing은 answer를 만들지 않는다. 다만 답을 찾을 수 있는 공간을 좁히는 판단을 한다.


6. 원리 워크스루 — 규칙 기반 라우터의 최소 형태

6.1 collection routing

def choose_collection(query_type, query):
    if query_type == "time_sensitive":
        return "latest_policies"
    if "회의록" in query:
        return "meeting_notes"
    if query_type == "proper_noun":
        return "official_docs"
    return "general_knowledge"

6.2 retriever routing

def choose_retriever(query_type):
    if query_type == "proper_noun":
        return "sparse"
    if query_type == "comparison":
        return "hybrid"
    return "dense"

6.3 fallback 전략

result = run_primary_route(query)
if result.confidence < 0.45:
    result = run_fallback_route(query, retriever="hybrid", collection="general_knowledge")

자기 설명: routing이 retrieval보다 앞에 있어야 하는 이유를 한 문장으로 답해 보라.


7. 변형과 사례

7.1 Source-based Routing

정책, 법령, 제품 매뉴얼처럼 출처가 중요한 도메인에서는 source authority가 핵심이다. "정답일 가능성이 높은 문서군"을 먼저 고르는 방식이다.

7.2 Multi-retriever Routing

질문이 고유명사형이면 sparse, 정의형이면 dense, 애매하면 hybrid를 기본값으로 두는 패턴이다. 구현은 단순하지만 실무 효율이 높다.

7.3 Learned Router

충분한 로그가 쌓이면 LLM이나 작은 classifier로 route 자체를 예측할 수 있다. 다만 해석 가능성이 떨어지고 drift 관리가 필요하다.


8. 한계와 실패 양상

8.1 잘못된 라우팅은 좋은 검색기도 망친다

질문을 잘못된 collection으로 보내면 그 안에서는 아무리 잘 검색해도 답을 찾지 못한다.

8.2 규칙이 너무 많아지면 유지보수가 어렵다

예외 규칙이 많아질수록 시스템은 좋아지기보다 불투명해진다. 핵심 기준 5~10개를 넘기지 않는 편이 낫다.

8.3 fallback 없는 라우팅은 brittle하다

1차 route가 틀렸을 때 재시도 경로가 없으면 질문 하나가 그대로 실패한다.

8.4 다음 단계 — 라우팅 이후 가중치를 동적으로 바꿔야 한다

이제 어떤 검색기를 쓸지 정했다면, 다음은 그 안에서 sparse와 dense 비중을 질문별로 조정하는 문제다. 20편이 그 단계다.


8.5 입문자가 자주 빠지는 함정 5선

# 함정 증상 빠른 점검
1 전체 코퍼스 단일 검색 precision 저하 collection 분리 여부 확인
2 fallback 없음 단일 route 실패 시 그대로 종료 secondary path 정의
3 source authority 무시 블로그 해설이 원문보다 우선됨 source rank 도입
4 query type 미활용 routing 효과 약함 classification 연동
5 route 결과 미기록 장애 분석 불가 trace에 route 저장

9. 정리된 결론 — 보지 않고 답해 보라

Q1. collection routing은 무엇을 정하는가?

정답 어느 문서군이나 인덱스에서 검색할지를 정한다.
정답일 가능성이 높은 검색 공간을 먼저 좁히기 위해서다.

Q2. retriever routing은 무엇을 정하는가?

정답 dense, sparse, hybrid 중 어느 검색기를 우선 쓸지 정한다.
질문 유형마다 강한 검색기가 다르기 때문이다.

Q3. fallback이 필요한 이유는?

정답 1차 route가 틀렸을 때 전체 질문 실패를 막기 위해서다.
routing도 또 하나의 추론이므로 오류 가능성이 있기 때문이다.


Cheat Sheet — 이 편의 식·정의 1페이지

정의 - Collection Routing: 문서군 선택 - Retriever Routing: 검색기 선택 - Fallback: 1차 경로 실패 시 대체 경로

최소 코드

collection = choose_collection(query_type, query)
retriever = choose_retriever(query_type)

언제 무엇을 | 질문 유형 | 기본 route | |---|---| | 최신 정책 | latest collection + filter | | 고유명사 | official docs + sparse | | 비교형 | hybrid |


참고 자료

보조 자료

  • 사용자 노트 35-6절 filter-first retrieval
  • 사용자 노트 16장 query routing

다음 편으로 이어지는 흐름

어느 경로로 보낼지 정했더라도, 아직 sparse와 dense의 비중은 고정일 수 있다. 다음 20편에서는 질문별로 두 신호의 가중치를 동적으로 조정하는 방법을 다룬다.

댓글

이 블로그의 인기 게시물

"LLM 핵심 학습 (1/6) — 기본: 토큰화·임베딩·어텐션·위치 인코딩"

"LLM 핵심 학습 (2/6) — 파인튜닝: LoRA·QLoRA·증류·Adapter"

"ML 기초 학습 (1/9) — 머신러닝과 sklearn: 학습의 좌표계"