pgvector è un'estensione open-source di PostgreSQL che aggiunge la capacità di archiviare, indicizzare e cercare embedding vettoriali (rappresentazioni numeriche dei dati). Porta i dati vettoriali e la ricerca di similarità nello stesso sistema che contiene i dati dell'applicazione, rendendo possibile l'alimentazione della ricerca semantica, dei consigli e della generazione aumentata dal recupero (RAG) senza fare affidamento su un database vettoriale esterno. pgvector estende Postgres per supportare questi casi d'uso basati sull'IA.
Molte applicazioni AI moderne dipendono dal recupero di dati semanticamente simili, non solo da corrispondenze esatte. pgvector consente ai team di eseguire questo tipo di recupero in fase di runtime all'interno del loro stack Postgres esistente. Ad esempio, le applicazioni spesso devono recuperare contenuti che sono contestualmente simili a una query, anche se il testo è diverso. Questo approccio è spesso definito similarità del coseno, ricerca del vicino più prossimo o ricerca basata su embedding.
Questo articolo fornisce una panoramica educativa di alto livello di pgvector piuttosto che una guida dettagliata all'implementazione.
pgvector aggiunge un nuovo tipo di dati a Postgres chiamato vector. Consente di archiviare embedding, rappresentazioni numeriche di testo, immagini o altri contenuti insieme ai dati relazionali senza richiedere un sistema separato. Questi embedding sono tipicamente generati da modelli di machine learning che convertono contenuti come testo o immagini in forma numerica.
A un alto livello, il processo è semplice. Gli embedding vengono archiviati nel database. Quando viene ricevuta una query, viene generato un embedding di query dall'input e pgvector restituisce i record i cui vettori sono più simili, o più vicini nel significato, a tale query. Invece di corrispondere a parole chiave, i risultati vengono recuperati in base al significato.
pgvector determina la similarità utilizzando metriche di distanza:
pgvector include diverse funzionalità che rendono la ricerca vettoriale pratica all'interno di Postgres.
halfvec, sparsevec e bit aiutano a ridurre l'utilizzo della memoria quando si lavora con grandi set di dati di embedding.pgvector è ampiamente utilizzato per alimentare funzionalità di applicazioni basate sull'IA:
Le applicazioni possono recuperare documenti o contenuti in base al significato anziché alle parole chiave. Questo è un componente fondamentale della generazione aumentata dal recupero (RAG), in cui i grandi modelli linguistici utilizzano il contesto recuperato per generare risposte accurate e pertinenti. Poiché pgvector esegue la ricerca di similarità direttamente all'interno di Postgres, questo recupero può avvenire in tempo reale senza richiedere un sistema separato.
Gli elementi possono essere abbinati al comportamento o alle preferenze passate per supportare le raccomandazioni. Questo pattern è comunemente utilizzato per raccomandazioni di prodotti, scoperta di contenuti e personalizzazione nelle applicazioni. pgvector rende efficiente identificare elementi correlati in base a pattern nel comportamento dell'utente o nei contenuti.
Gli embedding di immagini possono essere archiviati e confrontati per trovare rapidamente immagini visivamente simili. Questo è ampiamente utilizzato nelle piattaforme multimediali, nell'e-commerce e negli strumenti creativi. L'archiviazione di questi embedding insieme ai dati dell'applicazione semplifica l'esecuzione di ricerche di similarità senza infrastrutture aggiuntive.
I punti anomali possono essere identificati trovando punti dati che sono distanti dai pattern tipici nello spazio vettoriale. Questo è utile per il rilevamento di frodi, il monitoraggio e il controllo qualità. pgvector lo abilita semplificando il confronto di vettori e il rilevamento di deviazioni.
Contenuti duplicati o quasi duplicati possono essere identificati, anche quando sono espressi in modo diverso o formattati in modi diversi. Questo è importante per la gestione dei contenuti, la qualità della ricerca e l'igiene dei dati. Il confronto basato sulla similarità rende possibile rilevare duplicati oltre le corrispondenze esatte.
Poiché la ricerca vettoriale diventa parte di più applicazioni, i team affrontano spesso una decisione pratica: la ricerca vettoriale dovrebbe rimanere all'interno di Postgres o è necessario un database vettoriale dedicato? La risposta dipende dalla scala, dai requisiti di prestazioni e dalla complessità operativa.
Le differenze possono essere riassunte attraverso dimensioni chiave:
| Strumento | Complessità Operativa | Limite di Scalabilità | Supporto Query Ibride | Costo | Maturità dell'Ecosistema |
pgvector | Più Bassa (DB Esistente) | Alto (~100M+ vettori) | Migliore (Join SQL Nativi) | Più Basso (Incluso) | Alto (Ecosistema Postgres) |
Pinecone | Bassa (Serverless/SaaS) | Più Alto (Miliardi+) | Moderato (Solo Metadati) | Alto (Basato sull'uso) | Alto (Specifico per IA) |
Weaviate | Moderata (Multi-modale) | Molto Alto | Alto (GraphQL/Vettore) | Moderato | Alto (Open-source) |
Qdrant | Moderata (Basato su Rust) | Molto Alto | Alto (Forte filtraggio) | Moderato | In rapida crescita |
pgvector è il punto di partenza naturale per i team che utilizzano già Postgres e operano al di sotto del limite di scala. Funziona bene quando la ricerca vettoriale fa parte di un flusso di lavoro applicativo esistente e i volumi di dati o le richieste di query rimangono gestibili. I database vettoriali dedicati diventano più rilevanti quando il volume delle query, i requisiti di richiamo o i carichi di lavoro multi-tenant superano ciò che Postgres può supportare in modo efficiente.
pgvectorscale è progettato per i team che desiderano estendere i propri limiti con pgvector prima di adottare un database vettoriale dedicato. Affronta le sfide di prestazioni e scalabilità che sorgono all'aumentare dei volumi di dati e delle richieste di query, in particolare per quanto riguarda la velocità di indicizzazione e la latenza delle query. Migliorando le prestazioni di pgvector su larga scala, consente ai team di continuare a utilizzare Postgres più a lungo senza riprogettare i propri sistemi. Ciò lo rende un passaggio intermedio pratico per le applicazioni che si avvicinano ai limiti di ciò che pgvector può gestire da solo.
pgvector è potente, ma presenta dei compromessi:
Comprendere queste limitazioni aiuta a determinare quando pgvector è sufficiente e quando potrebbe essere necessaria un'infrastruttura aggiuntiva.
pgvector può essere installato su macOS e sulla maggior parte delle distribuzioni Linux utilizzando gestori di pacchetti standard come Homebrew. È disponibile anche su molte piattaforme Postgres gestite, tra cui AWS RDS, Supabase, Azure Database for PostgreSQL, Google Cloud SQL e Neon.
Le istruzioni di installazione e configurazione sono disponibili nel repository GitHub ufficiale di pgvector, che include una guida passo passo mantenuta dagli autori del progetto.
I clienti Databricks che utilizzano Postgres possono anche fare riferimento alla documentazione Estensioni OLTP di Databricks per indicazioni specifiche della piattaforma.
pgvector opera nello strato di serving operativo di un sistema AI, dove è necessaria una ricerca a bassa latenza al momento dell'esecuzione dell'applicazione. Viene comunemente utilizzato per supportare la ricerca semantica, le raccomandazioni e la generazione aumentata dal recupero (RAG) all'interno delle applicazioni.
Al contrario, Databricks Mosaic AI Vector Search è più adatto per carichi di lavoro AI su larga scala, elaborati in batch, dove le pipeline di dati sono gestite nel lakehouse. Questi ambienti supportano l'elaborazione centralizzata dei dati, grandi set di dati e flussi di lavoro complessi.
Questi approcci sono complementari e i team spesso li utilizzano entrambi in diversi livelli dello stack. pgvector supporta le query delle applicazioni in tempo reale, mentre piattaforme come Databricks gestiscono la preparazione dei dati su larga scala, la generazione di embedding e i flussi di lavoro guidati dai modelli.
pgvector è un database vettoriale completo?
pgvector consente a Postgres di archiviare embedding ed eseguire ricerche di similarità direttamente su tali dati. Tuttavia, non è un database vettoriale creato appositamente. I database vettoriali dedicati offrono scalabilità e ottimizzazioni delle prestazioni aggiuntive per carichi di lavoro più grandi.
Qual è la differenza tra HNSW e IVFFlat in pgvector?
HNSW è ottimizzato per prestazioni di query rapide e utilizza una struttura di grafo in memoria, che richiede più memoria. IVFFlat ha un minore impatto sulla memoria e organizza i vettori in cluster attraverso un passaggio di addestramento, ma le prestazioni possono variare a seconda del set di dati e del carico di lavoro. La scelta dipende dalla priorità: velocità o efficienza della memoria.
Quanti vettori può gestire pgvector?
pgvector può gestire tipicamente da milioni a decine di milioni di vettori, a seconda dell'hardware, della strategia di indicizzazione e dei pattern di query. Man mano che i set di dati crescono, le prestazioni potrebbero diminuire senza un'attenta ottimizzazione o strumenti aggiuntivi. Fattori come la memoria disponibile, il tipo di indice e la frequenza delle query influenzano la scalabilità.
pgvector supporta la similarità del coseno?
Sì, pgvector supporta la similarità del coseno come una delle sue metriche di distanza principali. Misura quanto strettamente due vettori puntano nella stessa direzione, il che spesso riflette la similarità semantica nelle applicazioni basate su embedding. Ciò lo rende adatto per la ricerca semantica, i sistemi di raccomandazione e l'elaborazione del linguaggio naturale.
pgvector è gratuito e open source?
Sì, pgvector è un progetto open-source rilasciato sotto una licenza permissiva. Può essere utilizzato con installazioni Postgres standard, nonché con molti servizi Postgres gestiti. Ciò lo rende un punto di partenza accessibile per aggiungere funzionalità di ricerca vettoriale.
pgvector può eseguire la ricerca ibrida?
Sì, pgvector può essere combinato con la ricerca full-text di Postgres per supportare la ricerca ibrida. Ciò consente ai risultati di bilanciare la pertinenza semantica con la corrispondenza delle parole chiave, migliorando sia l'accuratezza che l'usabilità. La ricerca ibrida è particolarmente utile in scenari come la ricerca di prodotti e la ricerca di documentazione, dove sia il significato che i termini esatti sono importanti.
pgvector è un punto di partenza pratico per qualsiasi team che desideri aggiungere la ricerca vettoriale a un'applicazione Postgres esistente. Memorizzando gli embedding accanto ai dati relazionali e supportando la ricerca di similarità nativamente all'interno del database, elimina l'overhead operativo della gestione di un archivio vettoriale separato. Per molti carichi di lavoro — ricerca semantica, pipeline RAG, raccomandazioni e rilevamento delle anomalie — offre ciò di cui i team hanno bisogno senza richiedere un nuovo sistema.
Man mano che i volumi di dati crescono o le richieste di query aumentano, pgvector scale può estendere fino a dove i team possono arrivare prima che diventi necessario un database vettoriale dedicato. Per le organizzazioni che gestiscono carichi di lavoro AI su larga scala attraverso una piattaforma dati unificata, Databricks Mosaic AI Vector Search offre un approccio complementare progettato per lo strato del lakehouse. Insieme, questi strumenti offrono ai team la flessibilità di adattare la loro infrastruttura di ricerca vettoriale ai loro effettivi requisiti di carico di lavoro, a qualsiasi scala.
(Questo post sul blog è stato tradotto utilizzando strumenti basati sull'intelligenza artificiale) Post originale
