MemGPT / Letta - Memória de Agente Estilo SO
MemGPT é a técnica — e Letta o framework que cresceu dela — para dar aos agentes LLM gerenciamento de memória estilo sistema operacional. A ideia principal: trate a janela de contexto como RAM (rápida mas pequena) e adicione “disco” na forma de memória arquival pesquisável. O próprio agente decide, via chamadas de ferramenta, o que manter no contexto principal e o que paginar para armazenamento, permitindo-lhe manter memória de longo prazo coerente bem além do limite de contexto bruto. (O projeto agora é desenvolvido como Letta.)
Instalação
| Método | Comando |
|---|
| pip | pip install letta |
| Execute o servidor | letta server |
| Docker | docker run -p 8283:8283 letta/letta:latest |
| ADE (web UI) | conecte o Agent Development Environment ao servidor |
| Verificar | letta version |
Arquitetura de Memória
| Tier | Analogia | Conteúdo |
|---|
| Main context (memória principal) | RAM | Persona + fatos chave sempre no prompt |
| Recall memory | Arquivos recentes | Histórico de conversa, pesquisável |
| Archival memory | Disco | Fatos de longo prazo arbitrários, pesquisáveis |
| O agente | O SO | Decide o que paginar dentro/fora via ferramentas |
Memória Grundamental (Sempre em Contexto)
| Bloco | Propósito |
|---|
persona | Quem o agente é / como se comporta |
human | O que ele sabe sobre o usuário |
| Blocos customizados | Fatos específicos do domínio sempre-presentes |
O agente edita esses blocos com ferramentas (core_memory_append, core_memory_replace) conforme aprende.
Criando um Agente
from letta_client import Letta
client = Letta(base_url="http://localhost:8283")
agent = client.agents.create(
name="assistant",
memory_blocks=[
{"label": "persona", "value": "Sou um assistente conciso e útil."},
{"label": "human", "value": "O nome do usuário é Nick."},
],
model="openai/gpt-4o",
embedding="openai/text-embedding-3-small",
)
Mensagens e Ferramentas de Memória
response = client.agents.messages.create(
agent_id=agent.id,
messages=[{"role": "user", "content": "Lembre-se que prefiro modo escuro."}],
)
| Ferramenta (invocada por agente) | Ação |
|---|
core_memory_append | Adicione a um bloco sempre-em-contexto |
core_memory_replace | Atualize um bloco de memória principal |
archival_memory_insert | Armazene um fato em arquivo (disco) |
archival_memory_search | Recupere da memória arquival |
conversation_search | Procure memória de recall |
Memória Arquival
| Comando | Descrição |
|---|
client.agents.passages.create(agent_id, text=...) | Insira uma memória arquival |
client.agents.passages.list(agent_id) | Liste passagens armazenadas |
| Busca de agente | Agente chama archival_memory_search automaticamente quando relevante |
Persistência e Estado
| Recurso | Nota |
|---|
| Agentes stateful | Estado do agente persiste no servidor entre sessões |
| Armazenamento | SQLite por padrão; PostgreSQL para produção |
| Export/import | Serialize agentes para movê-los entre implantações |
| Multi-agente | Execute e coordene vários agentes stateful |
Workflows Comuns
# Um assistente de longa duração que lembra entre sessões
# 1) crie uma vez com blocos persona/human
# 2) cada sessão, apenas envie mensagens — Letta gerencia paginação de memória
client.agents.messages.create(agent_id=agent.id,
messages=[{"role": "user", "content": "O que você se lembra sobre mim?"}])
# o agente procura recall/arquival e responde com contexto persistente
MemGPT/Letta vs Outra Memória
| Aspecto | Letta (MemGPT) | Mem0 | Zep |
|---|
| Modelo | Paginação estilo SO, gerenciada por agente | Armazenador multi-tier | Grafo temporal |
| Statefulness | Agentes do lado do servidor | Biblioteca | Serviço |
| Controle | Agente decide paginação | App decide | Serviço gerencia |
| Melhor para | Agentes autônomos de longa duração | Personalização | Fatos temporais |
Recursos