Vector Database
Una base de datos vectorial almacena embeddings con identificadores y metadatos, y los indexa para realizar búsquedas rápidas de los vecinos más cercanos: la capa de recuperación de RAG y la búsqueda de imágenes.
Una base de datos vectorial almacena incrustaciones, los vectores numéricos que los modelos generan para texto, imágenes, audio o vídeo, junto con un ID y metadatos de cada elemento, y responde en milisegundos a la consulta «¿qué vectores almacenados son los más cercanos a este?» entre millones o miles de millones de elementos. Integra un índice de búsqueda vectorial con las funciones de una base de datos: inserciones, actualizaciones y eliminaciones, filtrado por metadatos, persistencia, control de acceso y replicación entre máquinas. Las bases de datos vectoriales proporcionan el paso de recuperación de la generación aumentada por recuperación (RAG), la búsqueda semántica y los sistemas de recomendación.
Cómo funciona una base de datos vectorial#
En la ruta de escritura, un modelo de incrustación, externo a la base de datos o integrado en ella, convierte cada elemento en un vector, y la base de datos almacena ese vector con un ID y una carga de metadatos, como el archivo de origen, la fecha, la cámara o el cliente. Comparar una consulta con todos los vectores almacenados es exacto, pero lento a gran escala, por lo que la base de datos crea un índice de vecinos más cercanos aproximados (ANN). HNSW conecta cada vector con sus vecinos próximos en un grafo por capas que se recorre de forma voraz durante la búsqueda; los índices de archivo invertido (IVF) agrupan los vectores mediante agrupación k-means y solo exploran los grupos más cercanos a la consulta; y los métodos de cuantización vectorial, como la cuantización de productos, comprimen cada vector hasta ocupar unos pocos bytes. En la ruta de lectura, la consulta se convierte en una incrustación con el mismo modelo y se compara con una métrica como la similitud del coseno, el producto escalar o la distancia euclídea. La base de datos devuelve los k primeros ID, puntuaciones y cargas, que muchos sistemas combinan con resultados por palabras clave en la búsqueda híbrida.
Este ejemplo usa Chroma, una base de datos vectorial de código abierto que se ejecuta en memoria dentro de un proceso de Python:
import chromadb
# Cliente en memoria; chromadb.PersistentClient(path="db") mantiene los datos en el disco
client = chromadb.Client()
collection = client.create_collection("inspection_notes")
# Chroma genera una incrustación de cada documento con su modelo de incrustación predeterminado e indexa los vectores
collection.add(
ids=["n1", "n2", "n3"],
documents=[
"Hairline crack found near the weld on bracket B7",
"Paint scratch on the left door panel",
"Porosity in the weld seam of the frame rail",
],
metadatas=[{"line": "A"}, {"line": "B"}, {"line": "B"}],
)
# Búsqueda de vecinos más cercanos restringida a una línea de producción
results = collection.query(query_texts=["welding defects"], n_results=1, where={"line": "B"})
print(results["ids"][0], results["documents"][0])La consulta devuelve la nota n3, sobre la porosidad de una soldadura en la línea B. El filtro de metadatos descarta la nota sobre una grieta en la línea A, aunque su texto esté igual de próximo a «defectos de soldadura».
Bases de datos vectoriales y sistemas relacionados#
- Bibliotecas de búsqueda vectorial como FAISS: índices en proceso, incluidos HNSW, IVF y cuantización de productos, sin servidor, almacenamiento de metadatos ni replicación. Varias bases de datos vectoriales se construyen sobre ellas.
- Bases de datos vectoriales específicas: Pinecone como servicio gestionado, y Milvus, Qdrant, Weaviate y Chroma como proyectos de código abierto, diseñados desde el principio en torno a las incrustaciones.
- Extensiones vectoriales como pgvector: añaden columnas vectoriales con índices HNSW e IVFFlat a PostgreSQL, para que las incrustaciones estén junto a los datos relacionales. Elasticsearch, OpenSearch, MongoDB Atlas y Redis ofrecen campos vectoriales similares junto a su búsqueda por palabras clave.
- Almacenes de características: sirven características de entrada del modelo por clave de entidad para el entrenamiento y la inferencia. Buscan registros por ID, no por similitud.
- Lagos de datos: almacenan archivos sin procesar, como imágenes y registros, a los que una base de datos vectorial hace referencia mediante un ID o una ruta.
Aplicaciones en el mundo real#
- Memoria para agentes de IA: las canalizaciones RAG y los agentes almacenan fragmentos de documentos y conversaciones anteriores para que un modelo de lenguaje grande pueda recuperarlos cuando los necesite.
- Búsqueda visual en comercio minorista: las funciones «Compra uno parecido» generan una incrustación de cada foto de producto y devuelven los artículos más cercanos al que está viendo el comprador.
- Detección de anomalías: una muestra nueva cuyos vecinos almacenados más cercanos estén todos lejos se marca como inusual; por ejemplo, una transacción o una lectura de sensor.
Las colecciones de imágenes necesitan un modelo de visión que genere los vectores. Ultralytics YOLO26 ofrece esta función mediante model.embed(), que ejecuta el modelo con cada imagen y devuelve un vector de características agrupado a partir de la penúltima capa, listo para guardarlo junto a la ruta de la imagen y los metadatos de captura para detectar casi duplicados o buscar imágenes similares. Este tipo de consulta está detrás de Buscar imágenes similares en Ultralytics Platform.
Dimensionamiento y ajuste#
La configuración del índice establece un equilibrio entre la exhaustividad y la latencia de inferencia: tanto la amplitud de búsqueda de HNSW (ef_search) como el número de grupos sondeados de IVF (nprobe) permiten encontrar más vecinos reales a costa de consultas más lentas, por lo que los equipos las ajustan comparándolas con la búsqueda exacta en consultas de muestra. La memoria determina el coste del hardware. Un millón de incrustaciones float32 de 768 dimensiones ocupan 3,07 GB (1 000 000 x 768 x 4 bytes) antes de añadir la sobrecarga del índice; la cuantización escalar int8 de los vectores reduce esa cifra a 768 MB, y las incrustaciones Matryoshka se pueden truncar a menos dimensiones para reducirla aún más.










