12차시. RAG 품질 문제
8. 실습 ④ — 실패율 측정하기
출처: 원본 PDF 12차시_RAG디버깅.pdf 15쪽 · 쪽 그림 15쪽
개선을 측정하려면 지금의 기준선이 필요합니다.
📝 간단한 자동 채점
TESTS = [
{"q": "환불은 며칠 이내인가요?", "keys": ["7일", "일주일"]},
{"q": "교환은 며칠 이내인가요?", "keys": ["30일"]},
{"q": "고객센터 운영 시간은?", "keys": ["09:00", "18:00", "평일"]},
{"q": "대표이사 이름은?", "keys": ["확인할 수 없"]},
# ... 12차시 실패 사례를 포함해 20개까지 채우세요
]
def score():
hit = 0
fails = []
for t in TESTS:
pairs = store.similarity_search_with_relevance_scores(
t["q"], k=3)
docs = []
for d, s in pairs:
if s >= MIN_SCORE:
docs.append(d)
if not docs:
ans = "자료에서 확인할 수 없습니다"
else:
prompt = ("아래 자료만 근거로 답하세요.\n"
"자료에 없으면 '자료에서 확인할 수 없습니다'.\n\n"
f"[자료]\n{build_context(docs)}\n\n[질문] {t['q']}")
ans = llm.invoke(prompt).content
# 정답 키워드 중 하나라도 답변에 들어있으면 정답
ok = False
for key in t["keys"]:
if key in ans:
ok = True
break
if ok:
hit += 1
else:
fails.append((t["q"], ans[:60]))
print(f"\n정답률: {hit}/{len(TESTS)} = {hit/len(TESTS)*100:.0f}%")
print("\n■ 실패한 질문")
for q, a in fails:
print(f" · {q}\n → {a}...")
score()실행 결과 예시 (코드를 읽고 만든 예상 화면입니다. 실제 실행 결과, 특히 모델의 답은 다를 수 있습니다)
정답률: 3/4 = 75%
■ 실패한 질문
· 교환은 며칠 이내인가요?
→ 상품 불량의 경우 30 일 이내에 교환이 가능합니다....📊 이 숫자가 기준선입니다
예를 들어 지금 12/20 = 60%가 나왔다면,
13차시에서 프롬프트를 고친 뒤 다시 재서
16/20 = 80%가 나오면
"프롬프트 개선으로 20%p 향상"이라고
근거를 갖고 말할 수 있습니다.
측정하지 않으면 개선을 주장할 수 없습니다.