8.7.2 시의성(Temporality)이 중요한 정보의 최신성 검증 로직

8.7.2 시의성(Temporality)이 중요한 정보의 최신성 검증 로직

“우리 회사 재택근무 규정이 어떻게 되나요?“라는 질문을 던졌을 때, RAG 검색기가 2021년 팬데믹 한가운데서 작성된 “전면 재택근무 실시안” 문서를 가져와 답변하는 것은 단순한 부정확성을 넘어 비즈니스 리스크를 초래한다. 지식 기반 시스템에서 정보는 와인처럼 숙성되는 것이 아니라, 우유처럼 부패한다. 특정 정보들(사내 규정, 금리, 프로모션 이벤트 등)은 본질적으로 **시의성(Temporality)**에 묶여 있으며, 오라클 시스템은 문서 간의 내용 충돌이 발생했을 때 그 원인이 ’시간의 흐름에 따른 정책 변화’인지를 기계적으로 판독해 내야 한다.

이러한 시간축(Time-axis) 기반의 지식 충돌을 통제하기 위해, 현대 RAG 오라클 아키텍처는 텍스트를 파싱하기 전에 문서의 작성일(Timestamp) 메타데이터를 우선적으로 연산하는 최신성 검증(Freshness Validation) 로직을 가장 먼저 가동한다.

1. 타임스탬프(Timestamp) 메타데이터 강제 스키마 제약

문서의 시의성을 평가하려면 오라클이 스캔할 수 있는 시계열 데이터가 존재해야 한다. 아무리 뛰어난 LLM이라도 텍스트 단락만 보고 이 글이 2018년에 쓰였는지 2024년에 쓰였는지 정확히 역설계할 수는 없다.

따라서 오라클 엔지니어링의 첫 번째 철칙은, Vector DB에 청크를 적재(Ingestion)하는 파이프라인 단계에서부터 **문서의 생성일(created_at), 수정일(updated_at), 유효 기간 만료일(expiration_date) 메타데이터를 필수 속성(Required Attributes)으로 강제 해싱(Hashing)**하는 것이다.

이 시계열 메타데이터가 없는 문서는 애초에 인덱싱을 거부(Drop)해야 하며, 검색기가 여러 문서를 가져와 충돌을 일으켰을 때 오라클 미들웨어는 타겟 LLM을 호출하기도 전에 이 메타데이터 타임스탬프 배열을 파이썬의 max() 함수 하나로 정렬하여 승자와 패자를 구별해 낸다.

2. 시간 범위 지정(Time-Bounding) 오라클 필터링

검색된 문서 A(2022년)와 문서 B(2024년)가 충돌할 때 무조건 최신 문서 B가 이기는 단순한 구조만으로는 현실의 비즈니스 쿼리를 감당할 수 없다. 유저가 “2023년도의 복지 포인트 지급액이 얼마였나요?“라고 과거를 한정하여(Time-bounded) 묻는 경우가 존재하기 때문이다. 이 경우 정답은 B(2024)가 아니라 A(2022) 문서의 내용에서 파생되어야 한다.

이를 해결하기 위해 오라클 파이프라인은 질문의 시간적 의도를 추출하는 쿼리 타임 스캐너(Query Time Scanner) 모듈을 가동한다.

  1. 의도 시간(Intent Time) 추출: 유저의 쿼리가 들어오면, 가벼운 SLM 파서나 정규표현식이 쿼리 안의 시간 키워드(“2023년”, “작년”, “현재”)를 추출하여 Target_Date 변수로 할당한다. 키워드가 없으면 자동으로 Target_Date = NOW()로 설정한다.
  2. 문맥 스위핑(Context Sweeping): 추출된 Target_Date를 기준으로, 오라클은 검색기가 가져온 문서 C, D, E 들의 메타데이터(updated_at)를 스캔한다. 유저가 과거를 지칭했다면 가장 최신 문서라 할지라도 Target_Date 미래 영역에 존재하는 문서는 즉각 삭제(Pruning) 처리된다.
  3. 최종 생존 문서 추출: 오라클 필터링을 거치고 남은 문서들 중에서, Target_Date에 가장 근접하고 유효한 문서 단 하나만을 살려두어 타겟 LLM의 프롬프트에 주입한다.

결과적으로 타겟 LLM은 “2023년도 규정에 따르면…“이라는 유창한 문장을 생성하지만, 이 문장의 뼈대는 오라클이 시계열 수학 연산을 통해 결정론적으로 꽂아준 빈틈없는 진실에 기반하게 된다.

3. 유효 기간 만료(Deprecated) 지식의 격리 조치

오라클의 최신성 검증에서 가장 치명적인 에러 플래그는 ’만료일(Expiration Date)’이 지난 문서를 참조하려는 행위다. 특정 프로모션이나 한시적 태스크포스(TF) 가이드라인처럼 명확한 수명(Lifespan)이 정해진 데이터들은, 기한이 지나면 시스템에서 폐기 선고를 받아야 한다.

오라클은 검색된 문서들 중 expiration_date < NOW() 조건식을 만족하는 문서를 적발하는 즉시, 타겟 모델에게 이 문서는 **“절대 진실로서 참조해서는 안 되는 과거 아카이브(Archive) 문서”**라는 강력한 Warning 태그를 달아서 넘긴다.
만약 프롬프트 엔지니어링을 통해 이 통제에 실패하여 타겟 모델이 만료된 정책을 현재의 사실인 것처럼 생성해 버렸다면, 출력 후단(Post-generation)에 배치된 LLM-as-a-Judge 오라클이 [만료된 데이터 참조: 치명적 위반] 오류를 격발하여 해당 트랜잭션을 셧다운시킨다.

텍스트의 의미(Semantics)보다 강력한 것은 그 텍스트가 언제 태어났고 언제 죽었는지를 기록한 시간(Temporality)의 메타데이터다. 오라클 시스템은 이 보이지 않는 시간 축을 수학적으로 제어함으로써, LLM의 시간 관념 없는 확률적 입놀림을 완벽하게 통제해 낸다.