A mesma palavra, "memória", costuma esconder três problemas diferentes. Um agente precisa saber qual registro é verdadeiro, encontrar texto parecido com a pergunta e entender que uma relação mudou desde a última conversa. Colocar tudo em embeddings resolve apenas uma parte.

Para escolher entre Graphiti, RAG vetorial e PostgreSQL, separe a fonte de verdade do índice de recuperação e da representação de relações. Na prática, a arquitetura mais fácil de operar começa com o banco que você já consegue auditar. Só adiciona grafo quando a consulta realmente depende de tempo, relações ou histórico.

Se a sua dúvida ainda é como o agente encontra arquivos e símbolos, veja o artigo sobre RAG de codebase para agentes de código. Se a questão é memória temporal, o texto anterior sobre Graphiti e memória de longo prazo explica o conceito antes desta comparação.

Diagrama mostra um agente de IA escolhendo entre PostgreSQL, RAG vetorial e Graphiti para produzir contexto verificado.

Decisão rápida

  • Use PostgreSQL para fatos relacionais, estado atual, permissões e auditoria.
  • Use RAG vetorial quando a pergunta precisa localizar conteúdo semanticamente parecido.
  • Use Graphiti quando entidades e relações mudam, e o histórico faz parte da resposta.
  • Combine as camadas sem deixar o índice de busca virar a fonte de verdade.

O que cada opção guarda de verdade?

Em 2026, a documentação oficial do Graphiti descreve um grafo temporal com entidades, relações, fatos e episódios de origem (Graphiti, "Overview", consultado em 30/07/2026). PostgreSQL guarda linhas e relações explícitas. RAG vetorial guarda representações para encontrar semelhança. A escolha depende do tipo de pergunta que o agente precisa responder.

Opção Melhor unidade de memória Pergunta que responde bem Risco principal
PostgreSQL Registro, estado ou evento "Qual é o estado atual desta tarefa?" Exigir consultas semânticas que não foram modeladas
RAG vetorial Trecho ou documento recuperável "Qual conteúdo se parece com esta pergunta?" Retornar texto parecido, mas desatualizado ou sem relação
Graphiti Entidade, relação, episódio e validade "O que mudou entre estas pessoas, sistemas ou decisões?" Operar extração, banco de grafo e política de atualização

O erro comum é perguntar qual ferramenta tem a melhor memória. A pergunta útil é qual estrutura preserva a evidência que você precisará revisar depois. Um ticket pode viver em PostgreSQL, ter um embedding para busca e aparecer no grafo como uma relação entre serviço, decisão e incidente. Nenhuma camada precisa fingir que faz o trabalho das outras.

Quando PostgreSQL deve ser a memória do agente?

Em 2026, PostgreSQL deve ser a memória principal quando o sistema precisa de transação, filtro por permissão, estado atual e histórico que outra pessoa consiga consultar com SQL. A documentação oficial separa tsvector e tsquery para busca textual, enquanto o modelo relacional mantém a regra de negócio (PostgreSQL, "Full Text Search", consultado em 30/07/2026).

Esse caminho atende agentes de suporte, operações e coding agents que precisam ler tarefas, decisões, aprovações ou resultados de teste. A linha do banco vira o contrato. O agente recebe uma projeção curta, mas a aplicação pode abrir o registro completo quando precisa investigar.

CREATE TABLE agent_memory (
  id uuid PRIMARY KEY,
  subject_id text NOT NULL,
  kind text NOT NULL,
  content jsonb NOT NULL,
  source_uri text NOT NULL,
  valid_from timestamptz NOT NULL,
  valid_until timestamptz,
  created_at timestamptz NOT NULL DEFAULT now()
);

CREATE INDEX agent_memory_subject_idx
  ON agent_memory (subject_id, kind, valid_until);

O campo source_uri impede que uma frase órfã vire verdade só porque o modelo a recuperou. valid_until permite retirar um fato sem apagar a história. A aplicação ainda decide se dois registros conflitantes devem ser rejeitados, versionados ou enviados para revisão humana.

Use full-text search para termos, nomes de serviços, identificadores e decisões que dependem de correspondência lexical. Se a pergunta for "qual migration criou a coluna status?", a busca textual e os metadados do banco costumam ser mais úteis que uma semelhança aproximada.

Quando a recuperação precisa chegar ao agente por ferramentas estreitas, o post sobre MCP de codebase RAG mostra uma fronteira semelhante entre busca sob demanda e contexto carregado.

Cápsula citável: PostgreSQL é uma boa fonte de verdade para memória de agentes quando o sistema precisa de transações, permissões, estado atual e proveniência auditável. A busca textual pode localizar termos e identificadores, mas a decisão sobre validade, conflito e acesso continua no modelo relacional, fora do prompt do agente.

Quando RAG vetorial é suficiente?

Em 2026, RAG vetorial é suficiente quando a tarefa é recuperar trechos semanticamente próximos e a validade pode ser controlada pelo processo de ingestão. O README do pgvector documenta busca exata, índices aproximados HNSW e IVFFlat, além da combinação com full-text search do PostgreSQL (pgvector, "README", consultado em 30/07/2026).

