평범한 RAG 시스템이 1년 동안 프로덕션에서 실행된 후, 그 시스템에 네 가지 질문을 던져보겠습니다. "왜 그렇게 말했어?" 모델이 고객의 계약 갱신 날짜에 대해 자신감 있는 답변을 내놓았지만, 원천 조항으로 이어지는 추적 경로는 존재하지 않습니다. "이 주장을 재검증해 줘, 출처가 변경되었어." 계약이 지난주에 수정되었습니다. 그 계약에서 파생된 모든 사실은 의심스럽습니다. 사실들이 어느 문서에서 왔는지 알 수 없기 때문에 찾을 수가 없습니다. "이 두 모순되는 사실 사이에서 결정해 줘." 한 사실은 Alex가 Google에서 일한다고 말하고, 다른 사실은 Stripe에서 일한다고 말합니다. 둘 다 신뢰도 점수나 출처 타임스탬프가 없습니다. 기록 작성의 최신성은 증거의 최신성과 아무 관련이 없습니다. "이 할루시네이션의 원인을 찾아줘." 모델이 회의가 목요일에 있다고 말했지만, 목요일에는 회의가 없었습니다. LLM이 날짜를 지어낸 것인지, 아니면 메모리에 있는 잘못된 데이터가 모델을 오도한 것인지 알 수 없습니다.
이 네 가지 실패는 하나의 공통 원인을 공유합니다. 각각은 빠진 열(column)입니다. 출처 식별자, 캡처 타임스탬프, 신뢰도 점수, 응답 인용 로그가 그것입니다. 각 항목은 기록 시점에 몇 바이트만 더 차지합니다. 하지만 이것들이 없을 때의 비용은 무한합니다. 모든 주장은 감사 불가능하고, 모든 모순은 해결 불가능하며, 모든 할루시네이션은 추적 불가능해집니다.
19개의 시스템을 살펴보면 패턴이 일관됩니다. 가장 강력한 구현체는 법정이 증거를 다루는 방식으로 프로비넌스(provenance)를 취급합니다. 즉, 모든 주장은 끊어지지 않은 관리 체인(chain of custody)과 함께 도착하거나 아예 도착하지 않습니다. 가장 약한 구현체는 아무런 프로비넌스도 가지고 있지 않으며, 프로덕션에서 문제가 발생할 때마다 그 대가를 치릅니다. 이 글에서는 코퍼스에서 드러난 여섯 가지 프로비넌스 수준, 이를 구분하는 세 가지 구현 성숙도 단계, 그리고 처음부터 제대로 구축하는 데 드는 정직한 비용에 대해 다룹니다.
여섯 가지 수준, 하나의 원칙
19개의 시스템을 연속해서 읽어보면, 여섯 가지 뚜렷한 프로비넌스 수준이 드러납니다. 이들은 계층 구조가 아니라 서로 직교(orthogonal)하는 개념입니다. 어떤 시스템은 출처 프로비넌스는 있지만 인과적 프로비넌스가 없을 수 있고, 버전 관리는 있지만 신뢰도 점수는 없을 수 있습니다. 가장 강력한 구현체는 여섯 가지를 모두 갖추고 있으며, 가장 약한 구현체는 그중 어떤 것도 갖추지 못했습니다.
Identity (정체성) 는 "정확히 어떤 사실인가?"라는 질문에 답합니다. OpenContext는 수집 시점에 모든 컨텍스트 조각에 대해 UUID를 발행하고, 이를 에이전트가 응답에서 직접 사용할 수 있는 인용 체계로 노출합니다. 식별자는 이름 변경, 이동, 재구성에도 살아남습니다. 콘텐츠에 바인딩되어 있지 경로에 바인딩되어 있지 않기 때문입니다. mem9는 모든 행에 안정적인 메모리 ID와 함께 If-Match 동시성 보호가 적용된 명시적 버전 카운터를 가지고 있습니다. 정체성 프로비넌스가 없으면 문제가 발생했을 때 무엇에 대해 이야기하고 있는지조차 지칭할 수 없습니다.
Source (출처) 는 "어디서 왔는가?"라는 질문에 답합니다. Hindsight는 모든 관측치에 대해 출처 유형과 식별자를 기록하므로, 시스템이 어떤 대화나 문서가 특정 사실을 생성했는지 답할 수 있습니다. mem9는 모든 행에 출처, 에이전트 ID, 세션 ID를 저장합니다. Supermemory는 메모리와 함께 문서 ID를 저장합니다. 출처 프로비넌스가 없으면 출처가 변경될 때 업데이트를 연쇄적으로 적용할 수 없습니다. 어떤 사실이 해당 출처에 의존하는지 알 수 없기 때문입니다.
Causal (인과) 는 "어떤 에이전트 단계가 이것을 사용했는가?"라는 질문에 답합니다. Hindsight는 검색되어 사용된 모든 사실을 관측치 계층(observation tier)에 캡처하며, 전체 검색 컨텍스트(어떤 검색기가 이를 표면화했는지, 어떤 순위를 달성했는지, 에이전트가 실제로 소비했는지)를 포함합니다. Moraine은 모든 추적 단계를 자체 프로비넌스 레코드로 처리하여, 에이전트의 전체 실행을 출처 주소 지정이 가능한 이벤트 시퀀스로 복구 가능하게 만듭니다. 인과 프로비넌스가 없으면 "시스템이 이 사실을 검색했다"와 "에이전트가 이 사실을 사용하여 그 응답을 생성했다"를 구분할 수 없습니다.
Capture confidence (캡처 신뢰도) 는 "우리가 기록할 당시 얼마나 확신했는가?"라는 질문에 답합니다. Graphify는 지식 그래프의 모든 엣지(edge)에 세 가지 수준의 캡처 신뢰도를 표시합니다. CONFIRMED는 결정론적 추출, LIKELY는 고신뢰도 LLM 추론, AMBIGUOUS는 불확실한 주장을 나타냅니다. AMBIGUOUS 엣지는 사실로 조용히 처리되지 않고 사람이 검토할 "지식 격차(knowledge gaps)"로 표면화됩니다. Hindsight는 모든 관측치에 신뢰도 점수를 부여하며, 이 점수는 신선도 수명 주기(freshness lifecycle)를 통해 시간이 지남에 따라 감소합니다. 즉, 신선한 관측치는 신뢰되고, 오래된 관측치는 가중치가 낮아지거나 폐기됩니다. mem9는 먼저 섀도우 모드에서 유사 중복 탐지를 실행하여 점수를 기록하지만, 엔지니어가 실제 데이터에서 임계값을 보정할 때까지 이를 실행에 옮기지 않습니다. 캡처 신뢰도가 없으면 불확실한 사실과 확실한 사실이 동일한 가중치로 검색되며, 에이전트는 확실한 주장과 추측을 구분할 수 없습니다.
Versioned (버전 관리) 는 "우리는 이전에 무엇을 믿었는가?"라는 질문에 답합니다. Supermemory는 메모리를 유형화된 엣지(업데이트, 확장, 파생)가 있는 버전 관리 DAG로 취급하여, 모든 믿음에 커밋 기록을 부여합니다. mem9는 쓰기 경로를 분할합니다. 사람의 편집은 제자리에서 변경(in-place mutation), LLM 주도 재작성(새 콘텐츠가 이전 콘텐츠를 의미적으로 대체하는 경우)은 추가 후 보관(append-and-archive) 방식으로 처리합니다. Tolaria는 Git이 버전 기록을 완전히 관리하도록 하여, 한 줄 차이(diff)를 1급 사용자 대상 아티팩트로 취급합니다. 버전 관리 프로비넌스가 없으면 화요일에 시스템이 믿었던 상태로 되감을 수 없습니다. 이전 믿음이 보관되지 않고 삭제되기 때문입니다.
Reciprocal (상호) 는 "이 출처를 공유하는 다른 사실들은 무엇인가?"라는 질문에 답합니다. llm-wiki는 네 가지 신호 관련성 그래프에서 직접 연결보다 출처 중복을 더 중요하게 평가합니다. 동일한 원시 문서에서 나온 두 페이지는 직접적인 위키링크가 있는 두 페이지보다 더 강하게 관련되어 있다고 간주됩니다. LLM은 교차 연결에 신뢰할 수 없지만 출처의 프런트매터는 기계적으로 유지되기 때문입니다. EdgeQuake는 엔터티와 관계에 출처 ID를 누적하여, 다른 출처에서 동일한 엔터티가 반복적으로 언급될수록 프로비넌스 가중치가 강화됩니다. second-brain은 출처를 어휘 인덱스 복합 키의 일부로 포함하여, 단일 문서가 여러 파이프라인에서 독립적으로 인덱싱될 수 있게 합니다. 상호 프로비넌스가 없으면 "이 시스템에서 같은 대화에서 나온 모든 것을 보여줘" 또는 "그 문서에서 또 무엇을 배웠는가?"와 같은 질문에 답할 수 없습니다.
여섯 가지는 서로 직교하지만, 서로를 강화합니다. 출처 프로비넌스는 정체성 없이는 무용지물입니다(사실을 추적하려면 먼저 이름을 붙여야 합니다). 버전 관리는 신뢰도 없이는 약해집니다(편집 계보는 알 수 있지만, 각 편집에 대해 시스템이 얼마나 확신했는지는 알 수 없습니다). 상호 질의는 출처가 먼저 존재해야 가능합니다. 여섯 가지를 모두 갖춘 시스템은 메모리가 조용히 부패하지 않는 시스템입니다.
구현 성숙도의 세 단계
코퍼스는 프로비넌스가 어디에 저장되는지와 읽기 시점에 무엇을 할 수 있는지에 따라 세 가지 단계로 구분됩니다.
1단계(Tier 1) 는 프로비넌스가 없는 RAG(no-provenance RAG)로, 대부분의 팀이 시작하는 지점입니다. 콘텐츠와 임베딩만 있는 플랫 벡터 저장소입니다. 출처 열도, 신뢰도 점수도, 버전 기록도 없습니다. 사실이 검색되면 텍스트와 유사도 점수만 얻을 수 있습니다. 어디서 왔는지, 시스템이 얼마나 확신했는지, 대체되었는지 여부를 추적할 수 없습니다. 여기서 시작한 모든 시스템은 시간이 지남에 따라 2단계로 이동했습니다.
2단계(Tier 2) 는 행(row)에 프로비넌스를 저장합니다. 출처 ID, 신뢰도, 버전 등이 사실과 함께 열로 존재합니다. mem9는 여기에 해당하며, 모든 행에 출처, 에이전트 ID, 세션 ID, 버전을 가지고 있습니다. Supermemory의 버전 관리 DAG는 2단계 구조입니다. Graphify의 세 가지 수준 엣지 신뢰도는 2단계 원칙입니다. 프로비넌스는 질의에 사용 가능하지만, 검색 결과에 자동으로 첨부되지는 않습니다. 이를 사용하는 질의를 직접 작성해야 합니다.
3단계(Tier 3) 는 호출자가 요청하지 않아도 읽기 시점 결과에 프로비넌스 컨텍스트를 첨부합니다. Hindsight가 여기서 기준이 됩니다. 검색된 모든 사실은 출처 유형, 신뢰도 점수, 신선도 상태, 검색기별 순위가 이미 첨부되어 도착합니다. 결과를 소비하는 에이전트는 프로비넌스를 별도의 조회가 아닌 사실의 일부로 봅니다. mem9의 소스-턴 장식(source-turn decoration)은 2단계와 3단계 중간에 위치하며, 2단계 스키마에 읽기 시점 컨텍스트를 접목합니다.
이러한 이행은 단방향입니다. 3단계에서 시작하여 프로비넌스 원칙을 제거하기로 결정한 시스템은 없습니다. 열이 존재하면 즉시 그 가치가 증명됩니다. 오늘날 메모리 시스템을 설계하고 있다면, 질문은 "프로비넌스가 필요한가?"가 아니라 "내가 선택한 단계보다 위의 단계는 나중에 도달하기가 지금 내장하는 것보다 훨씬 어렵다는 것을 알면서, 어느 단계에서 시작할 것인가?"입니다.
경고 사례: 계산되었지만 폐기됨
Understand-Anything은 신뢰도에 대한 기반은 존재하지만 이를 기록할 열이 없을 때 어떤 일이 발생하는지 보여줍니다. 이 시스템은 결정론적 엣지(프로젝트 스캐너가 소스 파일에서 해결)와 추론 엣지(LLM이 의미 분석 중에 추측)를 구분합니다. 이 정보는 실제로 의미가 있습니다. 구조적 임포트 엣지는 비코드 추론보다 더 높은 신뢰도를 가질 자격이 있습니다. 하지만 둘 다 가중치 0.7로 저장되어 그래프에서 동일하게 취급됩니다. 신뢰도 신호는 쓰기 시점에 계산되지만, 지속성 저장 전에 폐기됩니다.
신뢰도 필드를 추가하는 것은 작은 변경이지만 정보 품질에 큰 보상을 가져옵니다. 시스템은 이미 어떤 엣지가 확실하고 어떤 것이 추측인지 알고 있습니다. 단지 중요한 곳, 즉 나중에 검색될 행에 그 구분을 기록하지 않을 뿐입니다. 에이전트가 이들을 구분해야 할 때 말이죠. 이 패턴은 코퍼스의 여러 시스템에서 나타납니다. 정보는 쓰기 시점에 이용 가능하고, 캡처 비용이 저렴하지만, 아무도 열을 추가하지 않았기 때문에 손실됩니다.
제대로 구축하는 데 드는 정직한 비용
프로비넌스는 바이트를 소모합니다. 출처 ID, 신뢰도 점수, 버전 카운터 각각은 행당 몇 개의 필드를 추가합니다. 규모가 커지면 이는 중요하지만, 프로덕션에서 문제가 발생하여 시스템이 잘못된 답변을 생성한 이유를 추적할 수 없을 때의 비용보다는 훨씬 적습니다.
계산 비용은 예상보다 낮습니다. 신뢰도 점수 매기기는 일반적으로 쓰기 시점에 LLM 호출 한 번(또는 구조적 사실에 대한 결정론적 휴리스틱)이 필요하며, 이는 이후 모든 읽기에서 분할 상환됩니다. 출처 추적은 이미 존재하는 식별자를 기록하는 것 이상의 비용이 들지 않습니다. 버전 관리는 전체 스냅샷이 아니라 쓰기당 하나의 추가 열 또는 하나의 추가 작업만 필요합니다. Hindsight의 관측치 계층은 검색되어 사용된 사실의 수에 비례하여 저장 공간을 추가하지만, 에이전트가 실제로 소비한 것만 기록하고 본 모든 것을 기록하지는 않습니다.
운영 비용이 실제 질문입니다. 3단계 장식은 모든 검색 시 더 많은 데이터를 흐르게 하여 컨텍스트 창 사용량과 응답 지연 시간을 약간 증가시킵니다. 이를 제공하는 시스템은 장식을 간결하게 유지하여 처리합니다. 즉, 전체 프로비넌스 트리를 인라인으로 포함하는 대신 출처 유형 열거형, 신뢰도 부동소수점, 신선도 상태를 사용합니다. 에이전트는 메타데이터에 묻히지 않고 충분히 구분할 수 있습니다.
가장 강력한 구현체의 공통점
코퍼스 전반의 모범 사례를 다시 언급할 가치가 있습니다. 어떤 두 시스템도 동일한 문제 영역을 해결하지 않기 때문입니다.
OpenContext는 모든 파일 시스템 재구성을 견디는 UUID를 발행하고, 이를 에이전트가 직접 사용할 수 있는 인용 체계로 노출합니다. mem9는 모든 행에 출처, 에이전트 ID, 세션 ID를 저장하고, 모든 업데이트에 버전을 포함하며, 명시적 예산에 따라 제어되는 소스-턴 컨텍스트로 검색 결과를 장식합니다. Supermemory는 메모리를 유형화된 엣지가 있는 버전 관리 DAG로 취급하여, 모든 믿음에 커밋 기록을 부여합니다. Hindsight는 검색되어 사용된 모든 사실을 전체 출처 프로비넌스, 진화 기록, 검색기별 순위와 함께 관측치 계층에 캡처합니다. Graphify는 모든 엣지에 세 가지 수준의 캡처 신뢰도를 표시하여, 불확실한 엣지를 사실로 처리하지 않고 사람 검토를 위해 표면화합니다.
공통된 관찰은 명확합니다. 프로비넌스는 메타데이터가 아니라 사실의 일부입니다. 그렇게 취급하는 시스템은 메모리가 조용히 부패하지 않고, 모순을 해결할 수 있으며, 할루시네이션을 추적할 수 있고, 필요성을 미리 예측하지 않아도 믿음의 기록을 과거 어느 시점으로 되감을 수 있습니다.
그렇지 않은 시스템의 사용자는 결국 신뢰했던 메모리가 처음부터 고립된 섬이었음을 알게 됩니다.
프로비넌스는 쓰기 시점에 살 수 있는 가장 저렴한 보험입니다. 원칙은 필요하다는 것을 알기 전에 구매하는 것입니다.
이 글이 유용하셨다면, 다른 분들도 보실 수 있도록 공유해 주세요 :)
다음 글에서는 하이브리드 검색과 RRF, 즉 벡터 신호와 키워드 신호를 하나가 다른 하나를 압도하지 않도록 결합하는 패턴을 다룹니다. 이는 프로비넌스가 사실이 확실하다고 알려주지만 관련성만으로는 묻혀버릴 때 가장 중요합니다. 그 글이 곧 공개됩니다.





