MemGPT / Letta - OS 스타일 에이전트 메모리 치트시트
MemGPT는 기법이고 Letta는 그것으로부터 성장한 프레임워크로, LLM 에이전트에 운영체제 스타일 메모리 관리를 제공합니다. 핵심 아이디어: 컨텍스트 윈도우를 RAM처럼 다루기(빠르지만 작음) 그리고 검색 가능한 아카이브 메모리 형태로 “디스크”를 추가합니다. 에이전트 자체는 도구 호출을 통해 메인 컨텍스트에 무엇을 유지할지, 저장소에 무엇을 페이징할지 결정하므로, 컨텍스트 한계 훨씬 너머로 일관된 장기 메모리를 유지할 수 있습니다. (프로젝트는 이제 Letta로 개발됨)
설치
| 방법 | 명령어 |
|---|
| pip | pip install letta |
| 서버 실행 | letta server |
| Docker | docker run -p 8283:8283 letta/letta:latest |
| ADE (웹 UI) | Agent Development Environment를 서버에 연결 |
| 검증 | letta version |
메모리 아키텍처
| 계층 | 비유 | 내용 |
|---|
| Main context (core memory) | RAM | 프롬프트에 항상 인컨텍스트인 페르소나 + 핵심 사실 |
| Recall memory | 최근 파일 | 대화 히스토리, 검색 가능 |
| Archival memory | 디스크 | 임의 장기 사실, 검색 가능 |
| The agent | OS | 도구를 통해 페이징 인/아웃 결정 |
코어 메모리 (항상 인컨텍스트)
| 블록 | 목적 |
|---|
persona | 에이전트는 누구인가 / 어떻게 행동하는가 |
human | 사용자에 대해 알고 있는 것 |
| Custom blocks | 도메인 특정 항상 존재하는 사실 |
에이전트는 도구 (core_memory_append, core_memory_replace)로 이 블록을 편집합니다.
에이전트 생성
from letta_client import Letta
client = Letta(base_url="http://localhost:8283")
agent = client.agents.create(
name="assistant",
memory_blocks=[
{"label": "persona", "value": "I am a concise, helpful assistant."},
{"label": "human", "value": "The user's name is Nick."},
],
model="openai/gpt-4o",
embedding="openai/text-embedding-3-small",
)
메시징 및 메모리 도구
response = client.agents.messages.create(
agent_id=agent.id,
messages=[{"role": "user", "content": "Remember I prefer dark mode."}],
)
| 도구 (에이전트 호출) | 작업 |
|---|
core_memory_append | 항상 인컨텍스트 블록에 추가 |
core_memory_replace | 코어 메모리 블록 업데이트 |
archival_memory_insert | 아카이브에 사실 저장 (디스크) |
archival_memory_search | 아카이브 메모리에서 검색 |
conversation_search | recall 메모리 검색 |
아카이브 메모리
| 명령어 | 설명 |
|---|
client.agents.passages.create(agent_id, text=...) | 아카이브 메모리 삽입 |
client.agents.passages.list(agent_id) | 저장된 구절 목록 |
| Agent search | 에이전트가 관련될 때 자동 archival_memory_search 호출 |
지속성 및 상태
| 기능 | 노트 |
|---|
| Stateful agents | 에이전트 상태는 세션 전체에서 서버에 지속 |
| Storage | 기본적으로 SQLite; 프로덕션용 PostgreSQL |
| Export/import | 에이전트를 배포 간에 이동하도록 직렬화 |
| Multi-agent | 여러 stateful 에이전트 실행 및 조율 |
일반적인 워크플로우
# 세션 전체에서 기억하는 장기 실행 어시스턴트
# 1) persona/human 블록으로 생성
# 2) 각 세션, 메시지만 전송 — Letta가 메모리 페이징 관리
client.agents.messages.create(agent_id=agent.id,
messages=[{"role": "user", "content": "What do you remember about me?"}])
# 에이전트는 recall/archival 검색 및 지속적 컨텍스트로 답변
MemGPT/Letta vs 다른 메모리
| 측면 | Letta (MemGPT) | Mem0 | Zep |
|---|
| 모델 | OS 스타일 페이징, 에이전트 관리 | 다층 저장소 | 시간 그래프 |
| Statefulness | 서버 측 에이전트 | 라이브러리 | 서비스 |
| 제어 | 에이전트가 페이징 결정 | 앱 결정 | 서비스 관리 |
| 최고의 용도 | 장기 실행 자율 에이전트 | 개인화 | 시간 사실 |
리소스