RAG 검색 전략은 어떻게 설계하는가 — 3층 구조

← 전체 목차 · 이전: BM25와 벡터 검색은 도대체 무엇이 다른가 · 다음: 쿼리 재작성은 왜 함부로 하면 안 되나

기술 명사를 늘어놓지 말고 목표를 먼저 밝힐 것. RAG 검색이 쫓는 것은 두 글자다 — 정확함완전함. 그런데 이 둘은 본질적으로 모순된다.

목표정의반례
정확함리콜된 내용이 반드시 질문과 관련될 것사용자가 주문을 물었는데 재고를 찾아준다
완전함핵심 정보를 빠뜨리지 말 것, 특히 다각도·다증거가 필요한 질문에서증거의 절반만 건져 온 채 모델에게 답하게 한다
  • 많이 리콜하면 → 노이즈가 많다.
  • 적게 리콜하면 → 핵심 증거를 놓친다.
  • 결론: 진짜 실제로 돌아가는 RAG는 "벡터 검색 하나 붙이면 끝"이 아니라 계층 설계다.
Query
 ├─ 1층 리콜층(다경로 리콜, 「완전함」 추구)
 ├─ 2층 융합층(통일 정렬, 점수 비교 불가 문제 해결)
 └─ 3층 정밀 정렬층(Re-rank, 「정확함」 추구) → 대규모 모델에 전달

1층: 리콜층 — 단일 경로 검색을 맹신하지 말 것

이 층은 특별히 정확할 것을 추구하지 않고 **"관련 가능성이 있는 내용을 최대한 건져 올리는 것"**만 추구한다.

리콜 경로우위적용/한계
벡터 검색의미 이해력이 강하다. 사용자가 "환불은 어떻게 하나요"라고 묻고 문서에는 "애프터서비스 환불 절차"라고 쓰여 있어도, 단어가 달라도 의미가 가까우면 리콜된다고유명사, 모델명, 브랜드, 주문 번호, 인터페이스명 같은 정확 정보에는 반드시 믿을 만하지 않다(급소)
키워드 검색벡터의 급소를 보완, 정확 매칭의미 일반화 없음
구조화 필터업무 라인 / 시간 범위 / 카테고리 / 권한 범위로 먼저 거른다메타데이터 필드가 있어야 한다
그래프 검색엔티티 관계, 다단계 관계 문제 처리복잡한 시나리오에서만 도입

리콜층의 핵심 로직: 서로 다른 시점에서 후보 문서를 최대한 완전하게 건져 올린다.

2층: 융합층 — 여러 경로의 점수는 비교할 수 없다

문제: 벡터 검색에는 자체 점수가 있고 키워드 검색에도 자체 점수가 있는데, 두 점수는 같은 체계가 아니어서 직접 비교할 수 없다.

  • 가장 단순한 방안: 가중 융합벡터 검색 × 0.7 + 키워드 검색 × 0.3 → 종합 점수 → 다시 한 번 정렬.
  • 핵심 주의: 가중치를 절대 하드코딩하지 말 것. 통일된 표준 답이 없으며 업무·데이터·질문 유형이 다르면 최적 가중치도 반드시 다르다.
  • 더 성숙한 방안: 과거 클릭 + 사람 라벨링 + 문답 효과학습 순위(LTR) 모델 또는 융합 정렬 모델을 학습시킨다.

융합층의 요점은 결과를 이어 붙이는 것이 아니라 여러 경로의 검색 결과를 어떻게 통일해서 정렬할 것인가를 해결하는 것이다.

3층: 정밀 정렬층 — RAG 시스템의 상한을 결정한다

  • 다경로 리콜은 50편, 심지어 100편의 문서를 건져 올 수 있는데 전부 대규모 모델에 던지면 안 된다: ①너무 비싸고 ②너무 느리고 ③노이즈가 많아 오히려 답변을 방해한다.
  • 해법: Re-rank 정밀 정렬 모델을 도입해 Query와 Doc의 의미 관련성을 깊이 계산하고 가장 관련 있는 Top 5~10만 남긴다.
  • 정밀 정렬층은 "충분히 정확함"을 추구하며, 이 단계를 잘하면 RAG 답변 품질이 한 등급 뚜렷이 올라간다.

