Memory em agents

Três horas dentro de uma sessão de debugging assistida por agent, o sistema começou a contradizer a si mesmo. Recomendou adicionar um índice a uma coluna que tinha rejeitado 40 passos atrás por cardinalidade baixa. Releu um arquivo de configuração que já havia analisado. Propôs um fix para um bug que ele mesmo tinha marcado como resolvido na hora 2.

Não era o modelo piorando ao longo do tempo. Era o contexto: 180K tokens de histórico carregados integralmente em cada requisição. A atenção do modelo se dissolvia no oceano de turnos anteriores — call stack do passo 12, observação do passo 27, raciocínio do passo 43 — todos presentes, nenhum com peso suficiente para ser confiável. Sem compactação, cada requisição ficava mais cara e menos útil ao mesmo tempo.

Esse é o problema que o design de memória em agents existe para resolver. Memory não é uma feature opcional — é o que separa um agent que funciona por 50 turnos de um que para de ser confiável no turno 8. A questão não é “preciso de long-term memory?”, mas “o que precisa sobreviver ao turno atual, e em qual formato?”

TL;DR

Agents precisam lembrar entre passos. Três tipos coexistem: short-term (working memory carregada no prompt, limitada pela context window, descarta ao terminar), long-term (persistente entre sessões, em arquivo/DB/vector store), e structured state (NOTES.md, TODO.md). Compactação é essencial — context cresce, atenção dilui (03 - Context rot e atenção diluída). Para deep dive em sistemas avançados (MemGPT, Letta, Mem0, Zep), ver a trilha Memória de Agentes.

Os 3 tipos

graph TB
    A["⏳ Working memory<br/>(turno atual)"] --> B["🕐 Short-term<br/>(sessão)"]
    B --> C["💾 Long-term<br/>(persistente)"]
TipoOnde moraVida útilTamanho
Working memoryPrompt do turnoSegundosIlimitado dentro da janela
Short-termHistórico da sessãoHorasCresce — precisa compactar
Long-termDB, files, vector storeDias a anosIlimitado

Working memory — o scratchpad

Espaço de raciocínio dentro do prompt do turno atual. Em modelos com extended thinking (Claude 4+, o1), fica em block separado.

Características:

  • Descartado após o turno (em models com thinking)
  • Não consome tokens do output (em modelos modernos)
  • Permite raciocínio antes da ação

Short-term memory — o histórico

O histórico da conversa atual. Cresce a cada turno.

Problema clássico: sessão de 50 turnos vira contexto de 200K tokens. 03 - Context rot e atenção diluída|Atenção dilui, custo explode.

Mitigações:

Long-term memory — o que persiste

Info que sobrevive entre sessões em long-term memory. Várias estratégias:

File-based (markdown)

project/
└── .agent-memory/
    ├── NOTES.md         # observações e decisões
    ├── TODO.md          # próximos passos
    ├── DECISIONS.md     # log de ADRs
    └── facts/

Prós: simples, inspecionável, git-friendly, agent pode editar como qualquer arquivo Contras: não escala para milhares de fatos Use quando: projeto solo ou time pequeno, codebase ou vault Obsidian

Detalhamento em 10 - Structured state tracking.

Vector store

Embeddings de memórias passadas, recuperadas por similaridade semântica.

Prós: escalável, busca natural por significado Contras: menos controlável, pode trazer noise Tools: Pinecone, Weaviate, Qdrant, Mem0/Zep

Structured DB

Tabelas com entidades, relações, fatos. Máxima estrutura.

Use quando: compliance pesado, auditoria total

Self-editing memory (MemGPT, Letta)

LLM tem ferramentas para escrever, ler, podar a própria memória durante reasoning.

Deep dive em 08 - Memória agentica — self-editing memory.

Working memory compaction — o pattern essencial

Quando histórico passa do limite, resuma e substitua. Claude Code faz isso automaticamente. Em código próprio, dispare quando tokens > 70% da janela.

Decisão: que memória usar?

graph TB
    A["Tarefa do agent"] --> B{"Estado<br/>cabe na sessão?"}
    B -->|sim| C["Só working + short-term"]
    B -->|não| D{"Quantos<br/>fatos?"}
    D -->|<100| E["File-based<br/>(markdown)"]
    D -->|100-10K| F["Mem0 / Letta<br/>ou simple DB"]
    D -->|>10K| G["Vector store<br/>+ retrieval"]

Sinais que precisa de long-term memory

  • Mesmo usuário interage múltiplas vezes
  • Agent deveria “lembrar” preferências
  • Decisões anteriores precisam ser referenciadas
  • Histórico cumulativo é diferencial competitivo

Sinais que NÃO precisa

  • Cada sessão é stateless (chatbot anônimo)
  • Aplicação é one-shot
  • Compliance proíbe retenção
  • Time pequeno sem orçamento para manter memória

Anti-patterns

Achatar tudo em short-term

