← Trilha 3 | Módulo 3.2

💾 Memória de Agentes: Zep Cloud vs KuzuDB

Persistência de estado, grafos temporais e busca híbrida para agentes LLM

O que é:

LLMs processam cada request de forma completamente isolada. Quando o agente "Maria" discute política no round 15, no round 16 ela não tem nenhuma lembrança dessa conversa a menos que a informação seja explicitamente re-injetada no prompt. O context window do LLM funciona como "memória de trabalho" limitada (128K-200K tokens nos melhores modelos), mas uma simulação de 100 rounds com 50 agentes pode gerar milhões de tokens de histórico. O problema da memória é: como dar ao agente acesso a informações relevantes do passado sem exceder o context window e sem explodir custos de tokens?

Por que aprender:

Sem memória, agentes se contradizem, repetem posts idênticos, e não desenvolvem opiniões consistentes ao longo do tempo. A memória é o que transforma chamadas LLM desconexas em uma simulação social coerente com agentes que parecem "vivos".

Conceitos-chave:
  • Stateless paradox: cada chamada LLM é uma "amnésia" completa
  • Context window como gargalo: 128K tokens ~ 96K palavras ~ poucos rounds completos
  • External memory: banco de dados especializado que armazena e recupera memórias
  • RAG para memória: retrieval de memórias relevantes antes de cada decisão
  • Token economics: cada memória injetada custa tokens, exigindo seleção criteriosa
O que é:

Zep Cloud é uma plataforma SaaS de engenharia de contexto projetada especificamente para aplicações LLM. Seu componente central é o Graphiti, um engine de grafo temporal de conhecimento que armazena não apenas fatos ("AgentX é conservador") mas também quando esse fato foi estabelecido e como ele mudou ao longo do tempo. O Graphiti usa Neo4j como backend de grafo e combina com embeddings vetoriais para busca semântica. Zep possui certificação SOC 2 Type II, garantindo compliance para uso enterprise com dados sensíveis. A API oferece endpoints para add_memory, search_memory, e get_entity_timeline.

Por que aprender:

O Zep é a solução de memória padrão do OASIS original. Entender o Graphiti permite otimizar queries de memória, reduzir latência e custos, e avaliar se o trade-off cloud vs local faz sentido para seu caso de uso.

Conceitos-chave:
  • Graphiti engine: grafo temporal com nodes (entidades), edges (relações) e timestamps
  • Fact extraction pipeline: LLM extrai fatos estruturados de conversas automaticamente
  • Entity timeline: histórico de como uma entidade mudou ao longo do tempo
  • SOC 2 Type II: auditoria de segurança para dados enterprise
  • Pricing: pay-per-use com tier gratuito limitado a 1000 memories
O que é:

KuzuDB é um banco de dados de grafo embutido (embedded) que funciona como uma biblioteca, sem necessidade de servidor separado. Similar ao SQLite para dados relacionais, o KuzuDB armazena grafos em arquivos locais. O fork inematds substituiu toda a camada Zep Cloud por KuzuDB, implementando: armazenamento de memórias como nodes no grafo, relações temporais como edges com timestamps, e busca via Cypher queries combinadas com embeddings locais (sentence-transformers). A migração elimina 100% dos custos de cloud e funciona sem internet.

Por que aprender:

O KuzuDB é a solução de memória do MiroFish e de todos os forks derivados do inematds. Ele elimina custos recorrentes, permite operação offline, e dá controle total sobre os dados. Para pesquisa acadêmica e prototipagem, é a escolha ideal.

Conceitos-chave:
  • Embedded DB: carrega como biblioteca Python, sem processo separado
  • Cypher-compatible: linguagem de consulta padrão para grafos
  • Local embeddings: sentence-transformers para vetorização sem API
  • Zero-cost: sem licença, sem API keys, sem limites de uso
  • Trade-off: menos features que Graphiti (sem fact extraction automática)
O que é:

