15장. 검색 품질 개선
왜 검색 품질을 따져야 하는가 — 검색이 못 찾으면 답도 틀린다
한 줄 요약
14장에서 만든 에이전트가 정확히 답하려면 먼저 질문에 필요한 내용을 검색해야 합니다. 정책 문서에 답이 있더라도 해당 청크를 찾지 못하면 모델은 그 내용을 안내할 수 없습니다. 이번 장에서는 기존 검색으로 답을 찾기 어려웠던 질문을 예로 들어, 검색 품질을 높이는 세 가지 방법을 차례로 적용하고 필요한 청크가 검색 결과의 상위에 나오는지 확인합니다.
1. 14장의 함수에 이 질문을 넣어 보면
고객이 이렇게 물었다고 합시다.
"광고랑 다른 게 왔어요"
정책 문서에는 이 경우의 규정이 있습니다. 반품·교환·환불 정책 제2조 표 1의 한 줄입니다.
반품 사유 신청 가능 기간 배송비 부담
표시·광고와 상이 수령 후 3개월 이내 회사 전액
14장의 answer_policy_question에 이 질문을 넣었을 때 검색된 청크입니다.
고객: 광고랑 다른 게 왔어요
[검색] 4개 청크:
- [제7조 (반품·교환 불가 사유), 제8조 (배송 지연 보상), 제9조 (분쟁 처리)] 제7조 (반품·교환 불가 사유) 다음 각 호에 ...
- [자주 묻는 질문 (FAQ), 부칙 — 개정 이력] 본 정책은 2026-06-15부터 시행되며, 시행 전 주문에는 종전 정책(v2.3)이 ...
- [제8조 (배송 지연 보상), 제9조 (분쟁 처리), 자주 묻는 질문 (FAQ)] 서 제외된다. 제9조 (분쟁 처리) 반품·교환·환불에 ...
- [제3조 (반품 신청 절차), 제4조 (교환), 제5조 (환불 처리 기간)] 행된다. 제4조 (교환) ① 동일 상품의 다른 색상·사이즈 ...
2. 무엇이 빠졌나
네 꼬리표 어디에도 제2조가 없습니다. 표 1이 들어 있는 청크(policy-006)는 벡터 검색에서 6위였고, 14장의 함수는 4위까지만 가져갑니다.
그래서 모델은 손에 있는 발췌(제4조와 FAQ의 "하자·오배송은 회사가 배송비를 전액 부담")로 배송비까지만 답했습니다. "수령 후 3개월 이내"라는 신청 기간은 발췌에 없으니 안내하지 못했습니다. 프롬프트를 아무리 다듬어도 이 답은 채워지지 않습니다. 모델 앞에 그 줄이 놓이지 않았기 때문입니다.
검색이 가져오지 못한 것은 생성 단계가 만회할 수 없습니다. 검색 품질이 RAG 전체 품질의 상한입니다.
이번 장을 마치면 같은 질문에 이렇게 답하게 됩니다(실습문제 3).
하루: 안녕하세요, 하루마켓 상담원 하루입니다. 표시·광고와 상이한 상품은 수령 후 3개월 이내에 신청하실 수 있으며, 배송비는 회사가 전액 부담합니다. (중략) (근거: 반품교환환불정책 · 제2조)
3. 왜 못 찾았나
고객은 "광고랑 다른 게 왔어요"라고 했고 문서는 "표시·광고와 상이"라고 적었습니다. 뜻은 같지만 말이 멉니다. 게다가 그 한 줄은 500자짜리 청크 안의 표 한 칸입니다. 청크 전체의 뜻은 "반품 사유별 기준과 신청 절차"여서, 짧은 구어체 질문과의 거리가 다른 청크보다 가깝게 나오지 않았습니다.
13장에서 "뜻으로 찾는 검색은 단어가 달라도 찾는다"고 했습니다. 대체로 그렇습니다. 그러나 언제나 그렇지는 않습니다.
4. 이번 장의 세 가지 방법
| 방법 | 한 줄 설명 | 고치려는 것 | 추가 비용 |
|---|---|---|---|
| 하이브리드 검색 | 뜻으로 찾은 결과와 단어로 찾은 결과를 합친다 | 벡터 검색이 놓친 청크를 후보에 넣기 | 없음 (내 컴퓨터에서 계산) |
| 쿼리 재작성 | 고객의 말을 문서의 말로 바꿔서 검색한다 | 구어체와 문서 용어의 거리 | LLM 1번 |
| 리랭킹 | 후보를 LLM이 읽고 순서를 다시 매긴다 | 정답 청크가 뒤 순위에 있는 것 | LLM 1번 |
쿼리(query) 는 검색에 넣는 질문 문장을 가리키는 말입니다.
세 방법은 따로 쓰지 않고 한 줄로 잇습니다.
질문 → 쿼리 재작성 → 하이브리드 검색(후보 6개) → 리랭킹 → 상위 3개
앞에서 넓게 모으고, 뒤에서 좁게 고르는 구조입니다.
5. 이걸 모르면 무엇을 판단하지 못하는가
- 답이 모자랄 때 프롬프트를 고칠지 검색을 고칠지 정하지 못합니다. 위의 답은 프롬프트로는 채워지지 않습니다. 발췌에 그 줄이 없기 때문입니다.
- 검색을 개선했다고 할 때 정말 나아졌는지 확인하는 방법을 알지 못합니다.
- 방법을 더할 때마다 LLM 호출이 몇 번 늘어나는지, 그 비용을 언제 치를 만한지 따지지 못합니다.
핵심 정리
- 정책 문서에 답이 있어도 검색이 그 청크를 가져오지 못하면 모델은 그 내용을 안내할 수 없습니다.
- "광고랑 다른 게 왔어요"에서 정답 청크는 벡터 검색 6위였습니다. 14장의 함수는 4위까지만 가져갑니다.
- 방법은 하이브리드 검색, 쿼리 재작성, 리랭킹 세 가지입니다. 넓게 모으고 좁게 고릅니다.