시간에 따라 변하는 데이터에서 RAG가 제대로 작동하지 않는 문제를 겪고 계신 분 있나요?
Anyone seeing RAG break on temporally evolving data?
핵심 요약
RAG가 시간에 따라 변하는 데이터의 최신 상태를 반영하지 못하는 문제를 해결하기 위해, 정적 청크 대신 버전 관리가 가능한 상태 기반 객체로 접근하는 방식을 제안함.
- RAG의 한계 — 시간에 따라 변하는 데이터의 최신 상태를 반영하지 못하고 과거 정보만 검색함.
- 상태 기반 접근 — 데이터를 정적 청크가 아닌 버전 관리가 가능한 상태 객체로 모델링하여 해결함.
- 이벤트 소싱 활용 — 문서를 이벤트로 처리하고 우선순위 규칙을 적용하여 최신 사실을 도출함.
- 상태 계층 분리 — 문서와 사실을 분리하고 최신 유효 상태를 추적하는 별도의 계층을 구축함.
계약서, 환자 약물 기록 등 '현재 상태 > 문서 검색'이 중요한, 시간이 지남에 따라 사실이 어떻게 변하는지 추적해야 하는 AI 에이전트를 개발하고 있습니다.
RAG에서 일관된 실패 모드를 발견했는데, 바로 무언가가 대체되었을 때 이를 알지 못한다는 점입니다.
수정안이 3번이나 적용된 현재 계약 의무에 대해 물어보면, 자신 있게 원본 문서에서 내용을 가져옵니다.
환각(hallucination)이 아닙니다. 그냥 잘못된 버전의 현실을 가져오는 것뿐이죠.
그래서 동일한 쿼리와 임베딩을 사용하여 두 가지 통제된 테스트를 실행했습니다.
임상 (48시간: 약물, 혈당, 알레르기)
- RAG: 3건의 오류
- 내 시스템: 0건
법적 수명 주기 (NDA → MSA → 수정안 → 소송 보존)
- RAG: 3건의 오류
- 내 시스템: 0건
결국 효과가 있었던 것은 더 나은 임베딩이나 리랭킹(reranking)이 아니었습니다.
벡터 저장소의 정적 청크 대신, 다음과 같은 기능을 갖춘 *상태 기반 객체(stateful objects)*로 사실을 처리하는 것이었습니다.
- 버전 관리
- 충돌 해결
다른 분들은 이 문제를 어떻게 처리하고 계신가요?
명시적으로 시간적 상태를 모델링하고 계신가요, 아니면 여전히 검색에 의존하고 계신가요?

