RAG2026-5일24차시 · Retriever Node 분리8 / 18← 이전목차다음 →MetaContents

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로 받게 만든 이유입니다.

← 이전 절24차시 · 4. 실패 사유를 구분하는 이유다음 절 →24차시 · 6. 실습 ③ — 점진적 확대 전략