memvault 전경: 세 트랙 × 세 겹의 설계 원칙
3부작 총정리 — 기록, 정리, 회상을 하나의 지도로 엮고 CLT, Event Flows, Reactive라는 세 겹의 설계 원칙을 더합니다.
3부작을 마친 뒤, 세부 내용을 반복하는 대신 '기록, 정리, 회상'이라는 세 트랙을 한 화면에 나란히 놓은 지도가 필요했습니다.
하지만 제가 아직 이야기하지 않은 것이 있습니다. 이 세 트랙뒤에 있는 설계 맥락입니다. 전체를 관통하는 세 가지 원칙이 있고, 개발할 때 제 판단 기준이 되었습니다. 이 마무리 글에서 한 번에 풀어 보겠습니다.
아키텍처 개요
세 트랙을 담은 전체 지도입니다. 실선은 주 흐름, 트랙을 가로지르는 점선은 시스템이 스스로 돌아가게 하는 4개의 이벤트 흐름을 나타냅니다. 13개의 group bracket이 관련 구성 요소를 묶고, 각 group 뒤에는 구성 요소의 상세 설명이 이어집니다.
1. 기록 트랙 — 대화가 보관소로 들어갑니다
기억이 보관소로 들어가는 트랙
기록 트랙은 기억을 저장하는 일을 화물이 창고에 들어가는 과정에 비유합니다. 입구에는 세 관문이 있습니다. 첫째는 '음, 그래'처럼 정보가 없는 말을 걸러내고, 둘째는 의심스러운 명령을 막아 이상한 내용이 시스템을 망가뜨리지 못하게 하며, 셋째는 이미 있는 중복 정보를 걸러냅니다. 세 관문을 모두 통과해야 보관됩니다. 전부 받으면 잡음에 묻혀 정작 유용한 것을 찾기 어렵고, 받지 않으면 방금 나눈 이야기가 사라질까 봐 이 관문들을 만들었습니다.
보관에도 두 경로가 있습니다. 하나는 의미적 유사도에 따라 저장하고, 다른 하나는 사람·사건·사물의 관계를 풀어 별도로 기록합니다. 모든 기록에 출처를 표시해 나중에 원래 대화를 찾을 수 있도록 합니다.이 세 관문과 이중 경로 보관의 전체 흐름과 세부 내용은 이 글에 담았습니다.
누군가 말했습니다
대화가 기록되면 백그라운드 작업이 시작됩니다.
보안 검사 관문 세 개
보관소에 들어가기 전 세 단계의 필터링입니다. 순서는 바꿀 수 없습니다.
문장 정리와 등록
표기를 통일한 다음 두 종류의 인덱스로 만들어 함께 등록합니다.
지식 그래프 만들기
각 문장을 관계로 분해하고 출처를 기록하며 주 흐름과 병렬로 실행합니다.
2. 백그라운드 트랙 — 잊는 법 배우기
잊는 법을 배우는 트랙
저는 백그라운드 트랙을 보관소에 '잊는 법'을 가르치는 야간 재고 담당자로 생각합니다. 정해진 밤 시간에 돌아다니며 다섯 단계를 밟습니다. 먼저 현재 재고를 살피고, 최근 주목받는 정보를 찾고, 중복되거나 모순될 만한 내용을 대조·통합하고, 확인된 핵심을 요약으로 압축한 뒤, 아무도 찾지 않는 오래된 자료를 처리 대상으로 표시합니다. 이 트랙이 없으면 창고에는 물건이 들어오기만 해서 반년 뒤에는 아무것도 찾기 어려울 만큼 어수선해집니다.
옆에는 두 조력자가 있습니다. 하나는 모순되는 기억을 찾아 흠을 잡고, 다른 하나는 제가 최근 관심을 보이는 주제를 조용히 기록합니다. 그래서 재고 담당자는 제가 관심 있는 분야를 먼저 처리할 수 있습니다.이 야간 작업의 전체 흐름과 무엇을 남기고 지울지 결정하는 논리는 이 글에 담았습니다.
한밤중에만 작동
새벽 4시가 되고 조건이 모두 맞아야 실행됩니다.
꿈의 다섯 단계
밤에 잠을 자듯 다섯 단계에 걸쳐 낮에 쌓인 일을 정리합니다.
진위 검사관
꿈속에서 네 단계의 추가 검사를 거쳐 모순과 오류를 건져냅니다.
관심사와 탐색
사실만 기록하지 않고 선호도, 빈틈, 뜻밖의 발견과 오래된 사진을 어떻게 보관할지도 기록합니다.
3. 회상 트랙 — 알맞은 기억이 떠오르게 하기
기억을 떠올리는 트랙
저는 회상 트랙을 식당의 홀에 비유합니다. 손님이 묻자마자 먼저 질문 유형(사실 조회, 관계 찾기, 잡담)을 파악합니다. 그러면 주방에서 여러 저장 구역의 재료를 동시에 가져오고, 품질 관리 담당자가 적합하지 않은 것을 걸러냅니다. 음식을 내기 전에는 내용에 문제가 없는지 다시 한번 검사합니다. 저장하고 정리해 둔 기억이 알맞은 순간에 저절로 떠오르는 것은 마지막으로 이 단계에 달려 있습니다. 매번 애써 뒤질 필요가 줄어듭니다.
더 놀라운 점은 주방의 준비조가 뒤에서 몰래 재료를 준비한다는 것입니다. 제가 다음에 무엇을 물을지 예측해 관련 기억을 미리 가져다 놓으므로, 제가 입을 열면 모든 절차를 다시 밟지 않고 바로 내놓을 수 있습니다.주문을 받고 음식을 내기까지의 회상 논리 전체는 이 글에 담았습니다.
손님에 맞춰 내기
손님이 들어오면 먼저 의도를 파악하고 어느 계층에서 찾을지 정합니다.
빠른 검색
창고에서 먼저 대강 고른 뒤 11단계 가중치로 순위를 매깁니다. 자주 쓰는 지문은 캐시에 남습니다.
두 번째 정밀 선별
대강 고른 후보를 정밀 선별 담당자에게 넘기지만, 이 단계는 생략하거나 중단할 수 있습니다.
느린 사고의 다섯 방법
느린 사고 경로에서만 쓰는 다섯 가지 예비 방법입니다. 사실부터 전체 모습까지 살핀 뒤 자체 점검합니다.
출력 직전
모양을 다듬고 한 번 더 소독합니다. 뒤에서는 다음 음식을 몰래 준비합니다.
4. 세 트랙을 관통하는 설계 계층
기록, 백그라운드, 회상의 세 트랙은 같은 원칙을 공유합니다. 군더더기를 덜고, 복잡한 것을 나누고, 예시를 검증합니다. 모든 세부 사항에 이 세 겹의 원칙이 반영되어 있습니다.
세 겹의 설계 원칙
군더더기를 덜고, 복잡한 것을 나누고, 예시를 검증해 집이 스스로 돌아가게 합니다.
여기까지가 지도의 전체 모습입니다. Write 트랙은 대화를 저장하고, Background 트랙은 정리하며 잊는 법을 배우고, Read 트랙은 알맞은 기억을 알맞은 때에 떠오르게 합니다.
세 트랙을 하나로 잇는 것은 군더더기를 덜고, 복잡한 것을 나누고, 예시를 검증한다는 원칙입니다. 이 원칙은 모든 트랙에서 볼 수 있습니다.
물론 어떤 도구도 모든 문제를 단번에 해결하지는 못합니다. 이론, 기술, 사용법은 계속 발전하고 memvault도 시간에 따라 성장할 것입니다. 이 글은 현재 진행 상황을 담은 한 장의 사진으로 봐 주세요. 나중에 크게 바뀌면 새 글로 이야기하겠습니다. memvault 3부작은 우선 여기서 마칩니다.
아키텍처 개요
13개의 group bracket은 이 entry-agnostic pipeline 전체 지도 아래의 구성 요소 cards에 대응하며, 트랙을 가로지르는 4개의 dashed event flows는 시스템이 스스로 돌아가는 뼈대를 표시합니다.
1. Write Track
Write Track
기억 기록 경로는 SanitizeGate 가 총괄하며, 영구 저장 전에 세 가지 방어선을 거칩니다.
NoiseFilter: 정보량이 없는 잡담을 제거합니다.InjectionGuard+PoisoningDetection: prompt injection과 콘텐츠 오염을 차단합니다.DedupOp: embedding cosine으로 기존 자료와 비교해 충분히 비슷하면 바로 막습니다.
통과하면 Hybrid Indexing으로 들어갑니다. 벡터는 memvault.blocks(pgvector 768d)에 저장하고, 지식 그래프는 L0 Triple(subject/predicate/object)로 분해해 kg-ops에 기록합니다. 각 자료에는 Provenance(session_id / turn_index)가 있어 출처를 추적할 수 있고, 먼저 ContentNormalizer 로 형식을 통일해 잡음이 embedding 공간을 오염시키지 않도록 합니다.
이중 경로 기록의 이론적 기반은 논문 Don't Forget to Connect! Improving RAG with Graph-based Reranking(2405.18414)에서 가져왔습니다. 전체 pipeline, 세 방어선의 판단 기준과 KG 추출 전략은 memvault Write Track 상세편.
Trigger
대화가 기록되면 바로 실행하며, 백그라운드 파이프라인은 fire-and-forget 방식입니다.
asyncio.ensure_future() · fire-and-forgetSanitize Gate
순서대로 거치는 세 관문으로, non-commutative입니다.
core.noise.NoiseFilter · low-info regex + densitymemvault.security.poisoning · authority/role/markdown/temporal/base64 + Shannon entropyNormalize & Index
콘텐츠 정규화 + Hybrid 이중 인덱스 등록.
libs/text-ops · 4개 하위 모듈 + preprocess_chineseomlx_bridge.py · 1024d · persistent subprocesssparse_tokenizer · per-service avgdlqdrant_search · Reciprocal Rank FusionKG Construction
L0 트리플 추출 + provenance가 event-driven 방식으로 병렬 실행됩니다.
source_tracker · trust_score2. Background Track
Background Track
오프라인 정리는 DreamLoop 가 매일 4AM에 시작하며, core/src/modules/memvault/dream/ 의 5단계 pipeline을 실행합니다.
orient: 기억 계층의 현재 스냅샷을 가져옵니다.signal:MultiSignalEdges(access / cite / co-occur)를 집계합니다.reflect:TemporalConflict을 실행해 이중 시간축(bi-temporal)의 모순을 탐지합니다.consolidate: 계층별 요약(TierDigest)을 만들고 의미가 같은 기억을 병합합니다.prune: 감쇠 점수에 따라 제거 후보를 표시합니다.
별도의 경로에서는 KnowledgeLint 가 네 단계의 점진적 검토(그래프 구조 → grounding → LLM → 3단계 확인)로 오류를 바로잡습니다. 또 InterestProfile 가 제 주제별 관심도를 추적해 SurpriseDiscovery에 피드백하고, 상호작용은 적지만 잠재력이 큰 기억을 선제적으로 찾습니다.
이 백그라운드 정리 설계는 부분적으로 HippoRAG: Neurobiologically Inspired Long-Term Memory for LLMs(2405.14831)의 통합 개념과 맞닿아 있습니다. Dream Loop의 다섯 단계 기준값, 충돌 해결 전략과 KnowledgeLint v2의 세부 내용은 memvault Background Track 상세편.
Trigger
Cronicle 일정 + 이중 조건 관문입니다.
(now - last) > 24h ∧ sessions_since ≥ 5Dream Loop
OODA-like 5단계: Orient → Signal → Reflect → Consolidate → Prune.
MultiSignalEdges · PPR seedKnowledge Lint
네 단계의 점진적 감사: 그래프 구조 → 사실성 → LLM → 사람의 재검토.
Interest & Discovery
주의력 계층화 + 관심사/빈틈/뜻밖의 발견 탐색 + tier 격하.
surprise_ops · Leiden weighted triggers3. Read Track
Read Track
읽기 경로의 진입점은 QueryClassify입니다. 질문 유형에 따라 다른 전략을 고르지만, 주된 흐름은 동일한 11단계 평가 pipeline입니다.
QueryRouter: 질문을 사실, 관계, 잡담의 세 경로로 나눕니다.ScoringPipeline: BM25, dense retrieval, 지식 그래프 탐색을 결합해 병렬로 점수를 매기고, AttnRes intent-dependent 가중치로 합칩니다.CascadeRecall: 벡터 검색에서 결과를 찾지 못하면 자동으로 지식 그래프에 깊이 들어가 여러 단계로 추론합니다.Reranker: Jina Reranker v3 MLX로 재정렬합니다.OutputFormatter+ReadTimeSanitize: 출력 전 injection 검사를 한 번 더 수행합니다.
백그라운드에는 SlowThinker도 있습니다. 대화의 SSE 스트림을 듣고 다음 query를 예측해 후보 block을 미리 가져옵니다. 예측이 맞으면 pipeline 전체를 한 번 실행하는 비용을 아낄 수 있습니다.
이 intent-dependent 가중치 결합의 이론적 근거는 논문 Attention as a Hint: Detecting Irrelevant Contexts via Attention Weight(2603.15031)에서 가져왔습니다. 세 경로의 분류 기준, 11단계 평가 함수, SlowThinker 예측 모델은 memvault Read Track 상세편 에 기록했습니다.
Query Routing
의도 분류 + attention prior + layer routing + HyDE.
Fast Search
Hybrid 회상 + 11단계 가중치 + intent-tuned blending + Redis cache.
qdrant_search · hybrid + RRFReranking
Cross-encoder 2단계 정밀 정렬 + skip + circuit breaker.
Cascade Recall
Slow-only의 다섯 방법: L0 → L1 → L2 → PPR → CRAG.
(s, p, o) lookupOutput
Budget-aware 출력 정리 + 출력 측 sanitize + Slow Thinker 보조 경로.
is_unsafe_for_injection + sanitize_for_injection4. 세 트랙을 관통하는 설계 계층
세 트랙이 공유하는 설계 계층 — CLT는 철학적 frame, 4 Event Flows는 자율 작동의 뼈대, Reactive 추상화는 함수 합성의 기반입니다.
Cross-cutting
CLT의 세 원칙 + 4 event flows + Reactive 추상화.
libs/ops-core · RxJS-inspired세 트랙에 관한 deep dive는 3부작에 나뉘어 있습니다. 이 글은 이를 하나의 전체 지도로 모으고 전체를 관통하는 설계 계층을 끌어냅니다. CLT는 제 설계 철학이고, 4 Event Flows는 자율 작동의 뼈대이며, Reactive 추상화는 함수 합성의 기반입니다.
여기에 적지 않은 것은 대부분 장기적으로 조정해야 하는 매개변수입니다. 평가 가중치, 미리 가져오기 적중률, 단계별 회상 경계, 지식 그래프 추출의 신뢰도 기준 등이 그렇습니다. 이 값들은 데이터 분포에 맞춰 매달 조금씩 조정하며, 새로운 구성 요소는 아닙니다.
물론 어떤 도구도 모든 문제를 단번에 해결하지는 못합니다. 이론, 기술, 도구는 계속 발전하고 memvault도 함께 개선될 것입니다. 이 blog는 현재 진행 상황을 점검한 기록으로 봐 주세요. 나중에 크게 바뀌면 새 글로 설명하겠습니다. memvault 3부작은 우선 여기서 마칩니다.
실제로 겪은 증상을 체크하고 어느 트랙부터 보완할지 확인하십시오
이 글의 주장은 '대부분의 자작 기억 시스템에는 기록과 회상 두 트랙만 있고 백그라운드 트랙이 빠져 있어 쓸수록 어수선해진다'는 것입니다.아래 여덟 가지 증상에 나오는 구성 요소의 이름은 몰라도 됩니다. 실제로 겪은 것만 체크하면 이 글에서 설명한 원인에 따라 어느 트랙부터 살펴볼지 순서를 매깁니다. 모든 처리는 브라우저 안에서 이루어지며 데이터는 외부로 전송되지 않습니다.
이는 이 글의 설명을 비교표로 만든 것이며,측정 결과가 아닙니다. 이 도구는 사용자의 데이터를 읽거나 쿼리를 실행할 수 없습니다. 같은 증상도 이 글에서 다루지 않는 이유(애초에 자료가 적음, embedding 모델이 맞지 않음, 쿼리가 지나치게 모호함)로 자주 생깁니다. 도구는 이를 구별하지 못하고 이 글의 원인 분석에 따라 방향을 제시할 뿐입니다. 또한 이 글에는 '보완이 필요할 만큼 심각한' 기준이 없으므로 순서만 매기고 점수는 주지 않습니다.
AI Agent를 위한 전체 점검 프롬프트
대부분의 자작 기억 시스템에는 '기록'과 '회상' 두 트랙만 있고 백그라운드 트랙이 빠져 있어 쓸수록 어수선해집니다. 이 글은 스스로 정리하는 기억 시스템을 세 트랙 × 세 겹의 설계 원칙으로 펼쳐 보여 주므로 비교표로 쓰기 좋습니다.
아래 내용을 AI에 붙여 넣어 이 글의 설계와 자신의 시스템을 하나씩 비교하고 어떤 트랙과 계층이 빠졌는지 찾게 하십시오.
더 읽을거리
3부작 심층편 + 트랙 간 설계 원칙의 이론적 뿌리.
| 자료 | 중요한 이유 |
|---|---|
| memvault Write Track — 대화가 끝난 뒤 | 3부작 첫 편의 심층판입니다. 세 개의 gate(잡음 / 주입 + 위장 / 중복 제거) + 이중 경로 기록(벡터 + KG) + Provenance + Content Normalizer의 4개 하위 모듈을 다룹니다 |
| memvault Background Track — 저장한 뒤 | 3부작 둘째 편의 심층판입니다. Dream Loop 5단계, Knowledge Lint 4계층, Multi-Signal Edges, Temporal Conflict, Tier Digest, Surprise Discovery 등 12개 구성 요소를 다룹니다 |
| memvault Read Track — 기억해 낸 뒤 | 3부작 셋째 편의 심층판입니다. 의도 분류 + Personalized Router + 11-stage scoring + Cascade Recall + Read-Time Sanitize + Slow Thinker 미리 가져오기를 다룹니다 |
| Cognitive Load Theory(Sweller, 1988) | 세 트랙의 sanitize / segment / verify 관문에 깔린 설계 철학의 뿌리 — 쓰는 사람이 조금 더 애써야 읽는 사람이 덜 힘듭니다 |
| Enterprise Integration Patterns(Hohpe & Woolf, 2003) | 4 Event Flows의 pub-sub / pipe-and-filter 설계 패턴의 출처입니다. memvault는 이 패턴을 바탕으로 EventBus와 Subject 추상화를 만들었습니다 |
| RxJS Reactive Extensions | Operator / Pipeline / Observable / Subject 네 추상화의 구체적인 구현 참고 자료입니다. memvault는 RxJS를 직접 사용하지 않지만 추상화 수준은 이에 맞춥니다 |