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초