Skip to content

검색 (Retrieval)

RAG에서 답의 뼈대를 만드는 단계가 검색(Retrieval) 입니다. 질문을 벡터로 바꾸거나 키워드로 깎아, 저장된 문서 조각 중 가장 관련 높은 상위 K개를 찾는 일이에요. 검색이 몇 개를, 얼마나 정확히 뽑느냐에 따라 생성되는 답의 품질이 갈립니다.

검색 방식은 크게 의미(시맨틱) 검색, 키워드(어휘) 검색, 그리고 둘을 합친 하이브리드 검색으로 나뉩니다. 이 페이지는 소스 문서 Qdrant Hybrid Queries 를 바탕으로 설명합니다.


상황부터 — 한 가지 방식만으론 부족한 이유

의미 검색만 쓰면 "memo"와 "note"처럼 뜻은 같아도 맥락이 다른 문서가 섞입니다. 키워드 검색만 쓰면 단어가 안 겹치는 유사 문장("휴가" ↔ "연차")을 못 찾아요. 그래서 두 방식을 함께 쓰고, 서로 다른 순위를 하나로 합치는 게 현실적인 답입니다.


핵심 개념

의미(시맨틱) 검색 — 조밀 벡터

문장을 임베딩 모델로 조밀 벡터(dense vector) 로 바꾸고, 질문 벡터와 가장 가까운 조각을 찾습니다. 코사인 유사도 같은 거리 함수로 재고, 단어가 달라도 의미가 같으면 가깝게 나옵니다. 우리는 텍스트 임베딩으로 OpenAI text-embedding-3-small 을 씁니다.

키워드(어휘) 검색 — 희소 벡터 / BM25

정확한 단어·코드·약어를 잡는 방식입니다. 희소 벡터(sparse vector)로 표현하거나 BM25 점수화로 처리해, 문서 안에서 그 단어가 얼마나 자주·드물게 나오는지로 관련도를 매깁니다.

하이브리드 검색과 순위 합성

두 방식의 결과를 하나로 합쳐야 하는데, 점수 단위가 서로 달라 그대로 더할 수는 없어요. 그래서 RRF(Reciprocal Rank Fusion) 같은 순위 합성을 씁니다. Qdrant에서는 dense/sparse 검색을 prefetch로 각각 실행하고 rrf 쿼리로 합칩니다. 각 검색의 순위만으로 섞기 때문에 점수 척도 차이는 무시돼요.

Top-K와 비용

검색 결과 중 상위 K개만 이후 단계로 넘깁니다. K가 크면 정확하지만 생성 단계 토큰·비용이 늘고, 작으면 빠르지만 필요한 근거를 놓칠 수 있어요. 그래서 K로 비용과 품질의 균형을 맞춥니다.


사용 사례 / 실제 적용

  • 멀티테넌트 검색 — 테넌트마다 컬렉션을 나눠 검색 범위를 그 컬렉션으로만 한정합니다.
  • 하이브리드 검색 — 정책 문서처럼 정확한 용어와 유사 문장이 섞인 문서는 키워드+의미를 함께 쓰고 RRF로 합칩니다.
  • 메타데이터 필터링 — 벡터 계산 전에 문서 종류·날짜 필터를 적용해 후보를 줄이고 비용·지연을 낮춥니다.
  • Top-K 후보 전달 — 검색 결과 상위 K개를 재순위화·생성 단계로 넘깁니다.

더 알아보기