pgvector - Extensión de PostgreSQL para la búsqueda de similitud de vectores
Resumen del proyecto
pgvector es una extensión de código abierto para PostgreSQL que añade soporte para operaciones con vectores y búsqueda de similitud a la base de datos PostgreSQL. No es solo una solución de almacenamiento, sino un motor de búsqueda de vectores completo diseñado para el rendimiento y la facilidad de uso.
Dirección del proyecto: https://github.com/pgvector/pgvector
Características principales
1. Almacenamiento y gestión de vectores
- Soporte para tipos de datos vectoriales: PostgreSQL nativamente no tiene funcionalidades vectoriales (hasta PostgreSQL 16), pgvector está diseñado específicamente para llenar este vacío.
- Almacenamiento de vectores de alta dimensión: Soporta el almacenamiento y la gestión de datos vectoriales de alta dimensión.
- Soporte para vectores dispersos: Los vectores dispersos pueden tener hasta 16,000 elementos distintos de cero.
2. Búsqueda de similitud de vectores
- Múltiples algoritmos de similitud: Soporta la búsqueda de similitud basada en métricas de similitud de vectores como la similitud coseno o la distancia euclidiana.
- Búsqueda precisa y aproximada: Por defecto, pgvector realiza una búsqueda precisa del vecino más cercano, proporcionando una recuperación perfecta. Puedes añadir índices para usar la búsqueda aproximada del vecino más cercano, lo que sacrifica algo de recuperación a cambio de velocidad.
3. Indexación y optimización del rendimiento
- Indexación eficiente: Proporciona mecanismos de indexación de vectores especializados, optimizando el rendimiento de las consultas.
- Integración SQL: Proporciona soporte para la búsqueda de similitud de vectores y la búsqueda del vecino más cercano en SQL.
- Operadores de función de distancia: Soporta múltiples operadores de función de distancia para recuperar vectores y calcular la similitud.
Principales casos de uso
1. Aplicaciones de aprendizaje automático e IA
- Almacenamiento de incrustaciones vectoriales: Se puede utilizar para almacenar vectores de incrustación, especialmente adecuado para aplicaciones que involucran el procesamiento del lenguaje natural, como las aplicaciones construidas sobre el modelo GPT de OpenAI.
- Búsqueda semántica: Soporta la búsqueda de documentos y contenido basada en la similitud semántica.
2. Sistemas de recomendación
- Recomendación de contenido: Facilita aplicaciones como los sistemas de recomendación basados en contenido.
- Coincidencia de similitud: Realiza una coincidencia precisa de contenido a través de la similitud de vectores.
3. Generación aumentada por recuperación (RAG)
- Recuperación de documentos: Incrusta documentos utilizando el modelo de incrustación de texto de OpenAI y utiliza la similitud coseno para encontrar los documentos más similares a una consulta dada.
- Consulta de base de conocimiento: Construye sistemas inteligentes de preguntas y respuestas y aplicaciones de recuperación de conocimiento.
Implementación técnica
Instalación y configuración
CREATE EXTENSION vector;
Ejemplo de uso básico
CREATE TABLE items (
id SERIAL PRIMARY KEY,
embedding VECTOR(3)
);
INSERT INTO items (embedding) VALUES
('[1,2,3]'),
('[4,5,6]'),
('[7,8,9]');
SELECT * FROM items
ORDER BY embedding <-> '[3,1,2]'
LIMIT 5;
Operadores de distancia
<->
- Distancia L2 (Distancia euclidiana)
<#>
- Producto interno negativo
<=>
- Distancia coseno
Integración del ecosistema
Soporte de plataforma en la nube
- Supabase: Proporciona soporte nativo para pgvector.
- Azure Database for PostgreSQL: Soporta la extensión pgvector.
- Neon: Proporciona soporte completo para las funcionalidades de pgvector.
Integración del framework de desarrollo
- LangChain: Proporciona una implementación de abstracción de almacenamiento de vectores LangChain que utiliza postgres como backend y aprovecha la extensión pgvector.
- Soporte de Docker: Proporciona imágenes oficiales de Docker para facilitar la implementación.
Ventajas y características
1. Código abierto y escalabilidad
- Completamente de código abierto, desarrollo impulsado por la comunidad.
- Perfecta integración con el ecosistema PostgreSQL.
- Soporta la extensión SQL distribuida.
2. Rendimiento y fiabilidad
- Basado en el sistema de base de datos PostgreSQL maduro.
- Proporciona soporte para transacciones ACID.
- Indexación de vectores eficiente y optimización de consultas.
3. Facilidad de uso
- Interfaz SQL estándar, bajo coste de aprendizaje.
- Amplia documentación y soporte de la comunidad.
- Compatible con las herramientas y el ecosistema PostgreSQL existentes.
Resumen
pgvector es una parte importante del ecosistema PostgreSQL, que combina la potente funcionalidad de las bases de datos relacionales tradicionales con las modernas necesidades de búsqueda de vectores de las aplicaciones de IA. Ya sea para construir sistemas de recomendación, motores de búsqueda semántica o implementar complejas aplicaciones de aprendizaje automático, pgvector proporciona una solución potente, flexible y fácil de usar. Su naturaleza de código abierto y su profunda integración con PostgreSQL lo convierten en una opción ideal para aplicaciones de IA de nivel empresarial.