24차시. Retriever Node 분리
5. 실습 ② — 단독 테스트
출처: 원본 PDF 24차시_RetrieverNode분리.pdf 11~12쪽 · 쪽 그림 11쪽 12쪽
📝 nodes/retriever.py 하단에 추가
if __name__ == "__main__":
CASES = [
{"query": "환불은 며칠 이내인가요?"}, # 정상
{"query": "반품하고 싶은데 언제까지?"}, # 표현 차이
{"query": "대표이사가 누구인가요?"}, # 없는 내용
{"query": ""}, # 빈 질의
{"query": "환불 규정", "top_k": 10}, # k 확대
{"query": "환불과 교환 차이", "search_type": "mmr"},
]
for c in CASES:
r = retriever_node(c)
print(f"\nQ: {c['query'] or '(빈 질의)'}")
print(f" 통과 {len(r['documents'])}건 | "
f"ok={r['retrieval_ok']} | "
f"사유={r['fail_reason'] or '-'}")
print(f" 점수: {r['scores'][:5]}")
실행 결과
─────────────────────────────────────────────
─────
Q: 환불은 며칠 이내인가요?
통과 3건 | ok=True | 사유=-
점수: [0.73, 0.639, 0.489]
Q: 반품하고 싶은데 언제까지?
통과 0건 | ok=False | 사유=low_score ← 30차시 대상
점수: [0.412, 0.388, 0.351]
Q: 대표이사가 누구인가요?
통과 0건 | ok=False | 사유=low_score
점수: [0.284, 0.211, 0.196]
Q: (빈 질의)
통과 0건 | ok=False | 사유=empty_query
점수: []
Q: 환불 규정 (top_k=10)
통과 5건 | ok=True | 사유=-
점수: [0.78, 0.71, 0.65, 0.52, 0.48, 0.41, ...]🎯 다섯 번째 케이스를 주목하세요
k를 10으로 올렸더니 통과 조각이 3개 → 5개로 늘었습니다.
평소에는 k=5로 쓰지만,
검색이 부족할 때 State로 k를 늘려 재검색하면
더 많은 근거를 얻을 수 있습니다.
이것이 옵션을 State로 받게 만든 이유입니다.