가점 요소 3종

① 동적 리콜 수량

질문 유형예시권장 리콜량
단순 사실 질문"환불은 며칠 만에 입금되나요"Top 5~10
복잡 추론·분석다단계 / 비교 / 총괄Top 50+

전제 조건: 의도 인식 + 질문 복잡도 판단을 먼저 하고 나서 얼마를 가져올지 결정한다.

② Query 재작성과 확장

  • 사용자의 질문은 대개 전문적이지 않고 불완전하다.
  • 예: "이 돈 어떻게 돌려받아요" → "환불 절차", "환불 조건", "환불 입금 시간"으로 재작성·확장.
  • 수익: 리콜 품질이 직접 올라간다. (경계는 문서 07 참조)

③ 검색 공간을 먼저 압축한 뒤 정밀 검색

  • 문서량이 특별히 많을 때 처음부터 전체 라이브러리에서 검색하지 말 것.
  • 1단계: 다차원 거친 필터 — 업무 도메인 / 카테고리 / 장·절 / 권한 / 시간 범위.
  • 2단계: 좁혀진 범위에서 벡터 검색 + 키워드 검색.
  • 수익: 효율이 높아지고 효과도 더 안정적이다.

전체 검색 링크

사용자 Query

   ├─[0] 의도 인식 + 복잡도 판단  → 동적 top_k 결정(단순 사실 5~10 / 복잡 추론 50+)
   ├─[0] Query 재작성과 확장       → "이 돈 어떻게 돌려받아요" → 환불 절차 / 조건 / 입금 시간

   ├─[1] 다차원 거친 필터(검색 공간 압축)
   │      업무 도메인 / 카테고리 / 장·절 / 권한 / 시간 범위

   ├─[2] 리콜층(다경로 병렬, 완전함 추구)
   │      ├── 벡터 검색      (의미 근접)
   │      ├── 키워드 검색    (모델명 / 주문 번호 / 인터페이스명 등 정확 정보)
   │      ├── 구조화 필터    (업무 라인 / 시간 / 카테고리 / 권한)
   │      └── 그래프 검색    (엔티티 관계 / 다단계 추론, 복잡 시나리오에서만)
   │            ↓ 후보 50~100편

   ├─[3] 융합층(통일 정렬)
   │      단순: 벡터 ×0.7 + 키워드 ×0.3 → 종합 점수 → 재정렬
   │      진급: LTR / 융합 정렬 모델(과거 클릭 + 사람 라벨링 + 문답 효과)

   ├─[4] 정밀 정렬층(Re-rank, 정확함 추구)
   │      Query × Doc 의미 관련성 심층 계산 → Top 5~10만 보존

   └─→ 대규모 모델 생성

