pgvector es una extensión de código abierto de PostgreSQL que añade la capacidad de almacenar, indexar y buscar embeddings vectoriales (representaciones numéricas de datos). Integra datos vectoriales y búsqueda de similitud en el mismo sistema que contiene los datos de la aplicación, lo que permite potenciar la búsqueda semántica, las recomendaciones y la generación aumentada por recuperación (RAG) sin depender de una base de datos vectorial externa. pgvector amplía Postgres para soportar estos casos de uso impulsados por IA.
Muchas aplicaciones modernas de IA dependen de la recuperación de datos semánticamente similares, no solo de coincidencias exactas. pgvector permite a los equipos realizar este tipo de recuperación en tiempo de ejecución dentro de su pila de Postgres existente. Por ejemplo, las aplicaciones a menudo necesitan recuperar contenido que sea contextualmente similar a una consulta, incluso si la redacción es diferente. Este enfoque a menudo se denomina similitud del coseno, búsqueda del vecino más cercano o búsqueda basada en embeddings.
Este artículo proporciona una visión general educativa de alto nivel de pgvector en lugar de una guía de implementación detallada.
pgvector añade un nuevo tipo de dato a Postgres llamado vector. Permite almacenar embeddings, representaciones numéricas de texto, imágenes u otro contenido junto con datos relacionales sin necesidad de un sistema separado. Estos embeddings suelen ser generados por modelos de machine learning que convierten contenido como texto o imágenes en formato numérico.
A un alto nivel, el proceso es sencillo. Los embeddings se almacenan en la base de datos. Cuando se recibe una consulta, se genera un embedding de consulta a partir de la entrada, y pgvector devuelve los registros cuyos vectores son más similares, o más cercanos en significado, a esa consulta. En lugar de coincidir con palabras clave, los resultados se recuperan basándose en el significado.
pgvector determina la similitud utilizando métricas de distancia:
pgvector incluye varias características que hacen que la búsqueda vectorial sea práctica dentro de Postgres.
halfvec, sparsevec y bit ayudan a reducir el uso de memoria al trabajar con grandes conjuntos de datos de embeddings.pgvector se utiliza ampliamente para potenciar características de aplicaciones impulsadas por IA:
Las aplicaciones pueden recuperar documentos o contenido basándose en el significado en lugar de palabras clave. Este es un componente central de la generación aumentada por recuperación (RAG), donde los modelos de lenguaje grandes utilizan el contexto recuperado para generar respuestas precisas y relevantes. Dado que pgvector ejecuta la búsqueda de similitud directamente dentro de Postgres, esta recuperación puede ocurrir en tiempo real sin necesidad de un sistema separado.
Los artículos se pueden emparejar con el comportamiento o las preferencias pasadas para soportar recomendaciones. Este patrón se utiliza comúnmente para recomendaciones de productos, descubrimiento de contenido y personalización en aplicaciones. pgvector hace que sea eficiente identificar artículos relacionados basándose en patrones en el comportamiento del usuario o en el contenido.
Los embeddings de imágenes se pueden almacenar y comparar para encontrar rápidamente imágenes visualmente similares. Esto se utiliza ampliamente en plataformas de medios, comercio electrónico y herramientas creativas. Almacenar estos embeddings junto con los datos de la aplicación facilita la ejecución de búsquedas de similitud sin infraestructura adicional.
Se pueden identificar valores atípicos encontrando puntos de datos que están distantes de los patrones típicos en el espacio vectorial. Esto es útil para la detección de fraudes, la monitorización y el control de calidad. pgvector lo permite al facilitar la comparación de vectores y la detección de desviaciones.
Se puede identificar contenido duplicado o casi duplicado, incluso cuando se expresa de manera diferente o se formatea de distintas maneras. Esto es importante para la gestión de contenido, la calidad de la búsqueda y la higiene de los datos. La comparación basada en similitud hace posible detectar duplicados más allá de las coincidencias exactas.
A medida que la búsqueda vectorial se integra en más aplicaciones, los equipos a menudo se enfrentan a una decisión práctica: ¿debería la búsqueda vectorial permanecer dentro de Postgres, o se necesita una base de datos vectorial dedicada? La respuesta depende de la escala, los requisitos de rendimiento y la complejidad operativa.
Las diferencias se pueden resumir en dimensiones clave:
| Herramienta | Complejidad Operativa | Límite de Escalabilidad | Soporte de Consultas Híbridas | Costo | Madurez del Ecosistema |
pgvector | Más bajo (DB Existente) | Alto (~100M+ vectores) | Mejor (Uniones SQL Nativas) | Más bajo (Incluido) | Alto (Ecosistema Postgres) |
Pinecone | Bajo (Serverless/SaaS) | Más alto (Miles de millones+) | Moderado (Solo metadatos) | Alto (Basado en uso) | Alto (Específico de IA) |
Weaviate | Moderado (Multimodal) | Muy Alto | Alto (GraphQL/Vector) | Moderado | Alto (Código abierto) |
Qdrant | Moderado (Basado en Rust) | Muy Alto | Alto (Intensivo en filtrado) | Moderado | Creciendo Rápido |
pgvector es el punto de partida natural para los equipos que ya utilizan Postgres y operan por debajo del límite de escala. Funciona bien cuando la búsqueda vectorial es parte de un flujo de trabajo de aplicación existente y los volúmenes de datos o las demandas de consulta se mantienen manejables. Las bases de datos vectoriales dedicadas se vuelven más relevantes cuando el volumen de consultas, los requisitos de recuperación o las cargas de trabajo multi-inquilino superan lo que Postgres puede soportar de manera eficiente.
pgvectorscale está diseñado para equipos que desean ampliar hasta dónde pueden llegar con pgvector antes de adoptar una base de datos vectorial dedicada. Aborda los desafíos de rendimiento y escalabilidad que surgen a medida que aumentan los volúmenes de datos y las demandas de consulta, particularmente en torno a la velocidad de indexación y la latencia de las consultas. Al mejorar el rendimiento de pgvector a escalas mayores, permite a los equipos seguir utilizando Postgres durante más tiempo sin reestructurar sus sistemas. Esto lo convierte en un paso intermedio práctico para las aplicaciones que se acercan a los límites de lo que pgvector puede manejar por sí solo.
pgvector es potente, pero tiene sus contrapartidas:
Comprender estas limitaciones ayuda a determinar cuándo pgvector es suficiente y cuándo puede ser necesaria infraestructura adicional.
pgvector se puede instalar en macOS y la mayoría de las distribuciones de Linux utilizando gestores de paquetes estándar como Homebrew. También está disponible en muchas plataformas Postgres administradas, incluidas AWS RDS, Supabase, Azure Database for PostgreSQL, Google Cloud SQL y Neon.
Las instrucciones de instalación y configuración están disponibles en el repositorio oficial de GitHub de pgvector, que incluye una guía paso a paso mantenida por los autores del proyecto.
Los clientes de Databricks que usan Postgres también pueden consultar la documentación de extensiones OLTP de Databricks para obtener orientación específica de la plataforma.
pgvector opera en la capa de servicio operacional de un sistema de IA, donde se requiere baja latencia de recuperación en tiempo de ejecución de la aplicación. Se usa comúnmente para admitir búsqueda semántica, recomendaciones y generación aumentada por recuperación (RAG) dentro de las aplicaciones.
En contraste, Databricks Mosaic AI Vector Search es más adecuado para cargas de trabajo de IA a gran escala procesadas por lotes, donde las canalizaciones de datos se administran en el lakehouse. Estos entornos admiten el procesamiento de datos centralizado, grandes conjuntos de datos y flujos de trabajo complejos.
Estos enfoques son complementarios, y los equipos a menudo usan ambos en diferentes capas del stack. pgvector admite consultas de aplicaciones en tiempo real, mientras que plataformas como Databricks manejan la preparación de datos a gran escala, la generación de incrustaciones y los flujos de trabajo dirigidos por modelos.
¿Es pgvector una base de datos vectorial completa?
pgvector permite a Postgres almacenar incrustaciones y realizar búsquedas de similitud directamente sobre esos datos. Sin embargo, no es una base de datos vectorial diseñada específicamente para ese fin. Las bases de datos vectoriales dedicadas proporcionan escalabilidad y optimizaciones de rendimiento adicionales para cargas de trabajo más grandes.
¿Cuál es la diferencia entre HNSW e IVFFlat en pgvector?
HNSW está optimizado para un rendimiento de consulta rápido y utiliza una estructura de grafo en memoria, que requiere más memoria. IVFFlat tiene una menor huella de memoria y organiza los vectores en clústeres a través de un paso de entrenamiento, pero el rendimiento puede variar según el conjunto de datos y la carga de trabajo. La elección depende de si la prioridad es la velocidad o la eficiencia de la memoria.
¿Cuántos vectores puede manejar pgvector?
pgvector puede manejar típicamente desde millones hasta decenas de millones de vectores, dependiendo del hardware, la estrategia de indexación y los patrones de consulta. A medida que los conjuntos de datos crecen, el rendimiento puede disminuir sin una sintonización cuidadosa o herramientas adicionales. Factores como la memoria disponible, el tipo de índice y la frecuencia de consulta influyen en la escalabilidad.
¿pgvector admite la similitud coseno?
Sí, pgvector admite la similitud coseno como una de sus métricas de distancia principales. Mide cuán cerca apuntan dos vectores en la misma dirección, lo que a menudo refleja la similitud semántica en aplicaciones basadas en incrustaciones. Esto lo hace muy adecuado para la búsqueda semántica, los sistemas de recomendación y el procesamiento del lenguaje natural.
¿Es pgvector gratuito y de código abierto?
Sí, pgvector es un proyecto de código abierto lanzado bajo una licencia permisiva. Se puede usar con instalaciones Postgres estándar, así como con muchos servicios Postgres administrados. Esto lo convierte en un punto de partida accesible para agregar capacidades de búsqueda vectorial.
¿Puede pgvector realizar búsqueda híbrida?
Sí, pgvector se puede combinar con la búsqueda de texto completo de Postgres para admitir la búsqueda híbrida. Esto permite que los resultados equilibren la relevancia semántica con la coincidencia de palabras clave, mejorando tanto la precisión como la usabilidad. La búsqueda híbrida es especialmente útil en escenarios como la búsqueda de productos y la búsqueda de documentación, donde tanto el significado como los términos exactos son importantes.
pgvector es un punto de partida práctico para cualquier equipo que desee agregar búsqueda vectorial a una aplicación Postgres existente. Al almacenar incrustaciones junto con datos relacionales y admitir la búsqueda de similitud de forma nativa dentro de la base de datos, elimina la sobrecarga operativa de administrar un almacén vectorial separado. Para muchas cargas de trabajo —búsqueda semántica, canalizaciones RAG, recomendaciones y detección de anomalías— proporciona lo que los equipos necesitan sin requerir un nuevo sistema.
A medida que los volúmenes de datos crecen o aumentan las demandas de consulta, pgvectorscale puede extender hasta dónde pueden llegar los equipos antes de que sea necesaria una base de datos vectorial dedicada. Para las organizaciones que administran cargas de trabajo de IA a gran escala en una plataforma de datos unificada, Databricks Mosaic AI Vector Search ofrece un enfoque complementario diseñado para la capa del lakehouse. Juntas, estas herramientas brindan a los equipos la flexibilidad de adaptar su infraestructura de búsqueda vectorial a sus requisitos de carga de trabajo reales, a cualquier escala.
(Esta entrada del blog ha sido traducida utilizando herramientas basadas en inteligencia artificial) Publicación original