Essa opção funciona bem para documentação, runbooks, decisões arquiteturais e exemplos de código que não precisam de uma rede de relações para serem entendidos. O agente pergunta, a aplicação recupera candidatos e o modelo recebe trechos com identificador e fonte.

CREATE EXTENSION IF NOT EXISTS vector;

CREATE TABLE memory_chunks (
  id bigserial PRIMARY KEY,
  source_uri text NOT NULL,
  content text NOT NULL,
  embedding vector NOT NULL,
  updated_at timestamptz NOT NULL
);

CREATE INDEX memory_chunks_embedding_idx
  ON memory_chunks USING hnsw (embedding vector_cosine_ops);

O tipo do vetor no exemplo deixa a dimensão como decisão da migração. Se você fixar uma dimensão, confira o valor produzido pelo seu provedor antes de criar o índice. O índice melhora a busca, mas não sabe se o texto ainda é válido, se a pessoa tem permissão ou se um documento novo substituiu o antigo.

Por isso, filtre por escopo antes de montar o contexto. Verifique subject_id, repositório, ambiente, classificação e data. Depois combine a busca semântica com termos exatos quando a pergunta tiver nomes de arquivos, incidentes, classes ou identificadores de API.

Se o agente atravessa muitas sessões e precisa recuperar apenas a evidência relevante, o RemoteCode ajuda Claude Code e Codex a continuar fluxos agentic com menos repetição de contexto. A ferramenta é do próprio autor e entra aqui como opção para reduzir contexto reenviado. Ela não substitui banco, autorização ou verificação da memória.

Cápsula citável: RAG vetorial resolve a recuperação de conteúdo parecido, não a governança da memória. pgvector pode combinar busca vetorial com full-text search no PostgreSQL, mas a aplicação ainda precisa filtrar acesso, registrar a fonte, controlar atualização e impedir que um trecho antigo seja apresentado como estado atual.

Quando Graphiti vale a complexidade?

Em 2026, Graphiti vale a complexidade quando a resposta depende de relações que mudam e de consultas em um ponto específico do tempo. A documentação oficial descreve ingestão incremental por episódios, proveniência, invalidação temporal de fatos e busca híbrida com semântica, texto e travessia de grafo (Graphiti, "Overview", consultado em 30/07/2026).

Imagine um agente que precisa responder qual serviço dependia de uma fila antes de uma migração, qual decisão substituiu outra ou qual pessoa aprovou uma exceção enquanto ela ainda era válida. Um vetor pode encontrar documentos relacionados. O grafo pode representar a relação e seu ciclo de vida, desde que o modelo de dados e a ingestão estejam corretos.

Em 2026, Graphiti não é um atalho para jogar uma codebase inteira em um grafo. O projeto oficial exige um banco de grafo compatível e um provedor de LLM para extração e embeddings (Graphiti, "README", consultado em 30/07/2026). Isso cria mais pontos para configurar, observar e testar.

Use um grafo quando a relação for parte da consulta, não apenas um detalhe visual. Se a pergunta é "qual documento fala sobre timeout?", comece com texto ou vetor. Se a pergunta é "qual serviço dependia desta fila quando a decisão foi tomada?", relações temporais podem justificar Graphiti.

Diagrama mostra um fato antigo sendo invalidado por um fato novo antes de o agente receber contexto atual.

Cápsula citável: Graphiti é uma escolha de memória temporal para agentes quando entidades, relações e fatos mudam ao longo do tempo. O framework registra episódios de origem e oferece recuperação híbrida, mas exige operação de um backend de grafo e uma política clara para extração, invalidação, permissões e observabilidade.

A arquitetura híbrida separa verdade, busca e relações

Uma arquitetura híbrida mantém uma fonte de verdade e cria índices derivados para perguntas diferentes. O registro transacional fica em PostgreSQL. O embedding aponta para trechos recuperáveis. O grafo representa relações temporais quando o domínio precisa delas. A resposta do agente carrega referências para essas camadas, em vez de carregar apenas texto solto.

type MemoryEvidence = {
  id: string;
  sourceUri: string;
  text: string;
  validFrom: string;
  validUntil: string | null;
  score?: number;
};

type MemoryProvider = {
  search(input: {
    subjectId: string;
    query: string;
    at?: string;
  }): Promise<MemoryEvidence[]>;
  record(input: {
    subjectId: string;
    sourceUri: string;
    content: string;
  }): Promise<{ id: string }>;
};

O contrato não revela ao agente qual banco respondeu. Ele exige que cada resultado tenha identificador, fonte e validade. A implementação pode consultar SQL primeiro, usar busca híbrida depois e chamar Graphiti apenas quando a pergunta pedir relação ou histórico.

O supervisor também deve distinguir leitura de escrita. Uma ferramenta de busca pode retornar evidências. Uma ferramenta de gravação deve validar o conteúdo, exigir sourceUri, registrar quem pediu a mudança e evitar que uma saída do modelo substitua um fato sem aprovação.

