네 가지 메모리 시스템이 동일한 벽에 부딪혔을 때
요약
LLM을 이용해 지식 그래프와 같은 구조화된 메모리 시스템을 구축할 때 발생하는 '조기 검색 폐쇄(premature retrieval closure)' 현상을 다룹니다. 추출된 데이터가 겉보기에 완벽해 보여도 실제 구조적 충실도(fidelity)가 낮을 수 있음을 경고합니다.
핵심 포인트
- LLM 추출 데이터는 어휘는 잘 복구하지만 구조적 관계(edge)는 놓치기 쉽습니다.
- 조기 검색 폐쇄: 검색 결과가 그럴듯해 보여 누락된 정보를 인지하지 못하는 현상입니다.
- 구조화된 메모리는 오류를 유형화하고 인덱싱하여 잘못된 정보를 권위 있게 저장합니다.
- LLM 기반 메모리 시스템 구축 시 데이터의 충실도(fidelity) 검증이 필수적입니다.
저는 저의 작업 세션들을 바탕으로 지식 그래프 (Knowledge Graph)를 구축했습니다. 수백 개의 세션들 — 즉, 제가 LLM (Large Language Models)으로 시스템을 구축하는 과정의 전사 데이터(transcripts)를 개념(concepts), 결정(decisions), 발견(findings), 그리고 그들 사이의 엣지(edges)로 추출해낸 것입니다. 한동안은 이 시스템이 제대로 작동하고 있다고 느꼈습니다. 쿼리(query)를 던지면 깔끔하고 구조화된 답변을 얻을 수 있었고, 그대로 다음 단계로 넘어갔습니다.
그러다 저는 이 시스템에 외부 모델 (foreign model)을 실행해 보았습니다. 다른 모델에게 저의 개념 정의들을 제공하고, 어휘와 관계를 모두 포함하여 시스템을 재구성하도록 요청했습니다. 그 모델은 단어의 97.7%를 복구해냈습니다. 하지만 구조(structure)는 61.1%만을 복구했습니다.
그 36%포인트의 격차는 제가 문제 속에 갇혀 사는 대신, 문제를 직시할 수 있었던 첫 번째 순간이었습니다. 정의가 신중하게 작성되었기 때문에 어휘는 전이되었습니다. 하지만 엣지는 전이되지 않았는데, 왜냐하면 엣지는 제가 추출 (extraction) 과정에 맡겨두었던 부분이었기 때문입니다. 그리고 그동안 그래프를 쿼리하는 과정은 완벽하게 느껴졌습니다. 구조가 타이핑되고, 연결되어 있으며, 확신에 찬 모습으로 돌아왔기에 저는 더 이상 살펴보지 않았습니다. 저는 이를 '조기 검색 폐쇄 (premature retrieval closure)'라고 부르기 시작했습니다. 즉, 검색 결과가 전체 답변과 유사한 형태를 반환하기 때문에, 정작 누락된 부분들을 알아차리지 못하게 되는 현상을 말합니다.
_Building at the Edges of LLM Tooling_의 파트 10입니다. 만약 여러분이 LLM 기반 메모리 시스템(가공되지 않은 세션을 구조화되고 지속적인 메모리로 변환하는 모든 것)을 통해 장기 프로젝트를 운영하고 있다면, 이 글은 구조가 얼마나 완전한지에 대해 거짓말을 하기 시작하는 단계에 관한 것입니다. 여기에서 시작하세요.
왜 고장 나는가
이러한 종류의 모든 메모리 시스템은 동일한 방식을 취합니다. LLM이 가공되지 않은 상호작용(대화, 문서, 세션 로그)을 읽고 그로부터 엔티티(entities), 사실(facts), 규칙(rules), 요약(summaries)과 같은 구조화된 메모리를 끌어올립니다. 이 구조화된 메모리는 나중에 에이전트(agent)가 가공되지 않은 기록 대신 읽게 될 대상이 됩니다.
여기서 '충실도(fidelity)'가 문제입니다. 지저분한 텍스트에서 깨끗한 구조를 뽑아낸다는 것은, 텍스트가 명시적으로 만들지 않은 결정들을 내리는 것을 의미합니다. 이 대명사가 어떤 개체(entity)를 가리키는지, 관계가 실제인지 추론된 것인지, 무엇을 유지하고 무엇을 버릴지를 결정하는 것입니다. 이러한 결정들은 틀릴 수 있고, 잘못되었을 때 그 오류는 구조로 저장됩니다: 유형화되고(typed), 인덱싱되며(indexed), 검색 준비가 됩니다.
잡기 어려운 부분은 후반부입니다. 추출(extraction)의 결과물은 권위 있어 보입니다. 신뢰도 점수와 세 개의 엣지(edge)를 가진 유형화된 개체는, 그것이 나온 단락보다 더 믿을 만하게 읽힙니다. 충실도가 그렇지 않을 때에도 다듬어진 모습 자체는 진짜인 것입니다. 따라서 말해진 것과 저장된 것 사이의 격차는 제가 가장 잡고 싶을 바로 그 지점—즉, 쿼리(query)를 날리고 자신감 있는 답변을 받을 때—에서 눈에 보이지 않게 됩니다.
그것이 벽입니다. '추출이 어렵다'라는 문제가 아닙니다. 이는 추출된 구조가 실제로는 뒷받침할 수 없는 완전함의 느낌을 만들어낸다는 것입니다.
내가 시도했고, 어디서나 그것을 발견했다
내가 고친 것은 더 나은 추출(extraction)이 아니었습니다. 그것은 격하(demotion)였습니다. 나는 추출된 그래프가 진실의 원천(source of truth)이 되도록 두는 것을 멈추고, 그것을 파생적이고 부차적인 증거로 유지했습니다. 원본 세션 기록(raw session record)이 주된 자료로 남습니다. 그래프는 틀릴 수 있도록 허용되는데, 왜냐하면 그로부터 어떤 것도 진실의 근거(ground truth)로서 답변하지 않기 때문입니다. 이것은 구조가 지탱하는 역할을 하지 못하도록 내가 내린 설계 선택이며, 그것 자체가 추출을 더 충실하게 만든다고 주장할 수는 없습니다.
내가 예상치 못한 것은 내가 얼마나 많은 동료를 가졌는지였습니다. 문제의 형태를 알게 되자, 나는 나보다 훨씬 심각하고 자원이 풍부한 프로젝트들에서도 이 문제를 발견하기 시작했고, 각각은 어딘가에서 그 어려움을 인정하며 추출 단계 자체를 기본적으로 처리된 부분으로 취급했습니다.
Letta는 MemGPT 연구에서 파생된 프로젝트로, _compaction_을 통해 긴 대화를 처리합니다. 컨텍스트가 창(window)의 크기를 초과하면 가장 오래된 메시지를 요약하여 공간을 확보합니다. 원본 메시지는 데이터베이스에 보존되며, 에이전트가 보는 것은 이 요약본입니다. 자체 이슈 트래커는 이것이 어떤 비용을 수반하는지에 대한 가장 솔직한 문서입니다. 열려 있는 한 이슈에서는 컴팩션(compaction)이 두 번 실행되어 이미 요약된 히스토리를 다시 요약하는 경우를 설명하는데, 이를
Volodymyr Pavlyshyn의 agentic-memory 아키텍처는 LadybugDB 그래프 데이터베이스(graph database)를 기반으로 구축되었으며, 가공되지 않은 대화(raw conversation)를 엔티티(entities), 사실(facts), 이벤트(events), 메모리(memories)의 네 가지 계층으로 끌어올립니다. 그는 추출된 모든 사실(명시된 것, 암시된 것, 추론된 것, 추측된 것)에 확신도 점수(certainty score)를 포함하며, "추출 오류(extraction errors)"를 그래프의 형태에서 감지할 수 있는 요소로 플래그를 지정합니다. 파이프라인의 메커니즘은 상세히 명시되어 있습니다. 추출 프로세스 자체에 대한 개념적 장(chapter)은 그의 설계 문서(design doc)상에서 아직 작성되지 않은 체크리스트 상태인데, 이는 저에게 있어 확정된 부분이 어디에서 끝나는지를 보여주는 정직한 지표로 읽힙니다.
Hyperspell은 연결된 계정들을 "메모리 그래프(memory graph)"로 인덱싱하여 중요한 인물, 프로젝트, 사실을 자동으로 추출하는 메모리 계층을 판매합니다. 마케팅 측면에서 보면 추출은 쉬운 부분입니다. 연결만 하면 작동하니까요. 하지만 API는 더 조용한 이야기를 들려줍니다. 여기에는 충돌 감지(conflict detection), 신선도 확인(staleness checks), 3-way 병합(three-way merges), 그리고 시간이 지남에 따라 결과가 개선될 수 있도록 점수를 매기는 엔드포인트(endpoint)가 포함되어 있습니다. 이러한 장치들은 추출된 메모리가 소스(source)로부터 벗어날 때만 필요합니다. 이 수정 계층(correction layer)이야말로 랜딩 페이지에서는 인정하지 않는 사실입니다.
그것이 드러낸 것
네 가지 아키텍처, 네 팀, 그리고 동일한 형태입니다. 그들 중 누구도 메모리에 대해 순진하게 접근하지 않습니다. Letta는 손실을 공개적으로 기록하고, CASS는 드리프트(drift)를 중심으로 설계하며, Pavlyshyn은 자신의 불확실성에 점수를 매기고, Hyperspell은 수정 스택(correction stack)을 출시합니다. 네 가지 모두에서 그 어려움이 인정되고 있습니다. 다만 그 어려움이 추출 단계 "그 자체"가 아니라, 추출 단계 "옆"에서 인정되고 있을 뿐입니다. 요약(summarization), 규칙 작성(rule-writing), 엔티티 리프팅(entity-lifting), 인덱싱(비정형에서 정형으로의 실제 변환)은 각 시스템이 그 위에 구축할 수 있을 만큼 충분히 해결된 부분으로 취급하는 영역입니다.
그리고 그들이 그 위에 구축하는 것이 바로 그 격차를 숨기는 요소입니다. 병합된 그래프(merged graph), 점수가 매겨진 사실(scored fact), 정제된 규칙(distilled rule), 재귀적 요약(recursive summary) — 각각은 완결된 것처럼 보이는 구조입니다. 구조가 정교해질수록 완결성은 더욱 설득력을 얻으며, 실제로 말해진 내용과 대조하여 재확인하려는 시도는 줄어듭니다. 저의 61.1%라는 수치 역시 숫자가 붙은 동일한 벽이었습니다. 구조적 계층(structural layer)은 제 시스템이 가장 취약한 부분이었으며, 동시에 가장 완료된 것처럼 느껴졌던 계층이기도 했습니다.
재사용 가능한 규칙 (The Reusable Rule)
LLM 기반 메모리 시스템을 통해 장기 프로젝트를 운영하고 있다면, 한 가지만 확인하십시오. 당신의 에이전트가 무엇을 진실의 근거(source of truth)로 취급하고 있습니까?
진단 방법: 시스템이 메모리를 바탕으로 답변할 때, 실제로 일어난 일을 읽고 있습니까, 아니면 일어난 일에 대한 확신에 찬 요약을 읽고 있습니까? 하나의 답변을 역추적해 보십시오. 만약 그 끝이 가공되지 않은 원본 기록(raw record)에 닿는다면, 구조는 편의를 위한 것입니다. 만약 원본으로 돌아가는 경로 없이 추출된 구조(extracted structure)에서 끝난다면, 그 매끄러운 다듬기(polish)는 충실도(fidelity)가 획득하지 못한 역할을 대신 수행하고 있는 것입니다.
추출된 구조는 실제보다 더 완결된 것처럼 보입니다. 그것이 요약하고 있는 대상이 여전히 확인할 수 있도록 구축하십시오.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기