
01 · THE QUESTION
이전 대화를 모두 다시 넣으면 memory가 완성될까
Chat history는 과거에 무슨 일이 있었는지 기록합니다. Agent memory는 그중 무엇을 저장하고, 언제 찾고, 어떤 형태로 현재 판단에 주입하고, 언제 수정하거나 삭제할지를 결정합니다. 둘을 같게 보면 context는 금방 길어지고 잘못된 정보가 반복됩니다.
02 · CONTEXT PIPELINE
RAG와 Memory는 모두 context를 선택하지만 source가 다릅니다
| 구분 | RAG | Memory |
|---|---|---|
| Source | 외부 문서와 지식 corpus | 사용자·session·workflow의 과거 경험 |
| 주요 질문 | 이 질문에 필요한 근거는 무엇인가? | 이후 판단에 다시 쓸 상태는 무엇인가? |
| 대표 위험 | 잘못된 문서와 stale index | Scope leak, 오래된 선호, 잘못된 요약 |
| 평가 | Recall, precision, groundedness | Continuity, relevance, freshness, deletion |
둘 다 저장소 전체를 prompt에 넣지 않습니다. 후보를 찾고, relevance와 freshness를 평가하고, token budget에 맞춰 구성한 뒤, 모델에게 보여 준 context가 실제 답에 어떻게 사용됐는지 확인합니다.
03 · WHY REPLAY FAILS
Raw chat replay가 부족한 다섯 이유
- Context window는 저장소가 아닙니다. 입력이 길어질수록 비용과 latency, 중요한 지시의 희석이 커집니다.
- 모든 문장이 기억할 가치가 있지 않습니다. 인사와 임시 추측, 이미 폐기된 계획이 선호와 제약 조건을 덮을 수 있습니다.
- Session scope와 user scope는 다릅니다. 한 작업의 임시 상태가 다른 작업이나 다른 사람에게 새면 안 됩니다.
- 저장과 주입은 별개입니다. 저장된 사실도 현재 질문에 관련될 때만 context로 들어가야 합니다.
- Context 제외와 삭제는 다릅니다. Prompt에서 빼는 것과 retention 정책에 따라 storage에서 지우는 것은 별도 작업입니다.
04 · POLICY LOOP
Memory는 write–retrieve–inject–forget loop로 설계합니다
MEMORY POLICY
event
→ should_write?
→ choose scope + memory type
→ normalize + deduplicate + version
→ retrieve candidates for current task
→ filter by relevance + freshness + permission
→ inject within token budget
→ update, supersede, expire, or deleteWrite policy
명시적인 사용자 선호, 반복되는 안정적 사실, 완료되지 않은 workflow state처럼 미래 작업에 가치가 있는 정보만 씁니다. Model의 추측을 사실처럼 저장하지 않고 provenance와 confidence를 함께 남깁니다.
Retrieval과 injection policy
Semantic similarity만 보지 않고 user, workspace, thread, task scope와 recency, status를 필터링합니다. 주입할 때는 원문 전부보다 현재 판단에 필요한 요약과 source id, timestamp를 사용합니다.
Update와 forget policy
새 정보가 이전 정보를 대체할 때 overwrite보다 superseded relation과 version을 남기면 audit이 쉬워집니다. 사용자가 삭제를 요청했거나 retention이 끝난 데이터는 vector index, cache, summary에서도 함께 제거해야 합니다.
05 · LAYERS
Framework보다 memory 계층과 책임을 비교합니다
| 계층 | 예시 | 수명 |
|---|---|---|
| Working context | 현재 prompt의 message와 retrieved memory | 한 model call |
| Thread state | 대화 요약, pending approval, checkpoint | 한 thread |
| User profile | 언어, 안정적 선호, 접근성 요구 | 여러 session |
| Workflow memory | 작업 단계, artifact path, 결정 기록 | 작업 종료까지 |
| Episodic record | 성공·실패 trajectory와 피드백 | 평가·학습 정책에 따라 |
| External knowledge | 문서와 지식 base | 문서 lifecycle |
Native checkpoint는 실행 연속성에 강하고, external memory layer는 여러 runtime과 장기 profile을 공유하는 데 유리합니다. 제품은 하나를 고르는 대신 scope와 lifecycle에 따라 계층을 조합합니다.
06 · FAILURE TEST
기억이 잘 되는지보다 잘못 기억하지 않는지 먼저 봅니다
- 한 사용자의 memory가 다른 사용자에게 검색되지 않는지 확인합니다.
- 사용자가 선호를 바꿨을 때 오래된 값이 다시 주입되지 않는지 확인합니다.
- Compaction 전후에 핵심 constraint와 pending state가 보존되는지 비교합니다.
- 삭제 요청 후 primary store, vector index, cache에서 모두 사라지는지 검증합니다.
- 잘못 저장된 사실이 있을 때 source와 write decision을 trace로 역추적합니다.