Category
외부 문서를 검색해 모델 컨텍스트에 넣어 답하게 하는 방식이다. 모델이 모르는 사내 데이터나 최신 정보를 환각 없이 다루는 표준 수단이 됐다. 성패는 모델보다 청킹·임베딩·검색 품질에서 갈리며, 잘못된 컨텍스트는 오히려 그럴듯한 오답을 만든다.
RAG 파이프라인에 크로스인코더 리랭커(bge-reranker-v2-m3 류)를 끼우는 게 기본기처럼 굳어졌지만, 측정해 보면 효과가 갈린다. 1차 검색이 Recall@50에서 이미 정답을 못 물어온 경우 리랭커는 없는 정답을 만들어내지 못한다. 즉 리랭커는 순위 재배열일 뿐 회수율 자체를 못 올린다. 그런데 크로스인코더는 쿼리·문서 쌍을 매번 동시 인코딩해 50개 후보를 리랭킹하면 dense 검색 대비 100~300ms가 더 붙는다. 실무 결론은 단순하다. 1차 검색 Recall@k를 먼저 끌어올린 뒤, 상위 후보가 충분히 정답을 포함할 때만 리랭커로 NDCG를 다듬는다. top-k를 무작정 키워 리랭커에 떠넘기면 비용만 는다.
KURE-v2(고려대)와 bge-m3를 한국어 도메인 코퍼스에서 Recall@10으로 붙이면, 일반 위키·뉴스에선 bge-m3가 다국어 강건성으로 앞서지만 법률·의료처럼 한국어 고유 표현이 많은 도메인에선 KURE-v2가 5~9%p 앞서는 패턴이 반복된다. 핵심은 bge-m3의 dense·sparse·ColBERT 3중 출력을 하이브리드로 묶으면 단일 dense 대비 검색 누락이 줄지만, 한국어 형태소 경계가 깨진 토크나이저 위에서 sparse가 오히려 노이즈를 키운다는 점이다. 1024차원 bge-m3는 pgvector HNSW 인덱스 메모리를 적잖이 먹어, 도메인 적합도와 인프라 비용을 같이 저울질해야 한다.