AI 메모리가 고장났다. 우리는 잊어버리는 메모리를 만들었다.
Source: Dev.to
실제 모습
Week 1: 에이전트에게 “우리는 프론트엔드에 React를 사용하고 있어요.” 라고 말합니다.
Week 2: 전환합니다. “Svelte로 바꿔요, React 번들이 너무 커요.”
Week 4: “우리 프론트엔드 스택이 뭐였지?” 라고 묻습니다.
일반적인 검색 시스템은 두 답변을 모두 반환합니다. React와 Svelte가 동등한 비중으로 나란히 표시됩니다. 시스템 내에서는 어느 것이 다른 것으로 대체되었는지 알 수 없기 때문에, 에이전트는 React, Svelte, 혹은 둘이 혼합된 혼란스러운 정보를 참조할 수 있습니다.
우리는 에이전트 도구를 만들면서 계속 이 문제에 부딪혔고, 문제는 검색 품질이 아니라 이 시스템들이 시간이나 구식 정보를 개념화하지 못한다는 점이라는 것이 명확해졌습니다.
수치
우리는 4주 동안 시뮬레이션 프로젝트를 두 시스템에 적용했습니다. 총 24개의 이벤트—결정, 수정, 오류, 반복 관찰—와 프로젝트 중간에 두 차례의 큰 방향 전환이 있었습니다.
| 지표 | Naive | Sparsion |
|---|---|---|
| 최상위 결과가 정확한가 | No | Yes |
| 오래된 기억을 정리한 수 | 0 | 2 |
| 4주 차에 검색 가능한 수 | 24 | 22 |
Naive 검색은 오래된 항목을 최상위에 놓습니다. Sparsion은 수정된 항목을 먼저 보여줍니다—구식 원본보다 1.65 대 0.55의 살리언스 차이로.
Sparsion이 실제로 하는 일
기억을 로그가 아니라 라이프사이클로 취급합니다.
Events → Salience Scoring → Hot → Warm → Cold → Forgotten
- 오래된 기억은 시간이 지남에 따라 약해집니다 (지수 감쇠, 반감기 설정 가능)
- 반복된 이벤트는 강해집니다 (로그‑빈도)
- 중요 로 표시된 항목은 4배 더 오래 살아남습니다
- 수정은 기본적으로 관찰보다 3배 높은 점수를 받습니다
- 살리언스가 바닥값 이하인 항목은 검색에서 완전히 제외됩니다
중요한 수정은 살리언스 13.18로 시스템에 들어갑니다. 일시적인 관찰은 0.77로 들어갑니다. 6주 동안 보강이 없으면 관찰은 사라지고 수정은 남아 있습니다.
사용해 보기
from sparsion import Runtime
rt = Runtime("agent_memory.db")
# Week 1
rt.record("user", "decision", "Frontend framework: React", importance="high")
# Week 2
rt.record(
"user",
"correction",
"Switching to Svelte — React bundle too large",
importance="critical"
)
# Query
memories = rt.query(text="frontend", limit=3)
for m in memories:
print(f"[{m['tier']}] {m['content']} (salience: {m['salience']:.2f})")
# [Hot] Switching to Svelte — React bundle too large (salience: 13.18)
# [Hot] Frontend framework: React (salience: 4.39)
# Age everything
result = rt.sweep()
print(f"Forgot {result['forgotten']} stale memories")
내부 구조
Rust 코어, PyO3/maturin을 통한 Python 바인딩, 저장소는 SQLite. 모델 의존성 없음 — 현재 살리언스 점수는 휴리스틱 기반입니다.
Rust core
├── Event store (SQLite)
├── Salience scorer
├── Tier manager (hot/warm/cold)
├── Decay engine
└── Ranked retrieval
↓
PyO3 → Python SDK (pip install sparsion)
테스트: Rust 단위 12개, 통합 5개 (MockClock을 통한 결정적 시간), Python 엔드‑투‑엔드 4개.
v0.1에 포함된 내용
- 설정 가능한 반감기를 갖는 시간 기반 감쇠
- 반복을 통한 강화
- 중요도 힌트 (low/normal/high/critical)
- 이벤트 유형 가중치 — 수정 > 결정 > 오류 > 동작 > 관찰
- 티어 이동 및 저장소를 통한 망각 루프
- Python SDK
앞으로의 계획
- 실제 에이전트 워크플로와 연동
- 더 큰 벤치마크, 긴 시간 범위
- 모순 인식 업데이트
- LangChain 메모리 백엔드
에이전트를 구축하면서 오래된 컨텍스트 문제에 계속 부딪히고 있다면, 여러분의 사용 사례를 듣고 싶습니다.
Sparsion Runtime –