Cápsula citável: Uma arquitetura híbrida para memória de agentes mantém PostgreSQL como fonte de verdade, usa RAG vetorial para localizar conteúdo e reserva Graphiti para relações temporais. O agente não precisa saber qual camada respondeu, mas deve receber evidência com identificador, origem e validade para que a aplicação possa verificar o contexto.

Como verificar a memória antes de chamar o modelo?

Verifique a memória em duas etapas: primeiro a aplicação valida escopo, validade e origem; depois o agente recebe apenas resultados que podem ser citados. Essa separação reduz o risco de um texto plausível dominar o contexto. O retorno deve permitir que um teste reproduza a consulta e confira o registro usado.

Use este checklist no caminho de recuperação:

  1. Normalize o identificador do sujeito, repositório ou tenant.
  2. Restrinja a consulta às fontes que a execução pode ler.
  3. Remova fatos cuja validade terminou, salvo quando a pergunta pede histórico.
  4. Recupere candidatos por texto, vetor ou relação temporal.
  5. Anexe sourceUri, identificador e data de validade a cada evidência.
  6. Rejeite respostas sem evidência ou marque a saída como não verificada.

O teste não deve perguntar apenas se o modelo respondeu. Ele precisa confirmar que uma mudança de estado retira o fato antigo, que uma fonte sem permissão não aparece e que uma pergunta histórica ainda encontra a versão correta. Para coding agents, registre também o commit, o arquivo ou a decisão arquitetural usada.

Quando a recuperação falha, não aumente o limite de contexto por reflexo. Primeiro descubra se faltou uma fonte, se o filtro descartou o resultado correto ou se o índice devolveu um trecho parecido. Esse diagnóstico aponta para ingestão, autorização, consulta ou ranking, quatro correções diferentes.

Esse diagnóstico também se aplica ao orçamento de contexto para agentes de código: medir o que entra no prompt ajuda a separar falta de memória de excesso de contexto.

Erros comuns e limites da comparação

O primeiro erro é transformar Graphiti em requisito de qualquer agente. Um agente pequeno pode funcionar melhor com uma tabela, uma busca textual e alguns metadados. Um grafo acrescenta valor quando a relação muda e precisa ser consultada, não quando o diagrama parece mais sofisticado.

O segundo erro é tratar embeddings como memória canônica. Embeddings são índices derivados. Eles precisam de atualização, exclusão, escopo e reprocessamento. Se um documento é revogado, o agente não deveria continuar citando o vetor antigo porque a busca semântica ainda encontra uma frase semelhante.

O terceiro erro é misturar passado e presente na mesma resposta. A imagem deste post resume a regra: um fato novo pode invalidar o antigo sem apagar sua origem. Quando a pergunta não informa um instante, defina uma política explícita para preferir o estado atual.

O quarto erro é esconder a escrita de memória dentro de uma ferramenta genérica. Separe search de record, valide os argumentos e registre a decisão. Uma gravação errada é mais difícil de reparar que uma busca incompleta, porque contamina as consultas seguintes.

Os limites também importam. A documentação dos projetos descreve capacidades e exemplos, mas seus benchmarks não representam automaticamente seu domínio. Meça recall, precisão, tempo de recuperação, custo de ingestão, volume de contexto e taxa de fatos desatualizados com um conjunto de perguntas do seu sistema.

Perguntas frequentes sobre memória de agentes de IA

Graphiti substitui um banco vetorial?

Não necessariamente. Graphiti oferece busca híbrida com relações, texto e semântica, mas a fonte de verdade do produto pode continuar em PostgreSQL. O projeto oficial descreve Graphiti como um motor de grafo temporal e recomenda um backend compatível. Escolha-o quando o histórico relacional fizer parte da pergunta, não apenas porque o agente precisa de memória.

PostgreSQL é suficiente para memória persistente de um agente?

Em muitos sistemas, sim. PostgreSQL cobre estado, transações, permissões, auditoria e busca textual. Com pgvector, também pode manter embeddings e busca semântica. Ele deixa de ser suficiente quando as consultas dependem de muitas relações temporais que seriam artificiais em tabelas. Mesmo nesse caso, pode continuar sendo a fonte de verdade.

RAG vetorial evita contexto desatualizado?

Não sozinho. A busca vetorial encontra conteúdo parecido, mas não sabe se a fonte foi revogada, substituída ou bloqueada para aquele usuário. Armazene a origem e a validade, filtre antes de montar o prompt e teste mudanças de estado. Se a aplicação precisa de histórico, consulte a versão correta em vez de confiar no trecho mais próximo.

Devo expor a memória do agente via MCP?

MCP pode ser uma fronteira útil para ferramentas de busca e registro, mas não deve decidir a verdade dos dados. Valide a entrada no servidor, mantenha leitura e escrita separadas e devolva evidência estruturada. O agente pode pedir contexto por uma ferramenta, enquanto PostgreSQL, Graphiti ou outro backend aplica autorização e política de atualização.

Fontes consultadas