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

임베딩 기반 회상과 기억 인덱싱

~22 min · memory, retrieval

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

기억 저장소에서 무엇을 임베딩할까

모든 발화에 벡터를 만들 필요는 없어. 좋은 원칙은 다시 찾을 가치가 있는 내용과 걸러 낼 가치가 있는 메타데이터를 가진 기억만 임베딩하는 것이야. 인사, 맞장구, 도구가 출력한 JSON은 대개 잡음이야.

유용한 기억 단위 세 가지

  • 대화 단위 — 사용자나 어시스턴트 메시지마다 청크 하나를 만들어. 쉽지만 항목이 많아지고 검색 결과가 흩어질 수 있어.
  • 사건 단위 — 디버깅 세션이나 기능 설계 토론처럼 하나의 사건으로 이어지는 대화를 묶어. 검색 관련성은 좋아지지만 자동으로 경계를 나누기 어려워.
  • 정제 단위 — 모델이 사건을 요약해. 예를 들면 '30분 동안 지연 시간을 측정한 뒤 사용자가 IVFFlat보다 HNSW를 선택했다'처럼 남겨. 신호 대 잡음 비율은 가장 높지만 주기적으로 정제하는 과정이 필요해.

시간 감쇠를 적용한 검색

내용이 비슷하다면 최근 기억이 오래된 기억보다 앞서야 해. 점수는 similarity * exp(-age_days / half_life)로 계산해. 평가 집합으로 half_life를 조정하고, cwkPippa는 일반 기억에 약 30일을 사용하며 정체성을 정의하는 순간에는 더 길게 둬.

Code

시간 감쇠를 적용한 재순위화·python
import math
from datetime import datetime, timezone

def decay_rerank(candidates: list[dict], half_life_days: float = 30.0):
    now = datetime.now(timezone.utc)
    for c in candidates:
        ts = datetime.fromisoformat(c['metadata']['created_at'])
        age_days = (now - ts).total_seconds() / 86400
        decay = math.exp(-age_days / half_life_days)
        c['final_score'] = c['similarity'] * decay
    return sorted(candidates, key=lambda c: -c['final_score'])
매일 밤 실행하는 사건 정제·python
DISTILL_PROMPT = '''Read the following turns and produce 1-3 standalone facts worth remembering long-term. Each fact should be self-contained — readable in 6 months without re-reading the conversation.

Turns:
{turns}

Output as JSON: [{{"fact": "...", "tags": ["..."]}}]
'''

def distill_episode(turns: list[dict]) -> list[dict]:
    text = '\n'.join(f"{t['role']}: {t['content']}" for t in turns)
    return json.loads(llm.complete(DISTILL_PROMPT.format(turns=text)))

External links

Exercise

저장된 대화 하나를 고르거나 예시를 만들어 대화 단위, 사건 단위, 정제 단위 임베딩을 각각 구현해. 각 저장소에 쿼리 열 개를 실행하고 어느 단위가 토큰당 가장 유용한 문맥을 돌려주는지 기록해.

Progress

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

댓글 0

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

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