24차시. Retriever Node 분리
6. 실습 ③ — 점진적 확대 전략
출처: 원본 PDF 24차시_RetrieverNode분리.pdf 13~14쪽 · 쪽 그림 13쪽 14쪽
재검색할 때 같은 조건으로 다시 찾으면 당연히 같은 결과입니다. 조건을 바꿔야 합니다.
6-1) 재시도 횟수에 따라 넓히기
def retriever_node(state) -> dict:
retries = state.get("retries", 0)
# 재시도할수록 넓고 관대하게 찾는다
k = state.get("top_k") or (config.TOP_K + retries * 3)
floor = state.get("min_score")
if floor is None:
floor = max(0.30, config.MIN_SCORE - retries * 0.05)
...| 재시도 | k | min_score | 의도 |
|---|---|---|---|
| 0회 (최초) | 5 | 0.47 | 정확한 것만 |
| 1회 | 8 | 0.42 | 조금 넓게 |
| 2회 | 11 | 0.37 | 더 넓게 |
| 3회 이상 | — | 0.30 (하한) | 더는 내리지 않음 |
⚠️ 하한을 반드시 두세요
max(0.30, ...)
이 하한이 없으면 재시도가 반복될수록
임계값이 0에 가까워집니다.
그러면 아무 문서나 통과하게 되고,
결국 관련 없는 근거로 답을 만듭니다.
"찾을 때까지 기준을 낮춘다"는 위험한 전략입니다.
차라리 "못 찾았습니다"가 낫습니다.
💡 이 전략의 트레이드오프
얻는 것 — 표현 차이로 놓친 문서를 잡아냅니다
잃는 것 — 노이즈가 섞일 위험이 커집니다
그래서 26차시 Verifier가 함께 있어야 안전합니다.
넓게 찾되, 결과를 검증하는 구조입니다.