~/VibeHandbook
PDF grátis

Bancos de dados

github.com

Bancos de Dados Vetoriais

O que é

Um banco de dados vetorial transforma cada trecho de texto, imagem ou outro tipo de dado em uma longa lista de números que captura seu significado. Essas listas de números são chamadas de vetores de alta dimensão (embeddings). Quando você faz uma busca, o banco encontra os itens cujo significado está mais próximo da sua consulta. Pense em um bibliotecário que te entrega livros sobre o mesmo assunto mesmo que usem palavras completamente diferentes. Em vez de casar palavras-chave exatas, ele classifica os resultados pela proximidade de significado (proximidade semântica), medida com métricas de distância como a similaridade de cosseno. Esses bancos alimentam busca semântica, recomendações e geração aumentada por recuperação (RAG, Retrieval-Augmented Generation) em aplicações de IA.

Pontos fortes

  • Busca de similaridade rápida sobre milhões de embeddings via índices ANN (Approximate Nearest Neighbor, vizinho mais próximo aproximado).
  • Permite busca semântica e RAG que entende significado, não apenas palavras-chave.
  • Muitas opções: pgvector, Pinecone, Qdrant, Weaviate, Milvus, Chroma.
  • Filtragem por metadados combina busca semântica com restrições estruturadas.
  • Escala para grandes corpora com algoritmos de vizinho mais próximo aproximado.

Contrapartidas

  • Os resultados são aproximados; o ajuste fino troca recall por velocidade.
  • A qualidade dos embeddings depende inteiramente do modelo que os gerou.
  • É preciso reembedding de todo o corpus se você trocar de modelo.
  • Armazenamento e memória crescem com o número de dimensões e o tamanho do dataset.

Quando usar

Use um banco de dados vetorial para busca semântica, perguntas e respostas sobre documentos, recomendações, deduplicação e pipelines de RAG que alimentam contexto relevante para um LLM (Large Language Model, modelo de linguagem de grande porte). Para escala modesta, a extensão pgvector permite manter os vetores junto com dados relacionais no PostgreSQL.

Encaixe no vibe coding

Ao direcionar a IA, seja explícito sobre três coisas: qual modelo de embedding você usa (para que as dimensões do vetor combinem com o índice), a métrica de distância (cosseno é a mais comum para texto) e como você divide os documentos-fonte em pedaços (chunking) antes de gerar os embeddings. Peça à IA para armazenar metadados úteis junto de cada vetor, para que você possa filtrar (por exemplo, por user_id ou doc_type) e para manter o código de embedding e o de consulta usando o mesmo modelo. Uma boa dica: peça à IA para construir uma etapa de recuperação RAG que devolva os top-k pedaços mais os seus ids de origem. Assim as respostas continuam rastreáveis, e você consegue verificar qual contexto o modelo realmente usou.

-- PostgreSQL with the pgvector extension
CREATE EXTENSION IF NOT EXISTS vector;

CREATE TABLE documents (
  id        BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
  content   TEXT NOT NULL,
  doc_type  TEXT,
  embedding VECTOR(1536)            -- must match your embedding model
);

-- Approximate-nearest-neighbor index for cosine distance
CREATE INDEX ON documents
  USING hnsw (embedding vector_cosine_ops);

-- Top-5 most similar chunks to a query embedding ($1)
SELECT id, content
FROM documents
WHERE doc_type = 'manual'
ORDER BY embedding <=> $1
LIMIT 5;