Um agente de IA sem memória fica preso se reapresentando a cada conversa. A solução é um banco de dados vetorial — ele armazena embeddings dos seus documentos, notas ou conversas passadas para que o agente possa relembrar as partes relevantes sob demanda (é o "R" de RAG). Você pode alugar isso como um serviço gerenciado, ou pode rodá-lo você mesmo num VPS e manter seus dados — que frequentemente são seus dados privados — numa máquina que você controla. Eis como, e o que isso de fato custa em RAM.
Duas boas opções
Você não precisa de nada exótico. Dois caminhos cobrem quase todo mundo:
pgvector — uma extensão do Postgres. Se você já roda Postgres (ou está feliz em rodar), isto adiciona busca vetorial ao banco de dados que você já tem. Um serviço, um backup, SQL que você conhece. O começo de menor esforço por larga margem.
Qdrant — um motor vetorial feito sob medida. Recorra a ele quando você tem muitos vetores (poucos milhões+) ou quer filtragem rápida por metadados e uma API dedicada. É um serviço separado para rodar, mas é feito para exatamente este trabalho.
Para a maioria dos agentes se firmando, o pgvector é a primeira resposta certa. Mude para o Qdrant quando você tiver ultrapassado, não antes.
A realidade da RAM (esta é a parte que as pessoas subestimam)
A busca vetorial é rápida porque o índice mora em memória — então RAM, não disco, é a sua real restrição. Um guia aproximado:
- Algumas centenas de milhares de embeddings — confortável em 2 GB.
- Poucos milhões — planeje 4 GB+ e ajuste o índice.
- O disco é a parte fácil: um milhão de embeddings são só alguns GB, então 25–45 GB cobrem um store sério.
Então dimensione para o índice, não para o arquivo. (Mesma lógica do guia geral de dimensionamento — a coisa pesada não é óbvia até você medir.)
Início rápido: pgvector
Numa máquina com Postgres (Docker é o mais fácil — mesmo padrão de auto-hospedar o n8n):
CREATE EXTENSION IF NOT EXISTS vector;
CREATE TABLE memory (
id bigserial PRIMARY KEY,
content text,
embedding vector(1536) -- combine com as dimensões do seu modelo de embedding
);
-- depois de ter dados, construa um índice para busca rápida:
CREATE INDEX ON memory USING hnsw (embedding vector_cosine_ops);
Seu agente insere content + o embedding dele, depois consulta com ORDER BY embedding <=> $query_embedding LIMIT 5 para puxar as memórias mais próximas. É esse o ciclo inteiro.
Prefere Qdrant? É um único container Docker expondo uma API HTTP/gRPC; você cria uma collection com o seu tamanho de vetor e faz upsert de pontos. Mesma ideia, motor dedicado.
Ele pode compartilhar a máquina com o agente?
Sim — para stores de memória pequenos a médios, rode o banco vetorial no mesmo VPS que o agente. É mais simples e a latência é basicamente zero. Divida-os em servidores separados só quando um começar a espremer o outro para fora da RAM. Essa é uma decisão para depois, de bom-problema-para-ter, não uma do primeiro dia.
Ressalvas honestas
- A RAM é a parede, e é silenciosa. A busca fica rápida até o índice não caber mais em memória, então degrada. Observe a memória e redimensione antes de ela morder — não espere consultas lentas te avisarem.
- Embeddings custam tokens para criar. Todo documento que você faz embedding é uma chamada de API a um modelo de embedding. O store é barato de hospedar; gerar os vetores é o custo recorrente — relevante para o que rodar um agente de fato custa.
- Faça backup. A memória do seu agente é dado como qualquer outro. Se importa, tire um snapshot.
Dentro disso, um vector store auto-hospedado é uma forma limpa de dar a um agente memória durável sem entregar seus dados privados a um terceiro. Comece com pgvector numa máquina de 2 GB, fique de olho na RAM e cresça para o Qdrant ou um plano maior só quando os números te disserem.
Comentários
Nenhum comentário ainda. Seja o primeiro.