핵심 통찰

  1. 목적 함수를 먼저 주고 나서 기술을 고를 것 — "정확함과 완전함"은 측정 가능한 한 쌍의 목표다(Precision / Recall에 근사). 어떤 검색 컴포넌트든 그 존재 이유가 **"정확함을 올리는가 완전함을 올리는가"**에 답할 수 있어야 하며, 그러면 답변에 자연히 구조가 생기고 명사 나열을 피할 수 있다.
  2. 정확함과 완전함의 모순은 "파라미터 조정"이 아니라 "계층화"로 풀어야 한다 — 단층 검색에서 top_k를 조정하는 것은 정확함과 완전함 사이를 미끄러지는 것뿐이다. 계층화는 "완전함 추구"와 "정확함 추구"를 서로 다른 단계로 쪼개 앞은 느슨하게 뒤는 조이게 함으로써 둘을 동시에 얻는다. 검색/추천 분야의 "리콜 – 거친 정렬 – 정밀 정렬" 깔때기 패러다임을 RAG에 그대로 옮긴 것이다.
  3. 단일 경로 검색에는 반드시 사각지대가 있고, 사각지대는 데이터 형태가 결정한다 — 벡터는 의미 근사(환불 ↔ 애프터서비스 환불)에 강하지만 식별자 계열 정보(모델명, 주문 번호, 인터페이스명, 브랜드)에는 실효한다. 이런 token은 의미 공간에서 변별력이 극히 낮기 때문이다. 키워드 경로를 추가할지 여부는 코퍼스에 이런 필드가 있는지를 보면 된다.
  4. 다경로 리콜의 진짜 난점은 "리콜"이 아니라 "병합"이다 — 서로 다른 검색 경로의 점수 분포는 출처도 척도도 다르므로 직접 크기를 비교하는 것은 틀렸다. 융합층은 중복 제거를 위해서가 아니라 비교 가능성 문제를 풀기 위해 존재한다.
  5. 가중치는 업무 파라미터이지 상식 상수가 아니다 — 0.7/0.3은 시작 자세일 뿐이며, "업무·데이터·질문 유형이 다르면 최적 가중치가 다르다"를 인정하고 과거 클릭·사람 라벨링·문답 효과로 정렬 모델을 학습시키는 진급 경로를 함께 제시해야 한다. 자기가 준 경험값을 스스로 부정하는 것은 감점이 아니라 가점이다.
  6. 정밀 정렬이 상한을 결정하고 리콜이 하한을 결정한다 — 리콜층에서 빠뜨린 내용은 이후 영원히 되살릴 수 없고(하한 결정), 정밀 정렬은 최종적으로 모델에 넘기는 신호 대 잡음비를 결정한다(상한 결정). 자원이 제한적이면 먼저 리콜 누락을 막고 그다음에 정밀 정렬을 보완할 것.
  7. 모델에 주는 컨텍스트는 "비싸고, 느리고, 시끄럽다" 세 겹의 비용을 함께 계산해야 한다 — 정밀 정렬 없이 100편을 그대로 밀어 넣는 대가는 돈과 지연만이 아니라 노이즈 오염으로 인한 답변 품질 저하다.
  8. 검색 공간 압축은 "구조화 메타데이터"의 승리다 — 문서에 업무 도메인/카테고리/장·절/권한/시간 필드만 있으면 다차원 거친 필터로 리콜 품질과 지연을 동시에 개선할 수 있다. RAG 수익의 상당 부분이 검색 시점의 알고리즘이 아니라 적재 시점의 메타데이터 설계에서 온다.

엔지니어링 실전 Tips

  • 단일 경로 검색을 맹신하지 말 것: 벡터 검색은 기준선이지 전부가 아니다. 정확 식별자가 있는 코퍼스에는 반드시 키워드 경로를 붙일 것.
  • 가중 융합의 가중치를 설정 파일에 둘 것: 업무/질문 유형별로 따로 조정하고, 오프라인 평가(과거 클릭, 사람 라벨링)로 이터레이션할 입구를 남길 것.
  • 후보량 통제: 50100편 리콜이 흔한 규모이며, 대규모 모델에 넘기기 전에 반드시 Top 510으로 압축해야 세 겹의 비용이 동시에 내려간다.
  • 동적 top_k가 고정 top_k보다 이득이다: 단순 사실 질문은 5~10이면 충분하고, 예산은 다단계/비교/총괄 유형에 남길 것.
  • Query 재작성은 대체식이 아니라 확장식으로: 하나의 구어체 질문을 여러 전문적 표현으로 확장해 병렬 리콜하는 편이 하나로 바꿔 쓰는 것보다 안정적이다.
  • 거친 필터 차원은 적재 메타데이터에 의존한다: 지금 문서에 업무 도메인/카테고리/장·절/권한/시간 필드가 없다면, 메타데이터를 먼저 보완하는 편이 모델을 바꾸는 것보다 가성비가 높다.
  • 권한 차원은 효율 최적화이자 보안 경계다: 권한 필터를 검색 링크의 가장 앞에 두어 월권 내용이 컨텍스트에 들어가는 것을 막을 것.
  • 더 파고들 방향: 고정 가중치 대신 RRF(Reciprocal Rank Fusion)로 "점수 비교 불가" 문제를 우회하기, Re-rank 모델 선택과 비용(cross-encoder의 지연 vs 효과), 리콜 평가 지표 실무 적용(Recall@k, 적중률, 사람 라벨링 집합 구축), 그래프 검색(GraphRAG)의 다단계 문답에서의 실제 수익과 그래프 구축 비용.