익숙한 실패
LLM에게 출처를 요청하면 대부분 그럴듯한 답을 내놓습니다. 논문 제목, URL, 실제 매체에서 인용한 것처럼 보이는 문구까지요. 읽어보면 설득력이 있습니다. 하지만 꽤 자주, 그 출처는 완전히 지어낸 것입니다 — 논문은 존재하지 않고, URL은 404를 반환하며, 인용문은 원문 어디에도 없습니다. 이는 프롬프트를 더 잘 쓴다고 해결되는 버그가 아니라, 이런 모델이 텍스트를 만들어내는 방식 자체에서 비롯된 구조적인 결과입니다.
왜 이런 일이 일어날까요
LLM은 어딘가를 찾아보는 게 아니라, 앞선 문맥을 바탕으로 다음에 나올 법한 토큰을 한 번에 하나씩 예측해 텍스트를 생성합니다. 출처를 요청받으면, 그 출처가 실제로 존재하는지 또는 모델이 주장하는 내용을 담고 있는지 확인하는 장치 없이 통계적으로 가장 그럴듯해 보이는 형식과 저자·매체를 갖춘 인용을 만들어냅니다. 유창함과 사실성은 별개로 최적화되므로, 날조된 인용과 실제 인용이 모델 자신의 출력에서는 구분되지 않을 수 있습니다.
'출처 목록만 붙이면' 완전히 해결되지 않는 이유
검색 증강 생성(RAG)은 모델에게 실제 문서를 참고하게 해준다는 점에서 도움이 되지만, 그것만으로 이 간극이 메워지지는 않습니다 — RAG는 환각을 줄여줄 뿐, 없애주지는 않습니다. 두 가지 실패 유형이 여전히 남습니다. 하나는 오귀속(misattribution) — 실제로는 그 주장을 뒷받침하지 않는 진짜 문서를 인용하는 경우이고, 다른 하나는 패러프레이즈 드리프트 — '인용문'이 원문 그대로가 아니라 그럴듯하게 다시 쓴 문장인 경우입니다. 검색은 모델이 어떤 문서를 보는지를 통제할 뿐, 그 문서에 대해 모델이 최종적으로 쓰는 문장이 정확한지는 통제하지 못합니다.
검색이 아니라 주장 자체를 검증하기
이것이 DeepVerify가 겨냥하는 지점입니다. 인용된 출처가 주장을 뒷받침한다고 그냥 믿는 대신, DeepVerify는 신뢰할 수 있는 출처를 기준으로 문장 단위(word-by-word) 검증을 수행해 각 진술이 검증 가능한지 즉시 확인합니다. 그 결과 날조되거나 잘못 귀속된 인용은 그대로 통과되지 않고 걸러집니다. 동일한 검증은 프로그래밍 방식으로도 사용할 수 있습니다 — Fact Checker 엔드포인트는 주장을 입력받아 TRUE/FALSE/UNCERTAIN 판정과 함께 실제로 대조한 출처, 그리고 출처별 신뢰도 점수를 반환합니다. 형식이 그럴듯하다는 이유로 인용을 믿는 대신, 직접 확인할 수 있는 근거를 얻는 것입니다.
제품에서 날조된 인용을 직접 걸러내는 방법
- ●사용자에게 보여주기 전에 모델이 생성한 사실 주장과 인용을 추출하세요.
- ●각 주장을 Fact Checker에 통과시키고, 반환된 `sources` 필드를 모델이 실제로 인용한 내용과 대조하세요.
- ●Evidence Finder로 신뢰도 점수와 입장이 태깅된 근거를 가져와, 반박하는 출처도 숨겨지지 않고 드러나게 하세요.
- ●`confidence`가 0.5 미만이면 약한 TRUE가 아니라 UNCERTAIN으로 취급하세요 — Fact Checker 문서에 따르면 그 이하에서는 판정을 액면 그대로 신뢰해서는 안 됩니다.