정적 RAG의 한계와 '살아있는 컨텍스트'
정적 RAG는 '지금 무엇이 유사한가'는 답해도 '지금 무엇이 여전히 유효한가'는 답하지 못한다. 메모리 감쇠를 currency와 supersession으로 다루는, 살아있는 컨텍스트 인프라에 대한 우리의 관점.
RAG 파이프라인은 잘 돈다. 문서를 임베딩하고, 질의를 임베딩하고, 가장 가까운 조각들을 모델에 붙인다. 데모는 깔끔하고, 첫 몇 주는 답도 좋다.
문제는 시간이다. 몇 주가 지나면, 우리는 이미 뒤집은 결정이 검색 상위에 다시 올라오는 걸 본다. “그 방식은 안 쓰기로 했다”고 합의해 놓고도, 그 방식을 설명하는 옛 문서가 여전히 가장 유사한 조각으로 뽑혀 모델에 들어간다. 더 나쁜 건 상충이다 — 같은 질문에 대해 옛 답과 새 답이 동시에 검색되어, 모델이 둘을 평균 내거나 둘 중 하나를 임의로 고른다.
유사도는 맞는데, 유효하지 않았다. 이게 우리가 자체 작업에서 부딪힌 구체적인 지점이고, 이 글은 그 진단에서 출발한다.
정적 RAG가 답하지 못하는 질문
임베딩 검색은 한 가지 질문에 답하도록 만들어졌다. “지금 들어온 질의와 가장 유사한 컨텍스트는 무엇인가.” top-k는 이 질문을 충실히 수행한다.
하지만 운영에서 진짜로 묻고 싶은 건 다른 질문이다. “지금 무엇이 여전히 유효한가.” 임베딩 공간은 의미적 거리를 알 뿐, 시점도 유효성도 대체 관계도 모델링하지 않는다. 어제 내린 결정과 석 달 전 뒤집힌 결정이, 텍스트가 비슷하다는 이유만으로 같은 자격을 갖고 검색된다.
이걸 우리는 메모리 감쇠(memory decay)라고 부른다. 정반대로, 낡은 것이 낡았다는 표시 없이 계속 최신인 척 재부상하는 현상이다. 컨텍스트 윈도우를 키우는 건 이 문제를 풀지 못한다 — 오히려 낡은 조각을 더 많이 끌어와 상충을 키운다. 핵심은 용량이 아니라 수명 관리다.
컨텍스트를 살아있는 것으로 다룬다 — currency와 supersession
우리가 택한 접근은 컨텍스트를 한 번 색인하고 끝나는 스냅샷이 아니라, 수명을 가진 자산으로 다루는 것이다. 컨텍스트 블록마다 두 가지를 1급 개념으로 부여한다. currency(이 정보가 지금 얼마나 유효한가)와 supersession(이 정보를 대체한 더 새로운 결정이 있는가).
새 결정이 옛 결정을 대체하면, 옛것을 지우지 않는다. 상태만 바꾼다. 개념적으로는 이렇다.
context_block:
claim: "이 부분은 이렇게 처리한다"
status: active # 또는 superseded
superseded_by: <더 새로운 결정으로의 참조>
상태가 superseded로 바뀐 블록은 검색에서 기본적으로 제외된다. 모델은 더 이상 그 옛 결정을 “가장 유사한 유효 컨텍스트”로 받지 않는다. 우리는 이걸 supersession-over-deletion이라 부른다 — 대체하되 삭제하지 않는다.
여기에 한 겹이 더 있다. 같은 질의라도 누구의 관점에서 묻는가에 따라 유효한 답이 달라질 수 있다. 운영자에게 유효한 컨텍스트와 검토자에게 유효한 컨텍스트는 다르다. 우리는 이 다관점(stakeholder) 가중을 설계의 한 축으로 둔다. 이 글에서 중요한 건 결과가 아니라 명제다 — 컨텍스트의 유효성은 시점과 관점의 함수다.
왜 삭제하지 않고 대체하는가
가장 단순한 해법은 옛 결정을 지우는 것이다. 검색에 안 잡히게 하는 가장 확실한 방법은 존재를 없애는 거니까. 우리는 그 길을 택하지 않았다. 이유는 트레이드오프에 있다.
하드 삭제는 두 가지를 잃는다. 첫째, 왜 그 결정을 내렸는가의 추적이다. 어떤 결정은 그 자체보다 무엇을 대체했는지가 더 중요한데, 옛것을 지우면 새 결정의 맥락도 함께 사라진다. 둘째, 복구 가능성이다. 잘못된 대체 — 틀린 새 결정이 맞는 옛 결정을 덮어쓰는 경우 — 는 반드시 일어난다. 옛것이 superseded로 남아 있으면 되돌릴 수 있지만, 지웠다면 재구성할 길이 없다.
soft status의 비용도 정직하게 말한다. 검색 필터가 복잡해지고, 상태 일관성을 유지하는 부담이 생긴다. 그럼에도 이 비용을 감수하는 건, 운영에서 가장 비싼 실수가 잘못된 답을 자신 있게 내는 것이고, 감사 추적 없는 시스템은 그 실수를 사후에 설명조차 못 하기 때문이다.
자기 자신을 자기 컨텍스트로 개발한다
이 인프라를 우리는 데모로 만들지 않았다. 우리 자신의 작업을 위한 컨텍스트로 직접 굴린다. 우리가 내린 결정, 뒤집은 결정, 그 이유가 살아있는 컨텍스트로 쌓이고, 다음 작업은 그 위에서 시작한다. 도구를 매일 자기 손으로 쓰는 것만큼 빠르게 약점을 드러내는 검증은 없다.
정직하게 말하면, 이건 아직 다듬는 중인 방법론이다. 상태 일관성을 어디까지 자동화할지, 관점 가중을 얼마나 드러낼지는 여전히 우리가 매주 고쳐 쓰는 질문이다. BUILDING은 BUILDING이라고 말한다. 다만 우리가 확신하는 한 가지는, 컨텍스트를 시간이 지나도 썩지 않게 다루는 일은 더 큰 모델이 아니라 수명을 1급으로 두는 설계에서 나온다는 것이다.
쌓인 지식이 부채가 되기 전에
당신의 제품이 쌓는 지식·결정·사용자 맥락은, 시간이 지나면 자산이 아니라 부채가 될 수 있다. 낡은 것이 최신인 척 검색되기 때문이다. RAG를 붙이는 것만으로는 이 문제를 풀 수 없다 — 유사도는 유효성을 보장하지 않는다.
우리는 컨텍스트를 살아있는 것으로 운영하는 법을 우리 작업에서 직접 만들고 검증하고 있다. 같은 역량을 당신의 지식 시스템과 제품에 이식할 수 있다.