pgvector est une extension open-source pour le système de gestion de base de données relationnelle PostgreSQL qui ajoute la prise en charge de la recherche de similarité vectorielle. Elle permet aux utilisateurs de stocker des vecteurs d'embeddings de haute dimension directement dans les tables PostgreSQL et d'effectuer des requêtes efficaces de plus proches voisins pour trouver des enregistrements sémantiquement similaires. L'extension a été publiée pour la première fois en avril 2021 et est depuis devenue un outil largement adopté pour intégrer la recherche vectorielle dans les flux de travail de bases de données existants, en particulier dans les applications impliquant intelligence artificielle et apprentissage automatique.
L'extension implémente des algorithmes de plus proches voisins approximatifs, notamment les graphes Hierarchical Navigable Small World (HNSW) et les fichiers inversés avec quantification de produit (IVFFlat), pour permettre des recherches de similarité rapides sur de grandes collections de vecteurs. En tirant parti de l'infrastructure transactionnelle et d'indexation mature de PostgreSQL, pgvector fournit une interface SQL familière pour les développeurs qui doivent combiner la récupération vectorielle avec des requêtes relationnelles traditionnelles, le filtrage de métadonnées et les flux de travail de recherche hybride.
Architecture et fonctionnalités
pgvector fonctionne comme une extension native de PostgreSQL, ce qui signifie qu'elle s'intègre directement avec le moteur de base de données plutôt que de fonctionner comme un service séparé. Elle introduit un nouveau type de données vector qui peut stocker des tableaux de nombres à virgule flottante avec des dimensions configurables, généralement allant de quelques centaines à plusieurs milliers. L'extension prend en charge à la fois la recherche de plus proches voisins exacte et approximative, cette dernière utilisant soit des graphes HNSW, soit l'indexation IVFFlat pour équilibrer la vitesse de recherche et la précision de rappel.
Un principe de conception clé de pgvector est sa compatibilité avec les opérations SQL standard. Les utilisateurs peuvent créer des colonnes vectorielles, insérer des embeddings générés par des modèles de apprentissage profond et les interroger en utilisant des opérateurs familiers tels que <-> pour la distance euclidienne, <=> pour la distance cosinus et <#> pour le produit scalaire négatif. L'extension prend également en charge l'indexation sur les colonnes vectorielles pour accélérer les requêtes, et elle peut être combinée avec les fonctionnalités intégrées de PostgreSQL comme les index partiels, l'exécution parallèle des requêtes et la réplication pour une haute disponibilité.
Génération augmentée par récupération
L'un des cas d'utilisation les plus courants pour pgvector est dans les pipelines de génération augmentée par récupération (RAG), qui améliorent les réponses des grands modèles de langage avec des connaissances spécifiques à un domaine. Dans une configuration RAG typique, les documents texte sont divisés en morceaux, chaque morceau est converti en un embedding à l'aide d'un modèle de réseau neuronal, et les vecteurs résultants sont stockés dans une table PostgreSQL compatible pgvector. Lorsqu'un utilisateur soumet une invite, le système calcule l'embedding de l'invite, interroge pgvector pour les morceaux de documents les plus similaires et transmet ces morceaux comme contexte supplémentaire au modèle de langage.
Cette approche permet aux organisations de construire des systèmes de questions-réponses, des chatbots et des assistants de connaissances qui s'appuient sur des informations propriétaires ou à jour sans réentraîner le modèle sous-jacent. La capacité de pgvector à gérer le filtrage de métadonnées en parallèle de la recherche vectorielle est particulièrement précieuse dans le RAG, car elle permet d'appliquer des contraintes telles que les plages de dates, les types de documents ou les permissions d'accès pendant la récupération.
Comparaison avec les bases de données vectorielles dédiées
pgvector concurrence les systèmes de bases de données vectorielles spécialisés tels que Milvus, Pinecone et Weaviate, ainsi que les capacités de recherche vectorielle offertes par les fournisseurs de cloud comme Amazon Web Services, Azure et Google Cloud. Contrairement à ces systèmes autonomes, pgvector ne nécessite pas le déploiement d'un composant d'infrastructure séparé ; elle fonctionne au sein d'une instance PostgreSQL existante, que de nombreuses organisations exploitent déjà pour leur stockage de données principal. Cela réduit la complexité opérationnelle et permet d'effectuer la recherche vectorielle dans la même base de données qui contient les données sources, éliminant ainsi le besoin de synchronisation des données entre les systèmes.
Cependant, les bases de données vectorielles dédiées offrent souvent des fonctionnalités supplémentaires que pgvector ne possède pas, telles que la prise en charge intégrée du partitionnement distribué, des techniques de quantification plus sophistiquées ou une intégration plus étroite avec des écosystèmes de modèles d'embedding spécifiques. Pour les déploiements à très grande échelle dépassant des milliards de vecteurs, un système spécialisé peut offrir de meilleures performances ou une meilleure évolutivité. Néanmoins, la simplicité de pgvector et son couplage étroit avec SQL en ont fait un choix populaire pour les startups et les entreprises qui privilégient la facilité d'utilisation et la cohérence des données.
Adoption et écosystème
L'extension a gagné une traction significative depuis son introduction. Elle est maintenue par la communauté PostgreSQL et est disponible via les gestionnaires de paquets standard pour les principales distributions Linux et macOS. Plusieurs fournisseurs de PostgreSQL gérés, notamment Amazon Web Services RDS, Google Cloud SQL et Azure Database pour PostgreSQL, proposent pgvector comme extension prise en charge, la rendant accessible aux utilisateurs qui préfèrent ne pas auto-héberger leur base de données.
pgvector est souvent utilisée en conjonction avec des modèles d'embedding d'organisations telles que OpenAI, Anthropic et Google DeepMind, ainsi qu'avec des modèles open-source comme ceux des familles BERT et GPT. La documentation de l'extension fournit des exemples pour générer des embeddings et effectuer des recherches de similarité dans des langages de programmation populaires, notamment Python, JavaScript et Go. Ce support de l'écosystème a contribué à son adoption dans des domaines allant des moteurs de recommandation de commerce électronique à la recherche scientifique et aux applications de recherche en entreprise.
Limitations et considérations
Bien que pgvector soit un outil puissant, elle présente certaines limitations dont les utilisateurs doivent être conscients. L'extension ne prend pas en charge toutes les opérations vectorielles nativement ; par exemple, elle ne dispose pas de fonctions intégrées pour l'arithmétique vectorielle ou le clustering, qui sont disponibles dans certaines bases de données vectorielles dédiées. Les performances de la recherche de plus proches voisins approximative dépendent fortement des paramètres d'index choisis, tels que le nombre de listes dans IVFFlat ou les valeurs M et ef_construction dans HNSW, et le réglage de ces paramètres nécessite une expérimentation avec l'ensemble de données spécifique.
De plus, pgvector stocke les vecteurs dans une colonne d'une table, ce qui signifie que de très grandes collections de vecteurs peuvent consommer un espace de stockage significatif. L'extension n'implémente pas par défaut des techniques de compression avancées comme la quantification de produit, bien que les utilisateurs puissent réduire la dimensionnalité ou utiliser la quantification binaire manuellement. Pour les charges de travail qui nécessitent l'ingestion en temps réel de millions de vecteurs par jour, la surcharge de maintenance des index dans une base de données transactionnelle peut devenir un goulot d'étranglement, incitant certains utilisateurs à décharger la recherche vectorielle vers un système dédié tout en conservant PostgreSQL comme système de référence.
Voir aussi
- Recherche de plus proches voisins - Problème d'optimisation en informatique
- Apprentissage automatique - Sous-ensemble de l'intelligence artificielle
- Apprentissage profond - Classe de techniques d'apprentissage automatique
- Grand modèle de langage - Modèle d'IA pour la génération de texte