RAG가 추측하고 있을 때 이를 인정하게 만들기: 출처 기반의 환각 (Hallucination) 체크
요약
RAG 시스템에서 발생하는 환각 문제를 해결하기 위해 생성 후 검증 단계를 추가하는 SWIRL 5 프로세스를 소개합니다. 답변을 원자적 주장으로 분할하고 인용된 구절과의 함의 관계를 체크하여, 근거가 부족한 주장을 사용자에게 즉시 알립니다.
핵심 포인트
- 생성 후 검증 단계를 통해 RAG의 자신만만한 오답 방지
- 답변을 원자적 주장(Atomic claims) 단위로 분할하여 정밀 검증
- 인용된 텍스트와 주장 간의 함의(Entailment) 체크 수행
- 지연 시간 문제를 해결하기 위해 임베딩 배치 처리 및 캐싱 활용
- 완벽한 방지가 아닌, 위험 상황을 사용자에게 투명하게 알리는 데 집중
RAG에서 저를 가장 두렵게 만드는 실패 모드는 틀린 답이 아닙니다. 답이 주장하는 바를 실제로 말하고 있지 않은 세 개의 인용구를 달고 나오는, 자신만만한 오답입니다.
그래서 SWIRL 5에서는 모델이 스스로를 감시하도록 신뢰하는 것을 멈추고, 생성(Generation)
_이후_에 실행되는 체크 과정을 추가했습니다.
프로세스:
- 평소와 같이 인용구를 포함하여 답변을 생성합니다.
- 답변을 원자적 주장 (Atomic claims) — 대략 문장당 하나의 주장 — 으로 분할합니다.
- 각 주장에 대해, 모델이 인용한 검색된 구절 (Retrieved passages)에서 특정 구간 (Spans)을 추출합니다.
- 함의 체크 (Entailment check)를 실행합니다: 인용된 텍스트가 실제로 이 주장을 뒷받침하는지, 모순되는지, 아니면 둘 다 아닌지 확인합니다.
- 뒷받침되지 않는 모든 주장은 사용자가 단 한 단어를 읽기 전에 UI 상에서 인라인으로 표시됩니다.
흥미로운 점은 함의 모델 (Entailment model) 자체가 아니라, 그 주변의 모든 것이었습니다.
주장 분할 (Claim segmentation)은 생각보다 어렵습니다. 단순한 문장 분할은 주어가 두 문장 앞의 문장에 있는 경우, 그 자체로는 검증할 수 없는 주장을 만들어냅니다.
인용은 누락을 통해 거짓말을 합니다. 모델은 주제적으로는 관련이 있지만, 방금 인용한 특정 숫자를 포함하고 있지 않은 문서를 인용할 수 있습니다. 이 체크의 핵심 목적은 바로 그 간극을 잡아내는 것입니다.
지연 시간 예산 (Latency budget). 아무도 기다려주지 않는 정직함 계층은 아무도 출시하지 않는 정직함 계층입니다. SWIRL 5는 구절 임베딩 (Passage embeddings) 등을 배치 처리하고 선택적으로 캐싱합니다.
결과는 "SWIRL은 절대 환각을 일으키지 않는다"가 아닙니다. 그 무엇도 그것을 보장할 수는 없습니다. 결과는 이렇습니다: 위험한 상황에 처했을 때, 시스템이 사용자에게 이를 알리고 정확한 문장을 지목해 줍니다.
그것이 제가 실제로 구축할 수 있는 신뢰할 수 있는 버전입니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기