AULA 54 MÓDULO 7 banco de dados ⏱ 55 min

Banco de Dados Vetorial

Embeddings e busca por similaridade. pgvector: vetorial no PostgreSQL. RAG em APIs com Node.js + OpenAI.

vetorialembeddingpgvectorRAGsimilaridadeOpenAIbusca semântica

Banco de Dados Vetorial

Bancos vetoriais armazenam embeddings — representações numéricas de alta dimensão de texto, imagens ou áudio. A busca é por similaridade (distância) em vez de igualdade exata.

🧠
por que vetorial?
Busca semântica: 'carro' encontra 'automóvel' e 'veículo'. Recomendação: usuários similares. RAG: buscar documentos relevantes para completar o contexto de um LLM.
SQL tradicional
WHERE title LIKE '%machine learning%'
Não encontra: "ML", "aprendizado de máquina", "IA"
Busca vetorial
SELECT * FROM docs ORDER BY
embedding <=> query_vector LIMIT 5
Encontra semanticamente similares

pgvector — vetorial no PostgreSQL

pgvector é uma extensão do PostgreSQL que adiciona o tipo vector e índices de similaridade. Você mantém um banco só — SQL + vetorial juntos.

🔗
RAG em APIs
Receba pergunta do usuário → gere embedding → busque docs similares no pgvector → envie docs + pergunta para o LLM → retorne resposta fundamentada nos documentos.
javascript
-- pgvector — busca semântica em PostgreSQL
CREATE EXTENSION IF NOT EXISTS vector;

CREATE TABLE documents (
  id        UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  title     TEXT NOT NULL,
  content   TEXT NOT NULL,
  embedding vector(1536) -- dimensão do OpenAI text-embedding-3-small
);

CREATE INDEX ON documents USING ivfflat (embedding vector_cosine_ops)
  WITH (lists = 100);

-- Node.js: gerar embedding e buscar
const generateEmbedding = async (text) => {
  const res = await openai.embeddings.create({
    model: 'text-embedding-3-small', input: text
  })
  return res.data[0].embedding
}

app.post('/search', async (req, res) => {
  const queryVector = await generateEmbedding(req.body.query)
  const docs = await db.query(`
    SELECT id, title, content,
           1 - (embedding <=> $1) AS similarity
    FROM documents
    ORDER BY embedding <=> $1
    LIMIT 5
  `, [JSON.stringify(queryVector)])
  res.json(docs.rows)
})
quiz · aula 54
Teste seus conhecimentos
0/3 respondidas
QUESTÃO 01
O que é um embedding?
QUESTÃO 02
Qual é a principal diferença entre busca SQL (LIKE) e busca vetorial?
QUESTÃO 03
O que é RAG?
0/3