"RAG 핵심 학습 (22/26) — Search Confidence와 Corrective RAG"
RAG가 실패하는 큰 이유는 "잘못 찾은 것을 잘못 찾았다고 모른 채" 답을 생성하는 데 있다.
Search Confidence는 현재 검색 결과를 얼마나 믿을 수 있는지 추정하는 단계다. Corrective RAG는 confidence가 낮을 때 재검색, query rewrite, 다른 retriever, 웹 fallback 같은 보정 동작을 수행하는 구조다. 이번 글은 retrieval failure를 "그냥 틀린 답"으로 끝내지 않고 교정 가능한 상태로 바꾸는 방법을 다룬다.
0. Prerequisites
- 21편 adaptive top-K
- 19편 query routing
- 18편 query rewrite
1. 학습 목표
- search confidence가 무엇인지 설명한다.
- confidence가 낮을 때 어떤 corrective action을 취할 수 있는지 안다.
- corrective RAG가 왜 중요한지 이해한다.
- 언제 멈추고 언제 재시도할지 기준을 생각할 수 있다.
2. 핵심 요약
RAG는 검색 품질이 낮아도 그 위에 답을 생성해 버리기 쉽다. 그래서 검색 결과의 확신도를 추정하고, 낮으면 재검색이나 경로 변경을 수행하는 corrective loop가 필요하다. confidence 신호는 score gap, dense/sparse agreement, source authority, query type, answer-grounding consistency 등이 될 수 있다. Corrective RAG는 한 번의 실패를 즉시 hallucination으로 연결하지 않고, "다시 찾아 볼 기회" 를 만든다는 점에서 중요하다.
3. 직관 — 애매한 top-1을 그대로 답으로 쓰면 생기는 일
질문: "현재 외부 공유 예외 승인권자는 누구인가?"
검색 결과 top-3: 1. 2023 정책 문서 2. 2022 회의록 3. 2024 교육 자료
셋 다 관련은 있지만 "현재"와 "정책 원문" 기준으로는 애매하다. 이 상태에서 바로 답하면 위험하다. confidence는 이런 애매함을 감지해야 한다.
4. 정의 — confidence와 corrective action
| 용어 | 정의 |
|---|---|
| Search Confidence | 현재 검색 결과를 신뢰할 수 있는 정도 |
| Corrective RAG | confidence가 낮을 때 검색을 수정하거나 재실행하는 구조 |
| Fallback | 대체 collection, 대체 retriever, 외부 검색 등 2차 경로 |
| Abstention | 답하지 않고 "근거 부족"을 선언하는 선택 |
5. 메커니즘 — confidence를 어디서 읽을까
대표 신호:
- top-1과 top-2 점수 차이
- dense와 sparse가 같은 문서를 지지하는가
- 상위 문서의 source authority가 높은가
- query type에 필요한 filter가 제대로 적용됐는가
- 생성 답변이 retrieved context와 잘 맞는가
confidence는 단일 숫자라기보다 여러 신호의 조합이다.
6. 원리 워크스루 — corrective loop의 최소 구조
6.1 confidence 계산 예시
def estimate_confidence(score_gap, overlap, has_authoritative_source):
score = 0.4 * score_gap + 0.3 * overlap + 0.3 * int(has_authoritative_source)
return min(1.0, score)
6.2 corrective action
if confidence < 0.4:
query = rewrite_query(query)
result = hybrid_search(query, top_k=12)
elif confidence < 0.6:
result = rerank_more_candidates(query, top_k=20)
else:
result = result
6.3 마지막 선택지: abstention
if confidence < 0.2:
return "근거가 충분하지 않아 현재는 확정적으로 답할 수 없습니다."
자기 설명: corrective RAG가 단순한 "재검색 버튼"이 아닌 이유를 한 문장으로 설명해 보라.
7. 변형과 사례
7.1 Rewrite-based Correction
질문이 너무 짧거나 표현이 어긋났을 때 18편의 rewrite를 다시 시도한다.
7.2 Route-based Correction
잘못된 collection으로 갔다고 판단되면 19편의 routing을 다시 수행한다.
7.3 Abstain-first Pattern
고위험 도메인에서는 애매한 답을 억지로 하지 않고, 근거 부족을 먼저 선언하는 전략이 더 낫다.
8. 한계와 실패 양상
8.1 confidence 추정이 틀릴 수 있다
높은 점수라도 틀릴 수 있고, 낮은 점수라도 맞을 수 있다. 그래서 confidence는 항상 경험적으로 검증돼야 한다.
8.2 corrective loop가 너무 길면 latency가 폭증한다
재검색, rerank, rewrite를 반복하면 사용자 경험이 나빠진다. 재시도 횟수 상한이 필요하다.
8.3 correction이 같은 오류를 반복할 수 있다
collection 자체가 잘못됐거나 source authority 설계가 틀리면 correction도 같은 공간 안에서만 맴돈다.
8.4 다음 단계 — 단일 문서 그래프를 넘는 관계 검색
confidence와 correction 이후에는 더 복잡한 연결 관계를 다루고 싶어진다. 23편은 graph RAG다.
8.5 입문자가 자주 빠지는 함정 5선
| # | 함정 | 증상 | 빠른 점검 |
|---|---|---|---|
| 1 | confidence 없이 바로 생성 | hallucination 증가 | score/authority 기록 |
| 2 | correction 무한 반복 | latency 폭증 | retry limit 설정 |
| 3 | abstention 없음 | 근거 부족 답변 강행 | low-confidence fallback 마련 |
| 4 | correction 원인 미분석 | 같은 실패 반복 | route/rewrite trace 비교 |
| 5 | source authority 미반영 | 약한 출처 우선 | authoritative source 규칙 추가 |
9. 정리된 결론 — 보지 않고 답해 보라
Q1. search confidence의 목적은?
정답 현재 검색 결과를 얼마나 믿을 수 있는지 판단하는 것이다.
왜 애매한 검색 결과 위에 바로 답을 생성하면 hallucination 위험이 커지기 때문이다.
Q2. corrective RAG가 하는 일은?
정답 confidence가 낮을 때 재검색, rewrite, reroute, abstain 같은 보정 행동을 수행하는 것이다.
왜 한 번의 retrieval failure를 바로 최종 실패로 만들지 않기 위해서다.
Q3. abstention이 중요한 이유는?
정답 근거가 부족한데도 답을 억지로 하지 않게 해 주기 때문이다.
왜 특히 고위험 도메인에서 잘못된 자신감이 더 위험하기 때문이다.
Cheat Sheet — 이 편의 식·정의 1페이지
정의 - Search Confidence: 검색 결과 신뢰도 - Corrective RAG: 저신뢰 검색의 보정 루프 - Abstention: 근거 부족 시 답변 보류
최소 코드
if confidence < 0.4:
result = rewrite_and_search(query)
언제 무엇을 | 상황 | 행동 | |---|---| | 표현 모호 | rewrite | | route 의심 | reroute | | 후보 애매 | 더 깊은 rerank | | 근거 매우 약함 | abstain |
참고 자료
1차 자료
- Yan, X. et al. Corrective Retrieval Augmented Generation. 2024.
보조 자료
- 사용자 노트 19장 confidence / corrective
다음 편으로 이어지는 흐름
이제 문서 한 조각씩 찾는 구조를 넘어, 개체와 관계를 따라가며 찾는 방식으로 넘어갈 수 있다. 다음 23편은 graph RAG다.
댓글
댓글 쓰기