계층형 메모리 스토리지로 에이전트 장기 컨텍스트 비용 80% 줄이기
에이전트의 장기 메모리를 핫·웜·콜드 3계층으로 분리해 토큰 비용을 통제하면서 관련 기억을 정확히 주입하는 아키텍처와 실패 모드를 정리한다.
장기 메모리의 비용 함정
단순하게 대화 히스토리를 통째로 시스템 프롬프트에 누적하면, 100턴 대화에서 컨텍스트가 60K 토큰을 넘어 턴당 입력 비용이 선형 증가한다. Claude claude-opus-4-5 기준 입력 $15/MTok이므로 60K 토큰 컨텍스트 1회 호출 = $0.0009, 하루 10,000 세션이면 월 $270이 컨텍스트 비용만으로 발생한다. 계층형 메모리는 이 문제를 관련 메모리만 선택 주입하는 방식으로 해결한다.
3계층 메모리 아키텍처
핫(Hot) — 현재 컨텍스트 윈도우: 최근 10턴만 유지. 토큰 예산 4K.
웜(Warm) — 요약 레이어: 11~50턴을 LLM으로 압축한 요약본. 원본 대비 토큰 90% 절감. 에이전트 재시작 시 즉시 로드.
콜드(Cold) — 벡터 DB: 51턴 이후 전체 히스토리를 임베딩 저장. 쿼리 관련도 상위 K개만 런타임에 주입.
import anthropic
from dataclasses import dataclass
from typing import List
client = anthropic.Anthropic()
@dataclass
class MemoryLayer:
hot: List[dict] # 최근 10턴
warm_summary: str # 압축 요약
cold_snippets: List[str] # 벡터 검색 결과
def build_context(memory: MemoryLayer, user_input: str) -> List[dict]:
system_parts = []
if memory.warm_summary:
system_parts.append(f"## 이전 대화 요약\n{memory.warm_summary}")
if memory.cold_snippets:
snippets = "\n".join(f"- {s}" for s in memory.cold_snippets[:3])
system_parts.append(f"## 관련 기억\n{snippets}")
messages = memory.hot + [{"role": "user", "content": user_input}]
return system_parts, messages
def compress_to_warm(turns: List[dict]) -> str:
"""11~50턴 → 요약. 실제로는 비동기 배치로 처리."""
content = "\n".join(
f"{m['role']}: {m['content']}" for m in turns
)
resp = client.messages.create(
model="claude-haiku-4-5", # 요약은 저비용 모델 사용
max_tokens=512,
messages=[{
"role": "user",
"content": f"다음 대화를 핵심 사실 위주로 200자 이내 요약:\n{content}"
}]
)
return resp.content[0].text
핵심 트레이드오프: 콜드 레이어 검색 품질이 낮으면 관련 메모리를 놓쳐 에이전트가 같은 질문을 반복한다. 임베딩 모델 선택과 청크 크기(권장 200~400토큰)가 리콜 정확도에 직결된다.
실패 모드와 운영 대응
메모리 부패(Memory Decay): 요약 과정에서 수치·날짜 등 팩트가 손실된다. 대응: 요약 전 엔티티(날짜, 금액, 고유명사)를 별도 구조화 필드로 추출해 보존.
콜드 레이어 지연: 벡터 검색 p99 ≥ 200ms면 스트리밍 TTFT에 영향. 대응: 검색을 사용자 입력 수신과 동시에 비동기 시작.
요약 비용 과소 산정: claude-haiku-4-5로 50턴 압축 시 입력 ~8K 토큰 = $0.00064/회. 세션당 5회 압축 기준 월 10,000 세션 = $32. 무시할 수 없으므로 웜 레이어 압축 트리거를 15턴이 아닌 50턴으로 조정해 빈도를 줄인다.
운영 체크리스트
- [ ] 핫 레이어 최대 토큰(4K) 초과 시 자동 압축 트리거 설정
- [ ] 요약 결과에 대한 팩트 보존율 평가 (수치 포함 여부 자동 검사)
- [ ] 벡터 검색 p95 latency ≤ 150ms 모니터링
- [ ] 콜드 레이어 TTL(90일) 설정으로 스토리지 비용 통제
- [ ] 메모리 주입 토큰 수를 매 호출마다 로깅 → 월별 절감율 추적