RAG2026-5일13차시 · 프롬프트 최적화9 / 18← 이전목차다음 →MetaContents

13차시. 프롬프트 최적화

6. 실습 ③ — 출처 인용 검증하기

출처: 원본 PDF 13차시_프롬프트최적화.pdf 13쪽 · 쪽 그림 13쪽

"[1]을 붙여라"라고 시켰다고 항상 붙는 것은 아닙니다. 코드로 확인해야 합니다.

📝 인용 검사

Python
import re
def check_citation(answer, n_docs):
    # ① 인용 번호가 하나라도 있는가
    found = re.findall(r"\[(\d+)\]", answer)
    if not found:
        return False, "인용 번호가 전혀 없음"
    # 문자열 번호를 숫자로 바꾸기
    nums = []
    for n in found:
        nums.append(int(n))
    # ② 존재하지 않는 번호를 인용하지 않았는가
    bad = []
    for n in nums:
        if n < 1 or n > n_docs:
            bad.append(n)
    if bad:
        return False, f"존재하지 않는 근거 번호: {bad}"
    return True, f"인용 {len(nums)}건 정상"
# 사용 예
docs = search("환불은 며칠 이내인가요?")
ans  = chain.invoke({"context": build_context(docs),
                     "question": "환불은 며칠 이내인가요?"})
ok, msg = check_citation(ans, len(docs))
print("인용 검증:", "✓" if ok else "✗", msg)

실행 결과 예시 (코드를 읽고 만든 예상 화면입니다. 실제 실행 결과, 특히 모델의 답은 다를 수 있습니다)

출력
인용 검증: ✓ 인용 1건 정상

⚠️ 실제로 자주 나오는 문제
근거가 2개뿐인데 답변에 [3]이 등장하는 경우가 있습니다.
이건 명백한 환각 신호입니다.
없는 근거를 인용했다는 뜻이니까요.
26차시에서 만들 Verifier Node가
바로 이런 것을 자동으로 잡아냅니다.
오늘은 수동으로 확인하는 법만 익힙니다.

← 이전 절13차시 · 5. 실습 ② — 프롬프트 A/B 비교다음 절 →13차시 · 7. 실습 ④ — 개선 효과 측정