OpenWiki에 자체 수정 메모리 구축하기
요약
본 글은 에이전트 메모리 시스템의 '오래된 정보(stale)' 문제를 다루며, 특히 코드 변경에 민감한 OpenWiki와 같은 위키 환경을 개선하는 방법을 제시합니다. 핵심은 모든 사실적 주장에 대해 이를 뒷받침하는 증거를 영구적으로 기록하고 버전 관리하여, 출처가 변경되었는지 감지하는 것입니다.
핵심 포인트
- 사실적 주장과 코드 증거 간의 연결 고리 구축
- 주장(statement)과 증거(evidence)의 버전을 함께 추적
- 증거 버전 비교를 통해 지식의 신선도(staleness) 자동 검출
- 오래된 주장은 재검토가 필요함을 알리는 플래그 역할
메모리는 망각의 문제를 안고 있다
메모리 시스템은 잊어버릴 수 있는 능력만큼만 좋을 수 있습니다.
에이전트(agent) 메모리에 대한 대부분의 논의는 메모리를 생성하고 나중에 검색 가능하게 만드는 데 초점을 맞춥니다. 장기 기억(Long term memory)은 종종 간과되는 또 다른 흥미로운 문제를 도입합니다. 진실의 출처가 변경됨에 따라, 한때 정확했던 사실들이 메모리 시스템이 이를 알아차릴 신뢰할 수 있는 방법이 없으면 오래된 정보(stale)가 될 수 있습니다. 시간이 지남에 따라, 이는 메모리 표류(memory drift)나 메모리 오염(memory poisoning)과 같은 문제로 인해 메모리 시스템을 저하시킵니다.
이 문제는 진실의 출처가 시간이 지남에 따라 진화하는 코드인 OpenWiki와 같은 메모리 시스템에서 특히 명확합니다. 처음에는 위키가 API 동작이나 존재하는 다양한 기능을 정확하게 설명할 수 있지만, 코드가 변경됨에 따라 해당 동작과 기능도 변경될 수 있습니다. 만약 그들에 대한 문서화된 지식이 코드와 동기화되지 않는다면, 위키의 그 부분들은 오래된 정보(stale)가 됩니다.
OpenWiki를 잊어버리고 자체 수정할 수 있도록 만들기 위해, 우리는 위키가 믿는 것뿐만 아니라 그 믿음 뒤에 있는 증거를 보존하는 방법이 필요했습니다. 이것은 OpenWiki가 어떤 주장을 뒷받침하는 증거가 변경되었는지 알아차리고 위키의 어떤 부분이 재검토되어야 하는지 식별할 수 있는 방법을 제공합니다.
위키가 믿는 것을 근거화하기
첫 번째 단계는 OpenWiki에 그것이 만드는 모든 사실적 주장(factual claims)에 대한 영구적인 기록을 제공하는 것이었습니다. 이것은 에이전트가 위키 페이지를 작성할 때, 그 페이지의 주장을 식별하고 이를 뒷받침하는 코드 내의 증거도 함께 식별해야 함을 의미합니다.
예를 들어, 위키가 실패한 작업(failed tasks)들이 기본적으로 세 번 재시도된다고 말한다면, OpenWiki는 해당 주장과 그것을 뒷받침하는 코드를 기록합니다.
{
"statement": "Failed tasks are retried three times by default.",
"evidence": [
...
런타임은 나중에 해당 주장을 다시 검증할 수 있도록 지원 증거에 대한 버전을 기록합니다. 이렇게 함으로써 위키의 각 주장과 이를 뒷받침하는 코드 사이에 연결 고리를 만듭니다. OpenWiki는 위키를 단순한 텍스트 모음으로 취급하는 대신, 개별적인 주장과 그 주장이 의존하는 증거를 추적할 수 있습니다.
지식이 오래되었을 때를 아는 방법 (Knowing When Knowledge Goes Stale)
주장이 증거와 연결되면, OpenWiki는 원래 주장을 뒷받침했던 출처의 버전과 현재 존재하는 버전을 비교하여 해당 증거가 변경되었는지 감지할 수 있습니다. 만약 이들이 다르다면, 그 주장은 오래된(stale) 것으로 표시됩니다.
오래된 주장이라는 것이 반드시 그 주장이 틀렸다는 것을 의미하지는 않습니다. 이는 OpenWiki가 출처를 다시 확인하지 않고서는 해당 주장이 여전히 참이라고 안전하게 가정할 수 없다는 것을 의미합니다. 많은 코드 변경이 의존하는 주장을 즉시 무효화하지는 않지만, 재고해 볼 이유를 만듭니다.
OpenWiki는 이를 위해 별도의 상태 플래그(status flag)를 유지할 필요가 없습니다. 저장된 증거 버전만으로도 모든 업데이트 시점에 주장 신선도를 다시 검증하기에 충분하므로, 증거가 재확인될 때까지 불확실성이 지속됩니다.

오래된 주장을 수정하는 방법 (Correcting Stale Claims)
오래된 지식을 감지하는 것은 시스템이 이를 수정할 수 있는 방법을 가지고 있을 때만 유용합니다.
OpenWiki가 어떤 주장이 오래되었다고 판단하면, 현재의 지원 증거를 검사하여 그 주장이 참인지 거짓인지를 판단할 수 있습니다. 만약 주장이 여전히 참이라면, OpenWiki는 증거 버전을 새로 고칠(refresh) 수 있습니다. 만약 주장이 이제 거짓이라면, 위키 콘텐츠와 이를 뒷받침하는 증거가 함께 업데이트됩니다.
중요한 동작 방식은 오래된 주장들은 실제로 검증이 이루어질 때까지 계속 오래된 상태를 유지한다는 것입니다. 시간이 지남에 따라, 이는 자체 수정(self-correcting) 피드백 루프를 만듭니다. 출처의 변경은 이전에 신뢰했던 주장을 오래되게 만들고, 그 불확실성은 각 주장이 다시 검증될 때까지 지속됩니다. 위키 업데이트는 문서를 현재 진실과 동기화시킵니다.
이는 단순히 위키를 처음부터 다시 생성하는 것과는 다릅니다. OpenWiki는 이미 알고 있는 것을 유지하고, 어떤 주장이 오래되었는지 추적하며, 출처가 계속 진화함에 따라 해당 주장들을 수정합니다.
Claims를 OKF v0.2와 연결하기
Claims는 OpenWiki에게 각 페이지가 무엇을 믿고 있는지, 그리고 그것을 뒷받침하는 버전이 지정된 증거에 대한 내부 기록을 제공합니다. Open Knowledge Format (OKF) v0.2는 페이지 수준의 결과물을 OpenWiki 외부에서도 이식하고 검사할 수 있게 만듭니다.
OpenWiki는 주장(claim) 증거를 각 페이지의 OKF sources 메타데이터에 기록하고, generated로 어떤 생산자(producer)가 마지막으로 페이지 본문을 변경했는지 기록하며, 페이지의 전체 주장 세트가 조정되고, 재검토되고, 영구 저장된 후에만 verified를 추가합니다. 위키의 루트 인덱스는 okf_version: "0.2"를 선언하여, OKF를 소비하는 다른 도구들에게 마크다운 번들을 인식할 수 있게 합니다.
이는 책임 분담에 유용한 구분을 만듭니다. Claims는 개별적인 믿음이 신뢰할 만한지 여부를 결정합니다. OKF는 그 믿음을 담고 있는 문서의 출처(provenance), 증거 출처, 그리고 검증 이력을 전달합니다. 상세한 주장과 정확한 증거 버전은 OpenWiki의 사이드카에 유지되고, 이식 가능한 마크다운은 OKF 프런트 매터의 일부로 표준 신뢰 요약 정보를 노출합니다.
실제 작동 방식
오래됨 감지(Staleness detection)는 에이전트가 어떤 작업을 수행하기 전에 모든 위키 업데이트 시작 시점에 실행됩니다. 런타임은 전체 주장 세트를 순회하며 각 주장의 영구 저장된 증거 버전과 현재 출처를 비교합니다. 이는 모델 호출 없이 이루어지는 결정론적(deterministic) 확인 작업이므로, 위키가 수천 개의 주장을 축적하더라도 빠르게 유지됩니다.
에이전트는 주장(claim) 세트를 자체적으로 스윕하지 않습니다. 업데이트 과정에서 페이지를 읽을 때, 해당 페이지의 오래된 주장은 콘텐츠와 함께 노출되며, 에이전트는 이미 수행 중인 작업의 일부로 이를 해결합니다. 즉, 주장을 재검증하고 증거를 새로 고치거나, 주장과 위키 텍스트 자체를 함께 수정하는 것입니다. 해결되지 않은 내용은 조용히 무시되는 대신 향후 업데이트를 위해 플래그가 지정된 상태로 유지됩니다.
이러한 실질적인 효과는 업데이트 비용이 위키가 보유한 주장의 개수가 아니라, 코드가 얼마나 변경되었는지에 따라 규모가 결정된다는 것입니다.
망각(Forget) 능력 평가하기
이를 측정하기 위해, 우리는 코드 저장소(code repository)를 일련의 git 커밋을 통해 재현하고, 위키가 업데이트되는 사전 정의된 체크포인트(checkpoint)를 거치도록 하는 평가 시스템을 구축했습니다. 다양한 커밋들은 새로운 기능 추가, 기존 동작 변경, 버그 수정, 그리고 되돌리기(revert) 등을 도입합니다.
각 업데이트 후, 우리는 위키의 사실적 주장들을 평가하고 각각을 다음 중 하나로 분류했습니다:
- 지원됨(Supported): 해당 주장이 현재 체크포인트의 코드를 통해 뒷받침되는 경우.
- 오래됨(Stale): 해당 주장이 이전 체크포인트에서는 정확했지만, 이후 코드가 변경되어 더 이상 유효하지 않은 경우.
- 환각(Hallucinated): 해당 주장이 저장소의 역사 어느 시점에서도 사실이 아니었던 경우.
- 미검증(Unverified): 코드와 비교하여 확인하거나 반박할 수 없는 주장.
우리는 OpenWiki claims runtime을 사용했을 때와 사용하지 않았을 때 동일한 순서로 테스트를 진행했습니다.
각 업데이트에서 우리는 오래된 주장이 기준선(baseline)에서는 80개였으나 claims runtime 사용 시에는 9개로 감소했으며, 환각 주장은 15개에서 0개로 감소하는 것을 확인했습니다.
또한 개별 실행에서 자체 수정 동작을 직접 확인할 수 있었습니다. 한 예시에서는 코드 변경으로 인해 위키 주장 중 17%가 첫 번째 체크포인트에서 오래된 상태였습니다. 다음 체크포인트까지는 오래된 주장이 0%로 돌아왔고, 지원되는 주장은 77%에서 98%로 회복되었습니다.
이것이 우리가 가장 중요하게 생각하는 동작입니다. claims runtime은 OpenWiki가 기존 지식이 더 이상 신뢰할 수 없을 수도 있다는 것을 식별하고, 그 불확실성을 업데이트 전반에 걸쳐 유지하며, 나중에 코드가 계속 진화함에 따라 이를 수정할 수 있는 방법을 제공합니다.
메모리를 자체 수정 가능하게 만드는 요소
메모리 시스템은 자신이 무엇을 믿고, 왜 그렇게 믿는지 말할 수 있는 방법이 있어야 합니다. 더 중요한 것은, 한때 유효했던 것이 오래되어 쓸모없게 되었을 때(stale), 그 시스템이 잊어버리고 자체적으로 수정할 수 있는 방법을 가져야 한다는 것입니다.
Claims runtime은 OpenWiki에 이러한 기능을 제공합니다. Claims는 위키 지식을 출처 증거(source evidence)와 영구적으로 연결하여, 증거의 변경 사항이 영향을 받은 주장(claims)을 오래된 것으로 표시하게 합니다. 향후 위키 업데이트는 위키 전체를 처음부터 다시 구축할 필요 없이, 오래된 주장을 검증하거나 자체 수정할 수 있는 능력을 갖게 됩니다.
이 모델에서 '잊어버린다'는 것은 단순히 오래된 기억을 삭제하는 것에 관한 것이 아닙니다. 대신, 언제 믿음(belief)을 더 이상 신뢰해서는 안 되는지 아는 것에 관한 것입니다. 이는 OpenWiki가 자신이 나타내는 출처 코드로부터 서서히 벗어나기보다는, 능동적으로 잊어버리고 진화할 수 있는 방법을 제공합니다.
OpenWiki 0.4.0 사용해 보기
이미 OpenWiki를 사용하고 있다면, 0.4.0으로 업그레이드하는 것만으로도 위키에 대한 주장을 자동으로 생성하기 시작하며 다음 업데이트에서 OKF v0.2로 마이그레이션됩니다. 저장소(repo)를 확인하거나 공식 문서를 사용하여 OpenWiki에 대해 더 자세히 알아볼 수 있습니다:
오늘 바로 사용해 보세요:
npm install -g openwiki@latest
openwiki --init
AI 자동 생성 콘텐츠
본 콘텐츠는 LangChain Blog의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기