A busca híbrida combina dois paradigmas de information retrieval: busca semântica (que converte textos em vetores densos de 384-1536 dimensões e calcula cosine similarity, capturando significado e sinonímia) e BM25 (evolução do TF-IDF que ranqueia por frequência de termos com normalização de comprimento, capturando matches exatos de keywords). O score combinado é: final_score = 0.7 × semantic_score + 0.3 × bm25_score. Esses pesos foram otimizados empiricamente para equilibrar recall semântico com precisão lexical em queries de memória de agentes.

Por que aprender:

A qualidade da busca de memória determina diretamente a qualidade das decisões do agente. Se a busca retorna memórias irrelevantes, o agente age de forma incoerente. A busca híbrida maximiza a chance de recuperar memórias verdadeiramente relevantes.

Conceitos-chave:
  • Semantic search: embeddings vetoriais via sentence-transformers ou OpenAI
  • BM25: TF-IDF com saturação de frequência e normalização de documento
  • Weight tuning: 0.7/0.3 como default, ajustável por domínio
  • Reciprocal Rank Fusion (RRF): método alternativo para combinar rankings
  • Top-k retrieval: tipicamente k=5 memórias por query para economizar tokens
O que é:

Inspirado na neurociência cognitiva, o sistema organiza memórias em três tipos: Memória Episódica armazena eventos específicos com contexto ("No round 23, vi um post do AgentX defendendo desmatamento e fiquei indignada"). Memória Semântica armazena fatos consolidados sem contexto específico ("AgentX é um apoiador do agronegócio"). Memória Temporal armazena a sequência e timing de eventos, permitindo raciocínio causal ("Minha opinião sobre AgentX mudou depois do round 23"). O sistema implementa consolidação: episódicas repetidas são promovidas a semânticas.

Por que aprender:

Cada tipo de memória serve uma função cognitiva diferente. Episódicas permitem referências específicas ("como daquela vez que..."), semânticas provêm contexto geral rápido, e temporais permitem raciocínio causal. A combinação produz agentes com comportamento mais natural e coerente.

Conceitos-chave:
  • Episódica: eventos com contexto, sujeita a decay temporal (memórias antigas são esquecidas)
  • Semântica: fatos consolidados, persistem indefinidamente no knowledge graph
  • Temporal: timestamps e ordering para raciocínio causal "A aconteceu antes de B"
  • Consolidação: 3+ episódicas similares geram 1 semântica via summarization LLM
  • Decay function: relevance = base_score × exp(-λ × age), com λ configurável
O que é:

Os benchmarks de performance do sistema de memória mostram: Zep Cloud atinge P95 < 200ms (95% das queries respondem em menos de 200ms) com 80.32% de precisão no benchmark LoCoMO (Long Context Memory Optimization), que mede capacidade de recuperar informações corretas em históricos longos. O KuzuDB local atinge P95 < 50ms (mais rápido por ser local, sem latência de rede) mas com precisão levemente menor (~75%) por usar embeddings locais menores. Em simulações com 1000 agentes e 100 rounds, o KuzuDB processa ~100K queries de memória em ~8 minutos, enquanto o Zep Cloud leva ~25 minutos mas com melhor qualidade de retrieval.

Por que aprender:

Performance de memória é o gargalo em simulações de escala. Cada agente consulta memória a cada round. Com 10.000 agentes e 50 rounds, são 500.000 queries de memória. A diferença entre 200ms e 50ms por query é a diferença entre 27 horas e 7 horas de simulação.

Conceitos-chave:
  • P95 latency: 95° percentil, melhor que média para avaliar worst-case
  • LoCoMO benchmark: teste padronizado com 1000 queries em históricos de 100K+ tokens
  • Zep Cloud: melhor precisão (80.32%), maior latência (rede), custo por query
  • KuzuDB local: menor latência (< 50ms), menor precisão (~75%), zero custo marginal
  • Scaling factor: overhead de memória cresce linearmente com nº de agentes × rounds
← OASIS: Simulação Social Próximo: Personalização de Agentes →