RAG2026-5일32차시 · 고도화된 Modular RAG8 / 18← 이전목차다음 →MetaContents

32차시. 고도화된 Modular RAG

5. 실습 ④ — 전체 회귀 테스트

출처: 원본 PDF 32차시_ModularRAG종합.pdf 10쪽 · 쪽 그림 10쪽

📝 src/test_regression.py

출력
from graph import ask
import time
TESTS = [ ... 12차시에서 만든 질문 20개 ... ]
def _has_any_key(text, keys):
    for k in keys:
        if k in text:
            return True
    return False
def run():
    hit, results = 0, []
    t_start = time.time()
    for t in TESTS:
        r = ask(t["q"])
        ok = _has_any_key(r["answer"], t["keys"])
        hit += ok
        results.append({
            "q": t["q"], "ok": ok,
            "intent": r["intent"], "grade": r["grade"],
            "retries": r["retries"], "rewrites": r["rewrites"],
            "sec": r["elapsed"],
        })
        print(f"{'✓' if ok else '✗'} {t['q'][:30]:<32} "
              f"{r['grade']:<10} "
              f"재생성{r['retries']} 재검색{r['rewrites']} "
              f"{r['elapsed']:.1f}초")
    n = len(TESTS)
    print(f"\n{'='*60}")
    print(f"정답률   : {hit}/{n} = {hit/n*100:.0f}%")
    pass_count, retry_count, rewrite_count = 0, 0, 0
    for r in results:
        if r["grade"] == "pass":
            pass_count += 1
        if r["retries"] > 0:
            retry_count += 1
        if r["rewrites"] > 0:
            rewrite_count += 1
    print(f"검증통과 : {pass_count}/{n}")
    print(f"재생성   : {retry_count}건")
    print(f"재검색   : {rewrite_count}건")
    print(f"평균시간 : {sum(r['sec'] for r in results)/n:.1f}초")
    print(f"총 소요  : {time.time()-t_start:.0f}초")
    return results
run()

실행 결과
═════════════════════════════════════════════
═══════════════
✓ 환불은 며칠 이내인가요?          pass       재생성0 재검색0  3.2초
✓ 교환 기간은 얼마인가요?          pass       재생성0 재검색0  3.0초
✓ 고객센터 운영 시간은?            pass       재생성0 재검색0  2.9초
✓ 반품하고 싶은데 언제까지?        pass       재생성0 재검색1  6.8초
✓ 물건 바꾸려면 택배비 누가?       pass       재생성0 재검색1  7.1초
✓ 환불 방법과 수수료는?            pass       재생성1 재검색0  5.4초
✓ 대표이사가 누구인가요?           giveup     재생성0 재검색2  8.9초
...
═════════════════════════════════════════════
═══════════════
정답률   : 20/20 = 100%
검증통과 : 17/20
재생성   : 3건
재검색   : 5건
평균시간 : 4.6초
총 소요  : 92초
← 이전 절32차시 · 4. 실습 ③ — 경로 커버리지 테스트다음 절 →32차시 · 6. 성능 변화 총정리