Context rot inevitável.

Long-term sem TTL

Fato de 2024 ainda servido em 2026.

Sem compactação

Sessão de 8h envia 800K tokens em cada turno.

Vector store para tudo

Muito barulho; markdown basta para a maioria.

Self-editing memory sem governance

Memory poisoning, PII leak.

Para deep dive

A trilha Memória de Agentes tem 24 notas dedicadas: taxonomia (episódica, semântica, procedural), implementações (OpenKB, MemGPT/Letta, Mem0, Zep, Graphiti, Generative Agents Stanford), comparativo crítico, guia de implementação.

xychart-beta
    title "Custo por requisição — com vs sem compactação (sessão de 30 turnos)"
    x-axis ["Turn 5", "Turn 10", "Turn 15", "Turn 20", "Turn 25", "Turn 30"]
    y-axis "Tokens enviados por req (K)" 0 --> 200
    bar [15, 30, 55, 90, 140, 200]
    line [15, 18, 20, 21, 22, 23]

A barra mostra o custo sem compactação (crescimento linear). A linha mostra com compactação ativa a cada ~5 turnos — o custo se estabiliza porque o histórico é resumido em vez de acumulado. Em sessions longas, a diferença é de 5–10× em tokens e a qualidade de resposta é melhor, não pior.

graph LR
    subgraph "Curto prazo (sessão)"
        WM["Working memory\nturn atual, descarta"]
        ST["Short-term\nhistórico completo"]
    end
    subgraph "Longo prazo (persistente)"
        FB["File-based\nmarkdown, git-friendly"]
        VS["Vector store\nbusca semântica"]
        DB["Structured DB\nentidades + relações"]
        SE["Self-editing\nMemGPT / Letta"]
    end
    WM -->|"compactar quando\n>70% window"| ST
    ST -->|"sessões recorrentes\nou fatos importantes"| FB
    ST -->|"muitos fatos\nousca por similaridade"| VS
    VS -->|"compliance / auditoria"| DB
    SE -.->|"risco: memory poisoning"| VS

Como explicar em inglês

Memory in agents refers to the mechanisms by which a system retains and retrieves information across turns and sessions. Working memory is the current-turn scratch space — typically the model’s extended thinking block, which doesn’t persist. Short-term memory is the conversation history appended to each request; it grows linearly and is the most common source of runaway costs in long sessions. Without compaction — summarizing and replacing old turns — every request after the first 20 or 30 turns sends the full accumulated history, making each call simultaneously more expensive and less reliable as attention dilutes. Long-term memory encompasses anything that survives session boundaries: markdown files in the agent’s workspace (simple, inspectable, git-friendly), vector stores (semantic retrieval at scale), structured databases (entities and relations for compliance-heavy use cases), and self-editing memory systems like MemGPT/Letta where the model itself manages read/write/prune operations on its own memory store.

PortuguêsEnglish
memória de trabalhoworking memory
memória de curto prazoshort-term memory
memória de longo prazolong-term memory
janela de contextocontext window
compactação de contextocontext compaction / summarization
armazenamento vetorialvector store
memória episódicaepisodic memory
memória semânticasemantic memory
estado estruturadostructured state
recuperação por similaridadesemantic retrieval
diluição de atençãoattention dilution / context rot
memória auto-editávelself-editing memory

Ver mais

  • Packer et al. — MemGPT: Towards LLMs as Operating Systems (arxiv:2310.08560, 2023): O paper que introduziu a ideia de memory management auto-editável — o LLM decide o que mover entre working memory e long-term storage. Base teórica para entender sistemas como Letta.
  • Anthropic — Effective Context Engineering for AI Agents (2025, URL a confirmar): Cobre compaction strategies, structured state tracking, e como projetar sistemas de memória que escalam com sessões longas. Referência prática diretamente aplicável.
  • Lilian Weng — LLM Powered Autonomous Agents (lilianweng.github.io, 2023): A seção de Memory ainda é a melhor introdução concisa à taxonomia completa: sensory, short-term, long-term — com exemplos de implementação de cada tipo.

O que vem a seguir

Memory resolve a pergunta “o que o agent lembra?” — qual fato sobrevive ao turno atual, em qual formato, por quanto tempo. Mas lembrar não é agir: um agent pode ter o histórico perfeitamente compactado e a memória de longo prazo bem estruturada e ainda assim travar decidindo o que fazer com esse conhecimento no próximo passo. É a pergunta que 05 - Planning — plan-then-execute, dynamic, hierarchical resolve — como o agent transforma o que sabe (memory) em uma sequência de ações (planning), seja num plano fixo antes de agir, seja replanejando dinamicamente a cada observação nova.

Veja também

Referências

  • Packer et al.MemGPT: Towards LLMs as Operating Systems (2023)
  • AnthropicEffective context engineering for AI agents (2025)
  • LettaMemory Blocks documentation (2025)