8.6.4 충실성(Faithfulness) 점수 산출 및 자동 반려(Rejection) 시스템 구축
RAGAS의 4대 지표 중 오라클 파이프라인에서 가장 강력한 통제 권한을 쥐고 있는 핵심 지표는 단연코 **충실성(Faithfulness)**이다. 앞서 ’문맥 관련성’이나 ’답변 관련성’이 응답의 쓸모(Usefulness)를 평가하는 지표였다면, 이 충실성 지표는 응답의 사실적 무결성(Factual Integrity), 즉 ’거짓말을 했는지 안 했는지’를 판결하는 유일무이한 팩트 체크 방화벽이다.
충실성의 수학적 정의는 매우 명확하다. “타겟 LLM이 렌더링한 답변 텍스트(A) 내의 모든 논리적 주장(Claims)들이, 100% 검색된 원본 문서(C) 시스템 안에서만 추론(Inferred)될 수 있는가?”
단 하나의 주장이라도 원본 문서(C)에서 그 근거를 찾을 수 없다면, 그것이 비록 외부 세계의 상식적으로 맞는 말임이 명백하다 할지라도 오라클은 이를 ‘외래 지식 오염(External Knowledge Contamination)’ 내지는 환각(Hallucination)으로 규정하고 즉시 트랜잭션 전체를 물리적으로 셧다운 시킨다.
1. NLI 기반 주장(Claim) 분해 및 충실성 스코어링
LLM-as-a-Judge는 타겟 모델의 렌더링된 답변 전체를 한 번에 검열하지 않는다. 이 심판관은 NLI(자연어 추론)의 스텝바이스텝 철학을 적용하여 답변을 원자 단위로 분할한 뒤 무자비한 교차 대조를 수행한다.
- 명제 추출 (Claim Extraction): 심판관 LLM은 우선 최종 응답(A)을 개별적인 명제 단위(C_1, C_2 \dots C_n)로 분해한다. (예: “A의 가격은 100원이다”, “A는 리눅스를 지원한다”)
- 독립적 지지 프롬프팅 (Independent Support Check): 심판관 LLM은 각 명제 C_i를 차례대로 쥔 채 원본 문서 단락 모음(Context)을 스캐닝한다. 그리고 묻는다. “이 Context만으로 C_i가 참(True)임을 증명할 수 있는가?”
- 충실성 점수(Faithfulness Score)의 산출:
\text{Faithfulness Score} = \frac{\text{Context에 의해 지지받는 명제(True Claims)의 수}}{\text{타겟 LLM이 뱉어낸 전체 명제(Total Claims)의 수}}
만약 타겟 모델이 총 5개의 명제를 뱉어냈는데, 그중 4개는 사내 문서에 적힌 내용을 바탕으로 잘 썼지만, 마지막 1개 명제에서 자기 마음대로 조작된 수치를 이어 붙였다면 충실성 점수는 4/5 = 0.8 로 산출된다.
2. 절대 임계값(Threshold)과 무자비한 반려(Rejection) 시스템
모든 확률적 딥러닝 모델은 점수를 연속적인 실수형으로 반환하지만, 기업 소프트웨어의 결정을 책임지는 오라클 레이어는 철저히 **이진 트리(Binary Decision)**로만 동작해야 한다.
사내 규정, 금융 데이터베이스, 또는 법무 문서를 질의하는 B2B RAG 환경에서는 사실관계가 80%만 맞는 답변이란, 곧 20%의 치명적 허위 사실을 포함한 ’배포 불가능한 쓰레기’를 의미한다.
따라서 오라클 시스템은 충실성 점수(Faithfulness Score)에 대해 자비 없는 가혹한 임계값(Threshold) 로직을 강제한다. 대개의 경우 이 임계값은 보안 요구사항에 따라 1.0 (100% 일치) 또는 약간의 구문적 관용을 허용한 0.95 이상으로 튜닝(Tuning)된다.
def check_faithfulness_oracle(faithfulness_score: float, threshold: float = 1.0) -> bool:
if faithfulness_score >= threshold:
return True # 배포 승인
else:
trigger_rejection_event(
reason="Faithfulness violation detected.",
score=faithfulness_score
)
return False # 시스템 강제 셧다운 및 반려
3. 오라클의 Fallback 라우팅
오라클이 충실성 위반을 적발하여 반려(Rejection) 로직을 격발하면, 타겟 LLM의 답변은 서버 메모리 단계에서 즉시 Drop 처리되며 유저의 프론트엔드로는 절대 나가지 않는다.
이때 파이프라인은 두 가지 Fallback(대체) 라우팅을 선택한다.
- 재성성 루프 (Self-Correction Retry): 타겟 모델에게 오류 피드백 프롬프트(“이전 답변의 X 부분은 문서에서 유추할 수 없는 환각이다. 이를 제외하고 다시 작성하라”)를 전송하여 N번의 기회를 다시 준다.
- 최종 차단 및 안전 모드 (Fail-safe Kill): 재시도 횟수를 초과했거나 임계값이 너무 낮게 격발된 경우, 오라클은 기계적으로 하드코딩된 시스템 표준 답변인 *“주어진 문서 기반으로는 정확한 사실관계를 확인할 수 없어 답변을 제공할 수 없습니다.”*라는 안전망(Safe String) 문구를 출력한다.
이러한 즉각적인 차단 및 자동 반려(Rejection) 시스템이야말로 타겟 모델의 무책임한 파라미터가 비즈니스 로직의 결함으로 점화되는 것을 물리적으로 가로막는 오라클 아키텍처의 가장 확실한 ’비상 브레이크(Emergency Brake)’이다.