| [Glossary] 계층적 메모리 완벽 정리 | Hierarchical Memory를 쉽게 이해하는 법 |
한 줄 요약: 계층적 메모리(Hierarchical Memory)란, AI 에이전트가 정보를 접근 빈도·중요도·저장 기간에 따라 인메모리(단기), 세션(중기), 외부 저장소(장기) 등 여러 계층으로 나눠 관리하는 메모리 아키텍처이다.
1. 계층적 메모리란 무엇인가?
인간의 기억 구조를 떠올려 보세요. 지금 읽는 이 문장은 작업 기억(Working Memory)에 있습니다. 오늘 아침 식사 내용은 단기 기억(Short-term Memory)에, 어린 시절 기억은 장기 기억(Long-term Memory)에 저장되어 있습니다.
AI 에이전트도 단일 메모리 공간으로는 방대한 정보를 효율적으로 처리하기 어렵습니다. 계층적 메모리는 정보의 특성에 맞는 저장소를 사용해 최적의 성능을 달성합니다.
2. 핵심 개념 이해하기
계층별 특성
┌────────────────────────────────────────────┐
│ L1: 인컨텍스트 메모리 (Fastest) │
│ • 위치: 컨텍스트 윈도우 │
│ • 용량: ~200K 토큰 │
│ • 지속성: 세션 중 │
│ • 접근: 즉시 (0ms) │
├────────────────────────────────────────────┤
│ L2: 외부 캐시 메모리 (Fast) │
│ • 위치: Redis, 인메모리 DB │
│ • 용량: GB 단위 │
│ • 지속성: TTL 기반 │
│ • 접근: 매우 빠름 (<10ms) │
├────────────────────────────────────────────┤
│ L3: 벡터 메모리 (Medium) │
│ • 위치: Pinecone, Chroma, Weaviate │
│ • 용량: TB 단위 │
│ • 지속성: 영구 │
│ • 접근: 유사도 검색 (~50ms) │
├────────────────────────────────────────────┤
│ L4: 구조적 메모리 (Slow) │
│ • 위치: 관계형 DB, 파일 시스템 │
│ • 용량: 무제한 │
│ • 지속성: 영구 │
│ • 접근: 쿼리 (~100ms+) │
└────────────────────────────────────────────┘
메모리 유형별 용도
| 유형 | 저장 내용 | 예시 |
|---|---|---|
| 인컨텍스트 | 현재 대화, 즉시 필요한 정보 | 현재 세션 메시지 |
| 에피소딕 | 과거 대화·작업 히스토리 | “지난주 사용자가 요청했던…” |
| 시맨틱 | 사실, 개념, 도메인 지식 | 회사 정책, 제품 정보 |
| 절차적 | 수행 방법, 루틴 | 코드 작성 패턴, 워크플로우 |
3. 실무 적용 예시
계층적 메모리 시스템 구현 예시입니다.
import json
from datetime import datetime, timedelta
from anthropic import Anthropic
from typing import Optional
# 간단한 인메모리 캐시 (L2 역할)
class SimpleCache:
def __init__(self, ttl_minutes: int = 60):
self._store = {}
self._ttl = timedelta(minutes=ttl_minutes)
def set(self, key: str, value: str):
self._store[key] = {"value": value, "expires": datetime.now() + self._ttl}
def get(self, key: str) -> Optional[str]:
if key in self._store:
entry = self._store[key]
if datetime.now() < entry["expires"]:
return entry["value"]
return None
class HierarchicalMemoryAgent:
def __init__(self):
self.client = Anthropic()
self.l1_context = [] # L1: 인컨텍스트 (현재 세션)
self.l2_cache = SimpleCache() # L2: 빠른 캐시
self.l3_semantic = {} # L3: 시맨틱 메모리 (실제 구현은 벡터 DB)
self.l4_episodic = [] # L4: 에피소딕 기록 (실제 구현은 DB)
def remember(self, key: str, value: str, level: int = 3):
"""정보를 지정된 계층에 저장합니다."""
if level <= 2:
self.l2_cache.set(key, value)
if level <= 3:
self.l3_semantic[key] = value
if level <= 4:
self.l4_episodic.append({
"timestamp": datetime.now().isoformat(),
"key": key, "value": value
})
def recall(self, query: str) -> str:
"""계층 순서대로 관련 메모리를 검색합니다."""
# L2 빠른 캐시 먼저 확인
cached = self.l2_cache.get(query)
if cached:
return f"[캐시] {cached}"
# L3 시맨틱 메모리 검색 (실제로는 벡터 유사도 검색)
for key, value in self.l3_semantic.items():
if query.lower() in key.lower():
return f"[시맨틱] {value}"
# L4 에피소딕 검색
for episode in reversed(self.l4_episodic):
if query.lower() in episode["key"].lower():
return f"[에피소딕 {episode['timestamp'][:10]}] {episode['value']}"
return ""
def chat(self, user_message: str) -> str:
"""계층적 메모리를 활용한 대화."""
# 관련 메모리 검색
memory = self.recall(user_message)
if memory:
enhanced_message = f"[참고 메모리: {memory}]\n\n사용자 질문: {user_message}"
else:
enhanced_message = user_message
self.l1_context.append({"role": "user", "content": enhanced_message})
response = self.client.messages.create(
model="claude-3-5-sonnet-20241022",
max_tokens=1024,
system="당신은 사용자의 이전 정보를 기억하는 개인 AI 어시스턴트입니다.",
messages=self.l1_context[-10:] # 최근 10개만 유지
)
assistant_message = response.content[0].text
self.l1_context.append({"role": "assistant", "content": assistant_message})
# 중요 정보 자동 저장
if "좋아해" in user_message or "싫어해" in user_message:
self.remember(f"사용자 선호: {user_message}", user_message, level=3)
return assistant_message
4. 계층적 메모리 vs 유사 개념 비교
| 구분 | 계층적 메모리 | 단순 컨텍스트 | 외부 DB만 사용 |
|---|---|---|---|
| 속도 | ✅ 계층별 최적화 | ✅ 빠름 | ❌ 느림 |
| 용량 | ✅ 무제한 | ❌ 컨텍스트 제한 | ✅ 무제한 |
| 지속성 | ✅ 세션 초월 | ❌ 세션 내 | ✅ |
| 복잡도 | 높음 | 낮음 | 중간 |
| 비용 | 중간 | 낮음 | 낮음 |
5. 마치며
계층적 메모리는 장기적으로 학습하고 개인화되는 AI 에이전트를 구현하는 핵심 인프라입니다. 모든 정보를 하나의 계층에 저장하려는 유혹을 피하고, 정보의 특성(접근 빈도, 중요도, 지속성)에 맞는 계층을 선택하는 것이 핵심입니다.
참고 자료
- MemGPT: Towards LLMs as Operating Systems — 계층적 메모리 AI 에이전트 논문
- LangMem 라이브러리 — LangChain 메모리 관리 공식 가이드
함께 읽으면 좋은 용어
이 개념과 함께 알아두면 이해가 깊어지는 관련 용어들입니다.
댓글 남기기