26차시. Verifier Node 설계
4. 실습 ① — LLM 심판 프롬프트
출처: 원본 PDF 26차시_VerifierNode설계.pdf 9쪽 · 쪽 그림 9쪽
심판 역할을 명확히 분리하는 것이 핵심입니다.
📝 src/prompts.py에 추가
from langchain_core.prompts import ChatPromptTemplate
JUDGE_PROMPT = ChatPromptTemplate.from_template(
"당신은 RAG 답변을 검증하는 엄격한 심판입니다.\n"
"답변을 생성하지 말고, 오직 평가만 하십시오.\n\n"
"[근거 자료]\n{context}\n\n"
"[사용자 질문]\n{question}\n\n"
"[검증할 답변]\n{answer}\n\n"
"[평가 기준]\n"
"grounded : 답변의 모든 주장이 근거 자료 안에 있으면 true.\n"
" 근거에 없는 숫자·조건·설명이 하나라도 있으면 false.\n"
"relevant : 답변이 질문에 실제로 대답하면 true.\n"
" 질문의 핵심을 비껴갔으면 false.\n"
"reason : 판정 이유를 한 문장으로. false인 항목이 있으면\n"
" 어느 부분이 문제인지 구체적으로 쓸 것.\n\n"
"[출력 형식 - 다른 말은 절대 쓰지 마십시오]\n"
'{{"grounded": true, "relevant": true, "reason": "..."}}'
)⚠️ 프롬프트 작성 시 주의점
① "답변을 생성하지 말라"를 명시
안 그러면 평가 대신 더 나은 답변을 써줍니다
② 중괄호를 두 번 쓴다 {{ }}
ChatPromptTemplate에서 {}는 변수 자리입니다
JSON의 중괄호는 {{ }}로 이스케이프해야 합니다
③ 판정 기준을 구체적으로
"좋은 답변인가"처럼 모호하면 판정이 흔들립니다
④ reason에 구체성을 요구
25차시 피드백 프롬프트에 그대로 들어갑니다