13차시. 프롬프트 최적화
6. 실습 ③ — 출처 인용 검증하기
출처: 원본 PDF 13차시_프롬프트최적화.pdf 13쪽 · 쪽 그림 13쪽
"[1]을 붙여라"라고 시켰다고 항상 붙는 것은 아닙니다. 코드로 확인해야 합니다.
📝 인용 검사
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가
바로 이런 것을 자동으로 잡아냅니다.
오늘은 수동으로 확인하는 법만 익힙니다.