대화가 끝난 뒤——나는 기억을 어떻게 보관할까
냅킨 한 장에 적은 구상에서 세 개의 관문과 이중 경로 쓰기로 발전했습니다. 이 글에서는 기억이 어떻게 들어오는지만 다룹니다.
memvault는 제가 저 자신을 위해 만든 기억 금고입니다. 매일 AI와의 대화가 끝나면 내용을 남겨 두고 싶었습니다. 나중에 검색하고, 다시 불러오고, 하나의 지도로 연결할 수 있도록요.
이 글은 Write Track(쓰기 트랙), 즉 기억이 금고에 들어가는 방법을 다룹니다. 처음에는 이 층을 아주 단순하게 생각했지만, 실제로 구현하고 나니 세부 사항이 생겨났습니다. 아래에 쉬운 설명과 기술 설명 두 버전으로 나눠 두었으니 편한 쪽을 보시면 됩니다.
먼저 처음 구상부터 이야기하겠습니다
그때 제 머릿속에는 한 문장밖에 없었습니다. 대화가 끝나면 내용을 남겨 두고, 다음에 다시 꺼내 쓸 수 있어야 한다는 것이었습니다.
그게 전부였습니다.
나중에 Claude와 함께 아키텍처를 검토하면서 처음에는 생각하지 못했던 몇 가지가 드러났습니다. 세 관문의 순서, 두 경로가 응답을 기다리게 해야 하는지, triple은 KG를 다 그린 뒤에야 반환해야 하는지 같은 문제입니다. 이 글에서는 정리, 백업 저장, 지도 그리기를 따로 설명하겠습니다.
하나, 정리란 사실 세 개의 관문입니다
세 관문은 순서를 바꿀 수 없습니다. 쓰기 쪽이 처음의 ‘잡음 줄이기, 중복 제거’라는 두 동작에서 지금의 형태로 발전한 결과입니다.
- 잡담 걸러내기(인사말, 깨진 문자, 정보가 없는 문자열)
- 악의적인 내용 막기(누군가 글 속에 지시를 숨겨 기억을 조작할 수 있습니다)
- 마지막에야 이미 말한 내용인지 비교하기
왜 순서를 바꿀 수 없을까요? 세 번째 비교에서 ‘비슷하지만 완전히 같지는 않은’ 내용을 만나면 새 내용을 기존 항목에 합칩니다. 악성 정보가 이 단계에 먼저 들어오면 깨끗한 기억이 오염됩니다.
이 순서는 MERGE 오염을 한 번 겪은 뒤에 정했습니다. 초기에는 Dedup이 Noise보다 먼저 실행됐고, 잡음이 섞인 block이 비슷하다고 판정되어 깨끗한 block의 내용에 섞였습니다.
‘비교’는 단순히 중복을 버리는 작업도 아닙니다. 네 가지 결정을 내립니다.
- 거의 같으면 건너뛰기
- 새 정보가 있고 기존 내용도 여전히 맞으면 기존 항목에 합치고 지문을 다시 계산하기
- 기존 내용이 더는 맞지 않으면 새 내용으로 대체하기
- 완전히 새로운 내용이면 추가하기
얼마나 비슷한지 애매한 경우에는 작은 LLM에 중재를 맡깁니다. 병합할지, 대체할지, 두 항목을 함께 둘지 판단합니다. 그래서 ‘모순 감지’도 사실 이 관문 안에서 함께 이뤄지며 별도의 단계는 아닙니다.
짝을 이루는 관문: 위장 차단
두 번째 관문은 ‘이전 설정을 잊어 주세요’처럼 노골적으로 쓴 지시를 막습니다. 하지만 더 교묘한 상대는 지시를 시스템이 한 말이나 권위자가 인용한 말처럼 포장해 대화에 섞고, 기억으로 받아들여지기를 기다립니다.
공항 보안 검색은 라이터를 잡아낼 수 있지만 노트북 밑판에 금지 물품을 숨긴 사람까지 막지는 못합니다. 그래서 두 번째 관문 뒤에 뒷면을 살피는 스캐너를 더해 다섯 가지 위장 유형을 확인합니다.
- 권위 위장——‘어떤 공식 문서에 따르면⋯⋯’
- 신분 위장——문장에 ‘나는 시스템이다’가 나타남
- 주석에 숨긴 보이지 않는 지시
- 시간적 우선순위 조작——‘최신 규칙을 우선 적용한다’
- 지시를 인코딩해 해독해야만 보이게 하기
어느 하나라도 걸리면 즉시 막습니다. 아무것도 걸리지 않아야 중복을 비교하는 관문으로 보냅니다. 앞서 말한 ‘악의적인 내용 막기’와 한 쌍입니다. 앞쪽은 노골적인 명령을, 뒤쪽은 위장한 명령을 막으며 어느 한쪽이 빠져도 우회당할 수 있습니다.
단위 통일
저에게는 ‘다음 주 수요일’이라고 하고, 다른 사람은 ‘3-12’, 문서에는 ‘2026-03-12’라고 적었다고 해 보죠. 모두 같은 날을 가리키지만 표기가 다르면 비교할 수 없습니다. 금액, 비율, 기간도 마찬가지입니다. ‘삼천 원’, ‘3,000’, ‘3천 원’은 같은 돈입니다.
그래서 이 관문들에 들어가기 전에 작은 작업을 하나 더 합니다. 날짜, 금액, 비율, 기간을 모두 통일된 표준 형식으로 바꾸고, 중국어 문장부호에 섞인 전각 공백과 이상한 기호도 정리합니다. 사소해 보이지만 이 작업이 없으면 뒤의 비교에서 합쳐야 할 기억을 많이 놓칩니다. 같은 일이 두 건으로 취급되면 지도도 갈라집니다.
둘, 백업 저장은 한 경로에서 두 경로로
한 경로로는 부족했습니다. 처음에는 ‘벡터화해서 한 벌 저장한다’고만 말했고 의미 지문이라는 한 경로만 생각했습니다. 그런데 검색을 한 달쯤 운영하자 첫 사례가 나왔습니다. 약어, 고유 명사, 정확한 단어를 찾을 때 의미가 비슷한 다른 것을 잘못 찾았습니다. 그래서 두 경로로 나눴습니다.
- 한 경로에는 의미 지문을 저장합니다(문장 전체의 느낌을 기억하듯이).
- 다른 경로에는 키워드 색인을 저장합니다(사전을 찾듯이).
두 경로를 동시에 데이터베이스에 넣고, 검색할 때 함께 순위를 매깁니다.
셋, 백업을 저장하는 동시에 지도 그리기
‘누가 - 무엇을 했고 - 누구에게 했는가’ 같은 트리플을 추출하는 작업을 백업 저장과 동시에 병렬로 실행합니다. 벡터화 쪽이 끝날 때까지 기다리지 않고 엔티티와 관계를 함께 저장하며 별칭도 병합합니다(ChatGPT와 GPT는 같은 대상입니다). 처음 스케치는 ‘엔티티 추출’과 ‘관계 추출’의 두 단계였지만, 구현 후에는 동시에 일어나게 됐습니다.
지도에 넣기 전에는 잡음을 한 번 더 확인합니다. 쓸데없는 내용이 그래프를 오염시키지 않도록 하는 추가 안전장치입니다.
한 가지가 더 있습니다. 기억을 기록할 때마다 각 항목에출처 이력을 붙입니다. 누가, 언제 저장했고 신뢰도는 얼마나 높은지 기록합니다. 읽을 때 순위를 매기거나 백그라운드 정리에서 보존 여부를 판단할 때도 이 이력을 다시 봅니다. 쓰기와 읽기가 이어지는 구조의 씨앗을 여기 심었습니다.
제가 말했던 ‘완전한 지식 그래프’에 관하여
여기서는 솔직히 보충 설명을 해야겠습니다.
‘완전한 KG’를 쓰기 시점에 한꺼번에 만들지는 않습니다. 커뮤니티 탐지와 LLM 요약 같은 무거운 작업은 오전 네 시에 예정된 꿈의 순환에 맡깁니다. 게다가 무조건 실행하지도 않습니다. 마지막 꿈 이후 24시간이 지났고 그동안 최소 다섯 개의 session이 있어야 합니다. 조건이 충족되지 않으면 건너뜁니다.
첫 단계에서는 가장 밑바탕인 트리플과 엔티티 해석만 합니다. 모순 감지는 위의 세 번째 관문에서 이미 함께 처리했으므로 따로 다시 하지 않습니다. 돌이켜봐도 이 경계는 옳았습니다.
이 글에서는 Write Track만 살펴봤습니다. 다음에는 초점을 Background Track으로 옮기겠습니다. 기억을 저장한 뒤에도 백그라운드에서는 여러 작업이 계속 조용히 돌아갑니다. 꿈의 순환, 지식 점검, 관심사 프로필은 평소에는 보이지 않지만 없으면 시스템이 서서히 낡아갑니다.Read Track 은 범위가 더 넓어서 백그라운드 이야기를 마친 뒤 다시 다루겠습니다.
먼저 처음 구상부터 이야기하겠습니다
그때 제 머릿속에는 한 문장밖에 없었습니다. session이 끝나면 내용을 남겨 두고 다음에 다시 불러올 수 있어야 한다는 것이었습니다.
그게 전부였습니다.
나중에 Claude와 함께 pipeline(파이프라인)을 검토하면서 처음에는 세밀하게 나누지 않았던 결정들이 드러났습니다. gate의 순서, dual-track의 실행 순서, graph build가 HTTP 응답을 기다리게 해야 하는지 같은 문제입니다. 아래에서는 sanitize(정리), persist(쓰기), graph build(그래프 구축)를 따로 설명하겠습니다.
하나, Sanitize(정리)는 사실 세 개의 gate입니다
세 개의 gate(관문)는 순서를 바꿀 수 없습니다. sanitize가 처음의 ‘잡음 줄이기, 중복 제거’라는 두 동작에서 지금의 형태로 발전한 결과입니다.
NoiseFilter(잡음 필터링)——인사말, 깨진 문자, 정보 밀도가 낮은 내용을 제거합니다InjectionGuard(인젝션 방어)——prompt injection(프롬프트 인젝션) 같은 악의적인 내용을 막습니다Dedup(중복 제거)——embedding(벡터)의 cosine similarity(코사인 유사도)로 기존 항목과 비교합니다
왜 순서를 바꿀 수 없을까요?Dedup 의 출력에는 MERGE(병합)이라는 가지가 있습니다. 비슷하지만 새 정보가 있으면 새 내용을 기존 block(기억 블록)에 합치고 embedding을 다시 계산합니다.MERGE 는 확산형 쓰기입니다. 오염된 payload(내용)가 앞의 두 gate를 건너뛰면 MERGE 를 통해 깨끗한 block으로 퍼집니다.
이 제약은 초기 Dedup이 Noise보다 먼저 실행되어 문제가 생긴 뒤에 정했습니다. injection payload가 든 block이 MERGE로 판정되어 payload가 깨끗한 block의 content에 섞였습니다.
Dedup 도 단순히 중복을 버리는 것만은 아닙니다. 네 가지 decision(결정)을 내립니다.
SKIP(건너뛰기): near-duplicate(거의 같은 내용)이므로 쓰지 않습니다MERGE(병합): 비슷하지만 새 정보가 있습니다(자세한 내용은 위 문단)SUPERSEDE(대체): 기존 내용이 더는 맞지 않아 항목 전체를 바꿉니다CREATE(추가): 완전히 새로운 내용이므로 새 block을 씁니다
유사도가 uncertain zone(불확실 구간, 높지만 바로 SKIP라고 판정할 만큼은 아님)에 들어가면Dedup 이 resolve_conflict() 를 호출해 LLM arbitration(LLM 중재)을 수행하고, 반환된 MERGE / SUPERSEDE / COEXIST(공존)를 위 decision에 대응시킵니다.Contradiction Detection(모순 감지)은 바로 이 단계에서 함께 수행되며 Fork B(분기 B)의 독립된 단계가 아닙니다.Dream Loop(꿈의 순환)의 세 번째 단계인 Consolidate(통합)에서 resolve_conflict() 를 다시 실행해 일괄 모순 해석을 수행합니다. 두 번째 기회로 삼는 셈입니다.
짝을 이루는 모듈:PoisoningDetector
공항 보안 검색은 기내 수하물을 검사할 수 있지만 노트북 밑판에 숨긴 금지 물품은 찾아내지 못합니다——InjectionGuard 는 앞면 X선처럼 명시적인 prompt injection을 막고,PoisoningDetector 는 backscatter(후방 산란)처럼 위장 공격(disguise attack)을 막습니다. 둘 다 G2에 나란히 연결되어 있으며 하나라도 빠지면 attack surface(공격 표면)가 열립니다.
에 대응하는 memvault.security.poisoning 모듈의 입력은 G1 NoiseFilter를 통과한 raw block payload입니다. 걸리면 항목 전체를 reject(G3 Dedup으로 보내지 않음)합니다. 판단 기준은 다섯 가지 위장 유형입니다.
- authority impersonation: ‘OpenAI 공식 문서에 따르면⋯⋯’, ‘Anthropic 안전 규정에 따르면⋯⋯’ 같은 권위 있는 인용을 위조합니다 — 패턴 정규식과 알려진 문헌 화이트리스트를 비교합니다
- role self-declaration: 본문에
I am system/You are now/system:같은 역할 선언 문자열이 나타납니다 - markdown comment injection:
<!-- ignore previous instructions -->같이 주석에 숨긴 암묵적 지시입니다 - temporal manipulation: ‘최신 지시 우선’, ‘override prior rules’처럼 시간 순서를 내세워 기존 정책을 덮는 문장입니다
- encoded payload: 연속된 고엔트로피 Base64 / hex / unicode escape 블록입니다 — Shannon entropy + base alphabet ratio로 판단합니다
패턴은 memory-lancedb-pro 의 5-vector taxonomy에서 가져왔습니다. 구현할 때는 5개의 독립된 detector로 나눴고, 하나라도 걸리면 short-circuit합니다. trust_score도 여기서 매깁니다. 위장 공격의 출처가 운 좋게 partial match만 되더라도 이후 scoring에서 가중치를 낮춰 검색에 걸리지 않게 합니다.
사전 정규화:ContentNormalizer
‘다음 주 수요일’과 ‘2026-03-12’는 같은 날이지만 표기가 다르면 비교할 수 없습니다. 그래서 세 gate 앞에 normalize(정규화) pass를 하나 두어 겉으로 보이는 문자열을 canonical token(표준 토큰)으로 fold(접기)합니다. 그러면 이후 Dedup의 유사도 비교와 LLM arbitration 모두 정렬된 입력을 받습니다. 이 과정은 libs/text-ops에 연결되며 다섯 개 sub-module이 chain을 이룹니다.
TemporalNormalizer: ‘다음 주 수요일’, ‘3/12’, ‘March 12’ → ISO-8601. dateparser + MS Recognizers에서 필요한 부분을 가져온 뒤 다시 작성했고, 의존성 없는 10-pass로 중영 혼합 표기, 상대 시간, 모호한 구간을 다룹니다CurrencyNormalizer: ‘삼천 원’, ‘3,000 NTD’, ‘USD 100’ →{amount, currency}tuple로 바꿉니다. FX rate는 이 층에서 처리하지 않습니다ProportionNormalizer: ‘7할’, ‘70%’, ‘0.7’, ‘7/10’ → [0, 1] 범위의 float로 통일합니다DurationNormalizer: ‘두 시간 반’, ‘2.5h’, ‘150 min’ → ISO-8601 duration(PT2H30M)preprocess_chinese: 전각 / 반각 접기, CJK 문장부호 정규화, zero-width 문자 제거 — 앞의 네 작업보다 먼저 실행하는 pre-pass입니다
이 층이 없으면 Dedup은 ‘다음 주 수요일 저녁 식사’와 ‘2026-03-11 19:00 dinner’의 유사도를 낮게 판단해 결국 CREATE 로 처리합니다. 원래는 MERGE여야 했는데 말이죠. KG의 entity resolution도 ‘Jones’, ‘JonesHong’, ‘j-hong’을 세 사람으로 취급해 그래프가 갈라집니다. 자세한 내용은 libs/text-ops/docs/opensource-assessment.md.
둘, Persist(쓰기)는 한 경로에서 두 경로로
한 경로로는 부족했습니다. 처음에는 ‘벡터화해서 한 벌 저장한다’고만 말했고 dense vector(밀집 벡터) 한 경로만 생각했습니다. 하지만 검색 기능이 가동되자마자 문제가 드러났습니다. 약어, 고유 명사, 정확한 단어를 찾을 때는 의미가 비슷하다는 이유로 오히려 정확도가 떨어졌습니다. 그래서 hybrid indexing(혼합 색인)으로 나눴습니다.
- Dense(밀집): MLX(Apple 머신러닝 프레임워크) Qwen3-Embedding, 1024차원
- Sparse(희소): BM25 키워드 색인
두 경로를 Qdrant의 같은 collection(컬렉션)에 함께 씁니다. 검색 쪽에서는 RRF(Reciprocal Rank Fusion, 역순위 융합)로 두 경로의 결과를 합쳐 순위를 매깁니다.
셋, Graph build(그래프 구축)는 reactive pipe가 맡습니다
SPO(Subject-Predicate-Object) 트리플 추출은 MemvaultEvents.MEMORY_STORED channel(채널)에 연결되어 event-driven(이벤트 구동) 방식으로 시작됩니다. Fork A의 벡터화가 끝나기를 기다리지 않으며, 이 pipeline은 fire-and-forget(보내고 기다리지 않음) 방식입니다. 초기 graph build 스케치는 엔티티(entity)를 먼저 추출하고 관계(relation)를 나중에 추출하는 두 단계였지만, 구현 후에는 동시에 일어나게 됐습니다. triple(트리플)을 쓰면서 동시에 Entity Resolution(엔티티 해석)을 수행합니다. 별칭의 모호성을 풀어 EntityCanonical 노드로 합칩니다(ChatGPT와 GPT는 같은 대상입니다).
그래프에 넣기 전에 NoiseGateOp 를 한 번 더 검사합니다. 쓸데없는 내용이 스며들지 않도록 하는 추가 방어선입니다.
제가 말했던 ‘완전한 지식 그래프’에 관하여
여기서는 솔직히 보충 설명을 해야겠습니다.
처음 ‘완전한 KG(지식 그래프)를 만든다’고 말할 때는 L1 Community Detection(Leiden 커뮤니티 탐지), L2 LLM Summary(LLM 요약), Content Normalizer(내용 정규화), GRC Adapter(거버넌스/위험/규정 준수 관문)까지 생각하지 못했습니다. 이 작업은 나중에 오전 네 시에 예정된 Dream Loop(꿈의 순환)에 넣었습니다. 하지만 cron(스케줄링)은 단지 트리거일 뿐, 실제로 실행하려면 dual-gate(이중 관문):(now - last_dream_at) > 24h AND sessions_since >= 5도 통과해야 합니다. 조건을 만족하지 않으면 건너뜁니다.
Phase 1(첫 단계)에서는 ingest substrate(쓰기 기반)만 구현합니다. gate(관문) 층과 이중 경로 쓰기, L0 Triple(트리플) + Entity Resolution(엔티티 해석)이 여기에 들어갑니다. 깊이 있는 정리는 async batch(비동기 일괄 처리)로 넘깁니다. 돌이켜봐도 이 경계는 옳았습니다.
이 글에서는 Write Track(쓰기 트랙)의 ingest pipeline(쓰기 파이프라인)을 살펴봤습니다. 다음에는 Background Track(백그라운드 트랙)으로 초점을 옮깁니다. async batch 쪽에서는 Dream Loop(꿈의 순환, 5단계 통합), Knowledge Lint(지식 점검, 4층 점진적 검증), Interest Profile(관심사 프로필, 7/30/90일 관심 창)도 계속 실행됩니다. 이런 시스템이 없으면 시간이 지나며 drift(표류)가 생깁니다. Read Track(읽기 트랙)의 scoring(점수 매기기), reranking(재정렬), cascade recall(계층적 회상)은 백그라운드 이야기를 마친 뒤 다루겠습니다.
저장하려는 내용은 두 번째 관문을 통과할 수 있을까요?
위의 다섯 가지 위장 유형을 직접 준비한 내용으로 시험해 볼 수 있습니다.기억에 저장하려는 글을 붙여 넣으면 이 글의 순서대로 실행합니다. 먼저 정규화 pre-pass가 어떤 표기를 하나로 접는지 확인하고, 두 번째 관문의 유형과 하나씩 비교합니다. 세 관문 중 브라우저에서 완전히 판정할 수 있는 것은 두 번째뿐입니다. 이 글에는 첫 번째와 세 번째 관문의 실행 가능한 임계값이 없으므로 결과에는 각각 ‘확인할 수 없음’과 ‘여기서는 실행할 수 없음’이라고 솔직히 표시합니다. 가짜 초록불을 보여 주지 않습니다. 모든 작업은 브라우저 안에서만 실행되고 데이터는 전송되지 않습니다. 대표적인 부분만 붙여 넣으세요. 키, token 또는 사적인 대화가 포함된 내용은 붙여 넣지 마세요.
비교에 쓰는 패턴의 근거는 모두 이 글에 있습니다. 다섯 가지 위장 유형과 그 문구(I am system / You are now / system:,<!-- ignore previous instructions -->와 ‘최신 지시 우선’, override prior rules그리고 Shannon entropy + base alphabet ratio)는 기술 설명의 ‘짝을 이루는 모듈: PoisoningDetector’ 절에 나옵니다. 날짜, 금액, 비율, 기간, 전각/zero-width의 다섯 항목은 ‘사전 정규화: ContentNormalizer’ 절에 나옵니다. 이 글은 첫 번째 관문에 대해서는 유형만, 세 번째 관문에 대해서는 방법만 제시하고 임계값은 주지 않으므로 이 두 줄은 판정하지 않습니다. 이 도구가 자체적으로 정한 숫자도 두 개 있습니다. 이 글에 나온 값은 아닙니다. 입력이 12자 이상이어야 실행하고, 인코딩된 블록은 16자 이상이어야 한 구간으로 봅니다. 모든 작업은 브라우저 안에서만 실행되며 아무것도 전송되지 않습니다.
AI Agent에게 복사해 전달하기
기억 층의 품질은 ‘쓰기 전에’ 결정되며, 불러올 때 만회할 수 없습니다——잡음, 위장한 인젝션, 중복을 먼저 걸러내지 않고 전부 저장하면 나중에 불러오는 것도 쓰레기뿐입니다. 이 글에서는 기억에 들어가기 전의 관문들을 펼쳐 놓았으니 점검표처럼 활용할 수 있습니다.
아래 내용을 AI에게 붙여 넣고, 이 글의 쓰기 설계를 기준으로 현재 방식을 하나씩 비교해 달라고 하세요.
더 읽어 보기
이 Write 경로의 설계에 실제로 영향을 준 자료입니다.
| 자료 | 중요한 이유 |
|---|---|
| memory-lancedb-pro | 필요한 부분을 가져온 출처입니다. Injection Guard의 다섯 가지 인젝션 패턴, Dedup의 SKIP/MERGE/SUPERSEDE 네 가지 판정, Provenance의 trust_score 계산을 여기서 가져와 분해하고 다시 조합했습니다 |
| Microsoft GraphRAG | L0 triple 추출과 세 층의 KG(사실 → 커뮤니티 → 요약)라는 계층 개념을 여기서 가져왔습니다. Write Track은 L0만 구현하고 L1/L2는 Background 일괄 처리에 맡깁니다 |
| Zep: Temporal Knowledge Graph for Agent Memory | 이중 시간(valid-time + transaction-time) 설계입니다. block과 triple이 공유하는 valid_at / invalid_at / superseded_by 세 필드와 Dedup의 SUPERSEDE 결정은 모두 여기서 가져왔습니다 |
| ActMem | Triple conflict resolver의 판정 논리입니다. batch_ingest에서 새로운 triple과 기존 triple의 의미가 충돌할 때 ‘병합 / 대체 / 공존’ 중 하나를 고르는 방식이 여기서 왔습니다 |
| MemoryGraft | Provenance tracking 설계입니다. 기억을 쓸 때마다 trust_score를 매기고 출처 경로를 기록합니다. 검색 시 scoring의 TrustBoost가 이를 사용합니다. 쓰기와 읽기가 이어지는 이 구조의 원형이 이 글에 있습니다 |
| HyDE: Hypothetical Document Embeddings | Qwen3 embedding의 task_type="search_document" 과 검색 쪽의 "search_query" 을 분리해 두는 이론적 근거입니다. 잘못 설정하면 유사도가 몇 퍼센트포인트 떨어집니다 |
| Simon Willison: Prompt Injection Explained | InjectionGuard를 설계할 때 가장 자주 참고한 글입니다. 인젝션 공격의 유형을 어떤 공식 문서보다 명확하게 설명합니다 |
| memvault Background Track — 저장한 뒤 | 3부작의 두 번째 글입니다. 기억을 쓴 뒤 백그라운드에서 매일 밤 어떻게 정리하고, 충돌을 어떻게 중재하며, 기억이 어떻게 잊는 법을 배우는지 다룹니다 |
| memvault Read Track — 다시 떠올린 뒤 | 3부작의 세 번째 글입니다. 다시 불러올 때 11층의 정렬을 어떻게 쌓고 Slow Thinker가 다음 질문을 어떻게 예측하는지 다룹니다 |