8.5.3 허위 인용(Hallucinated Citation) 탐지를 위한 역참조(Cross-Reference) 오라클

8.5.3 허위 인용(Hallucinated Citation) 탐지를 위한 역참조(Cross-Reference) 오라클

환각(Hallucination)이라는 질병은 거대 언어 모델(LLM)의 생성 텍스트에만 국한되지 않는다. 타겟 모델은 때때로 매우 유창하고 완벽하게 맞는 말을 적어놓고도, 자신의 주장을 그럴듯하게 치장하기 위해 애초에 Vector DB가 검색해서 던져주지도 않은 허구의 인용 번호를 지어내어(Hallucinated Citation) 문장 끝에 당당하게 달아버리는 황당한 논리 기만(Logical Deception)을 저지른다.

예를 들어, 프롬프트에 제공된 참조 문서는 오직 [Doc1_Chunk1]부터 [Doc1_Chunk5]까지밖에 없는데, 모델이 답변을 렌더링하다가 무의식적으로 과거 학습했던 파라메트릭 환각을 섞으면서 그 끝에 [Doc1_Chunk9]나 혹은 아예 존재하지 않는 [Doc7_Chunk2]라는 유령 식별자(Ghost Identifier)를 천연덕스럽게 생성해 붙이는 식이다. 클라이언트 웹 UI에서 유저가 이 유령 인용 번호를 클릭하는 순간, 시스템은 참조할 노드 포인터를 찾지 못해 ’Null Pointer Exception’을 맞고 장렬하게 프론트엔드가 붕괴한다.

이러한 기만적 허위 인용 패턴을 원천 차단하기 위해, 오라클 백엔드는 텍스트의 의미론적 판단을 모두 배제하고 오직 메모리에 띄워진 식별자 배열의 멤버십(Membership)만을 검사하는 결정론적 역참조(Cross-Reference) 교차 검증 파이프라인을 가동한다.

1. 검색 문서(Retrieved Context)의 절대 ID 배열 해시 테이블 생성

이 방어 로직의 첫 번째 단계는 RAG 파이프라인의 검색 단계(Retrieval Phase) 직후, 프롬프트 템플릿에 문자열 단위로 문서가 주입되는 순간에 시작된다.
오라클 미들웨어는 타겟 LLM에게 던져줄 이 합법적인(Legitimate) 구조화 청크들의 고유 식별자(ID)들을 모조리 긁어모아, 백엔드의 Redis 캐시나 메모리 위 해시맵(HashMap) 자료구조에 ‘절대 허용 리스트(Whitelist)’ 상태로 매핑하여 고정(Freezing)시킨다.

  • 현재 트랜잭션의 Whitelist HashMap (O(1) 탐색 보장):
    {
      "Doc1_Chunk1": true,
      "Doc1_Chunk2": true,
      "Doc3_Chunk5": true
    }
    

이 해시맵은 해당 단일 질문-답변 세션 스레드(Thread) 내에서 그 어떤 외압에도 변경되지 않는 물리적이고 수학적인 출처의 '유일한 진실의 원천(Single Source of Truth)'으로 굳어진다.

## 2.  생성 인용 번호의 추출과 O(1) 결정론적 룩업 판별


이후 타겟 모델이 장황한 생성 세션을 마치고 최종 텍스트 배열을 오라클로 반환하면, 오라클 파서(Parser) 서브루틴은 정규표현식을 통해 응답 텍스트에 묻어 있는 모든 `[DocX_ChunkY]` 스트링 블록만을 발라내어 배열(Array)에 나열한다.
이제 오라클은 심판관(Judge) 모델이 개입할 틈도 주지 않고, 추출된 이 인용 식별자 스트링들을 앞서 만들어둔 HashMap 공간에 던져 넣어 O(1) 시간 복잡도로 존재 여부(Existence Lookup)를 고지식하게 스캐닝한다.

1.  **정상 매칭(Valid Match):** 모델이 `[Doc1_Chunk2]`를 뱉었다면, HashMap 안에 `true`로 존재하므로 무사히 검문소를 통과시킨다.
2.  **유령 인용(Ghost Citation) 감지:** 만약 모델이 `[Doc3_Chunk9]`라는 인용을 배출했는데 HashMap 조회 결과 해당 Key가 존재하지 않아 `undefined`나 에러 플래그가 떨어진다면? 오라클 시스템은 텍스트의 내용이 아무리 훌륭하고 사실의 인과관계가 맞다 한들, 이 응답을 **'악의적인 시스템 기만(Malicious System Deception)'** 에러로 분류하고 전체 트랜잭션을 그 자리에서 셧다운(Shutdown)시켜버린다.

## 3.  포맷 불일치 및 가짜 메타데이터 식별


역참조 오라클의 역할은 단순히 존재하는 캐시 ID를 스캐닝하는 것에서 끝나지 않는다. 모델이 환각 상태에 빠지면 시스템이 요구한 `[DocX_ChunkY]` 브래킷 형식 자체를 무시하고, 갑자기 `[PDF문서 3페이지 참조]`라거나 `[출처: 사내 규정집]`처럼 자기 마음대로 자연어 문자열 형식의 가짜 메타데이터 위장술을 부리는 경우도 발생한다.

정규화를 담당하는 역참조 모듈은, 사전에 하드코딩된 정규표현식(Regex Validation)을 통과하지 못한 채 '마침표 앞에 이상한 문자열 주석이 달려 있는' 모든 패턴을 기계적으로 적발해 낸다. 오라클은 이러한 문법적 환각 변이를 즉각적으로 탐지한 후, 타겟 모델에게 *"너의 인용 포맷 문법이 시스템 규격을 심각하게 위반했다. 인간 친화적 언어를 지우고 오직 [DocX_ChunkY] 형식으로만 다시 매핑하라"*라는 제재 프롬프트를 쏘아 보내어 출력 렌더링 궤도를 강제로 되돌리는(Self-correction Trigger) 트리거 역할을 수행한다.

이 교차 검증 프로세스는 모델의 그 어떤 수사학(Rhetoric)이나 시맨틱(Semantic) 의미망도 쳐다보지 않으므로 연산 비용이 사실상 0에 수렴한다. 이 극단적으로 경제적이면서도 절대적인 결정론적 해시 맵 검열이야말로, 유저의 클릭 경험(UX)을 보호하고 죽은 링크(Dead Link) 배포를 차단하는 프론트엔드 방어의 최전선이다.