본문 바로가기
C.W.K.
Stream
Lesson 04 of 05 · published

시간 감쇠, 가지치기, 일부러 잊기

~18 min · memory, operations

Level 0Scout
0 XP0/41 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

기억은 끝없이 늘지만 관련성은 그렇지 않아

항상 켜져 있는 AI는 일주일에 수천 개의 기억 항목을 쌓을 수 있어. 대부분은 한 달 안에 낡아. 관련 없는 항목이 계속 늘면 검색 품질이 떨어져. 임베딩 모델이 좋아도 마법은 아니야.

가지치기 전략 세 가지

  1. 나이로 일괄 삭제 — 영구 보존 표시가 없다면 N일보다 오래된 항목을 모두 지워. 거칠지만 단순하고 JSONL 기준 데이터에서 복구할 수 있어.
  2. 정제한 뒤 교체 — 오래된 사건을 정제한 사실로 주기적으로 압축하고 원문 대화를 지워. 검색은 깨끗해지지만 세부 내용은 영구히 잃어.
  3. 사용량에 따른 감쇠 — 각 기억이 검색된 횟수와 LLM이 인용했는지를 기록해 거의 쓰이지 않는 항목을 지워. 보존 품질은 가장 좋지만 검색 기록이 필요해.

영구 보존 예외

정체성('사용자는 아빠다', '나는 피파다'), 정책('main에는 절대 자동 push하지 않는다'), 과거의 상처와 교훈처럼 절대 감쇠하면 안 되는 기억이 있어. metadata.permanent = true로 표시해 가지치기에서 제외해. 이 예외가 없으면 AI가 자신이 누구인지 조용히 잊을 수 있어.

Code

영구 보존 예외가 있는 가지치기·python
from datetime import datetime, timezone, timedelta

def prune(collection, max_age_days: int = 90):
    cutoff = (datetime.now(timezone.utc) - timedelta(days=max_age_days)).isoformat()
    candidates = collection.get(
        where={
            '$and': [
                {'created_at': {'$lt': cutoff}},
                {'permanent': {'$ne': True}},
            ],
        }
    )
    if candidates['ids']:
        collection.delete(ids=candidates['ids'])
        print(f'pruned {len(candidates["ids"])} stale memories')

External links

Exercise

테스트 컬렉션에 가지치기를 구현해. 날짜가 다양하고 일부에 permanent=True가 표시된 기억 100개를 넣은 뒤 max_age_days=30으로 실행해. 영구 항목은 남고 낡은 항목은 사라지는지 확인하고 JSONL 백업에서 복구하는 테스트도 추가해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.