Bases de datos vectoriales
Qué es
Una vectorial convierte cada fragmento de texto, imagen u otro dato en una larga lista de números que captura su significado. Esas listas de números se llaman vectores de alta dimensión (embeddings). Cuando haces una búsqueda, encuentra los elementos cuyo significado está más cerca de tu consulta. Piensa en un bibliotecario que te entrega libros sobre el mismo tema aunque usen palabras completamente distintas. En lugar de comparar palabras clave exactas, ordena los resultados según cuán cercano está su significado (cercanía semántica), medida con métricas de distancia como la similitud coseno. Estas bases de datos impulsan la búsqueda semántica, las recomendaciones y la generación aumentada por recuperación (RAG, retrieval-augmented generation) para aplicaciones de IA.
Fortalezas
- Búsqueda de similitud rápida sobre millones de embeddings mediante índices ANN (Approximate Nearest Neighbor, vecino más cercano aproximado).
- Habilita la búsqueda semántica y RAG, que entienden el significado y no solo las palabras clave.
- Muchas opciones: pgvector, Pinecone, Qdrant, Weaviate, Milvus, Chroma.
- El filtrado por metadatos combina la búsqueda semántica con restricciones estructuradas.
- Escala a grandes corpus gracias a algoritmos de vecino más cercano aproximado.
Contrapartidas
- Los resultados son aproximados; ajustar la precisión implica un compromiso entre recall (cobertura) y velocidad.
- La calidad del embedding depende por completo del modelo que generó los vectores.
- Si cambias de modelo, es necesario volver a generar los embeddings de todo el corpus.
- El almacenamiento y la memoria crecen con el número de dimensiones y el tamaño del conjunto de datos.
Cuándo usarla
Usa una base de datos vectorial para búsqueda semántica, preguntas y respuestas sobre documentos, recomendaciones, deduplicación y flujos de RAG que alimentan contexto relevante a un LLM (Large Language Model, modelo de lenguaje grande). Para una escala modesta, la extensión pgvector te permite guardar los vectores junto con datos relacionales en PostgreSQL.
Encaje con vibe coding
Al dirigir a la IA, sé explícito sobre tres cosas: qué modelo de embeddings usas (para que las dimensiones del vector coincidan con el índice), la métrica de distancia (la similitud coseno es la habitual para texto) y cómo divides en fragmentos (chunks) los documentos de origen antes de generar los embeddings. Pídele a la IA que guarde metadatos útiles junto a cada vector para que puedas filtrar (por ejemplo, por user_id o doc_type) y que mantenga el mismo modelo tanto en el código de generación de embeddings como en el de consulta. Un buen consejo: pide a la IA que construya un paso de recuperación RAG que devuelva los top-k fragmentos junto con sus identificadores de origen. Así las respuestas se mantienen trazables, y puedes verificar qué contexto usó realmente el modelo.
-- 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;