HNSWlib vs Voyager: scegliere lo strumento di ricerca vettoriale giusto per la tua applicazione GenAI
La ricerca vettoriale è fondamentale nelle applicazioni di IA in cui trovare somiglianze tra punti dati ad alta dimensionalità è l’obiettivo principale. Strumenti come HNSWlib e Voyager sono progettati per eseguire in modo efficiente ricerche dei vicini più prossimi, così che i sistemi possano recuperare rapidamente elementi correlati da grandi dataset. Mentre HNSWlib ha guadagnato popolarità per la sua velocità e accuratezza, Voyager è l’ultima aggiunta di Spotify per affrontare le limitazioni di HNSWlib.
Questo post confronta i due, spiegandone le funzionalità e i punti di forza e in cosa differiscono, così puoi decidere quale sia migliore per il tuo progetto.
Che cos’è la ricerca vettoriale?
Prima di entrare nei dettagli di HNSWlib e Voyager, è essenziale comprendere la ricerca vettoriale. In parole semplici, la ricerca vettoriale, o ricerca di similarità vettoriale, trova i vettori (punti dati) più vicini in uno spazio ad alta dimensionalità rispetto a un dato vettore di query. Questi vettori sono spesso generati da modelli di machine learning per catturare l’essenza dei dati non strutturati (ad esempio, il significato di una frase o le caratteristiche di un’immagine).
A differenza dei database tradizionali, in cui le ricerche si basano su corrispondenze esatte o filtri, la ricerca vettoriale si concentra sulla similarità. L’obiettivo è trovare vettori che siano "vicini" tra loro in base a una metrica di distanza (come la distanza euclidea o la similarità del coseno). Ad esempio, i vettori possono rappresentare parole o frasi nell’elaborazione del linguaggio naturale (NLP), e la ricerca vettoriale aiuta a trovare le parole o i testi semanticamente più simili. Nei sistemi di raccomandazione, la ricerca vettoriale identifica gli elementi più vicini alle preferenze di un utente. Le ricerche vettoriali svolgono anche un ruolo cruciale nella retrieval augmented generation (RAG), una tecnica che arricchisce l’output dei large language models (LLMs) fornendo loro informazioni contestuali aggiuntive.
Sul mercato sono disponibili molte soluzioni per eseguire ricerche vettoriali, tra cui:
- Librerie di ricerca vettoriale come HNSWlib e Voyager.
- Database vettoriali purpose-built come Milvus, Zilliz Cloud (Milvus completamente gestito)
- Database vettoriali leggeri come Chroma e Milvus Lite.
- Database tradizionali con componenti aggiuntivi per la ricerca vettoriale
Che cos’è HNSWlib? Panoramica
HNSWlib è una libreria open-source per la ricerca approssimata dei vicini più prossimi (ANNS). È basata sull’algoritmo Hierarchical Navigable Small World (HNSW), che forma una struttura basata su grafo in cui i punti dati sono nodi. L’algoritmo naviga questo grafo per trovare rapidamente vicini approssimati, rendendo HNSWlib molto efficiente per la ricerca vettoriale.
Funzionalità e punti di forza di HNSWlib
- Algoritmo HNSW: Il cuore della potenza di HNSWlib è l’algoritmo HNSW, che utilizza una struttura a grafo multilivello per navigare tra i punti dati in base alla loro prossimità e trovare i vicini più prossimi.
- Velocità e accuratezza: HNSWlib è noto per bilanciare velocità e accuratezza. Fornisce risultati rapidi senza una perdita significativa di precisione, il che è utile per casi d’uso che richiedono risultati di alta qualità per i vicini più prossimi.
- Efficienza della memoria: HNSWlib ha un basso consumo di memoria pur essendo in grado di elaborare dataset di grandi dimensioni, il che è positivo per applicazioni con memoria limitata.
- Scalabilità: HNSWlib scala bene su dataset con milioni di voci, adatto sia per applicazioni piccole sia grandi.
- Flessibilità: La libreria consente di regolare parametri di ricerca come precisione e recall per ottimizzarli in base al proprio caso d’uso.
HNSWlib è diventata la scelta di riferimento per le attività di ricerca ANN grazie alla sua velocità, flessibilità e affidabilità.
Che cos’è Voyager? Panoramica
Voyager è la più recente libreria di Spotify per la ricerca dei vicini più prossimi, sviluppata dopo un ampio utilizzo di HNSWlib e l’individuazione di aree di miglioramento. Sebbene sia basata sull’algoritmo HNSW come HNSWlib, Voyager presenta diverse ottimizzazioni e funzionalità aggiuntive che la rendono più adatta agli ambienti di produzione.
Funzionalità e punti di forza di Voyager
- Più veloce e più accurata: Voyager si basa sulla velocità e sull’accuratezza di HNSWlib, ma le porta oltre, con una ricerca più veloce e in alcuni casi una precisione ancora maggiore, soprattutto per applicazioni complesse su larga scala.
- Efficienza della memoria: Voyager utilizza la rappresentazione in virgola mobile a 8 bit E4M3, che le consente di gestire dati ad alta dimensionalità con un minore utilizzo di memoria rispetto a HNSWlib durante la creazione dell’indice.
- Multithreading e scalabilità: Voyager supporta la creazione e l’interrogazione degli indici completamente multithread per gestire dataset più grandi rispetto a HNSWlib, soprattutto in ambienti distribuiti o cloud.
- Supporto linguistico: Mentre HNSWlib è principalmente una libreria Python, Voyager supporta sia Python sia Java, rendendola più flessibile per ambienti di produzione che richiedono il supporto di più linguaggi.
- Pronta per la produzione: Voyager è progettata per l’uso aziendale, con funzionalità come file di indice fault-tolerant, rilevamento della corruzione e integrazione con Google Cloud, rendendola più robusta e scalabile per applicazioni ad alto traffico.
Voyager prende la solida base di HNSWlib e la migliora con funzionalità che la rendono più adatta ai sistemi moderni su larga scala.
Differenze chiave tra HNSWlib e Voyager
Metodo di ricerca
Sia HNSWlib sia Voyager utilizzano l’algoritmo HNSW, noto per la sua velocità e accuratezza nelle ricerche dei vicini più prossimi. Tuttavia, Voyager dispone di ottimizzazioni che la rendono più veloce e più efficiente in termini di memoria rispetto a HNSWlib. Ad esempio, la creazione multithread degli indici di Voyager può elaborare dataset di grandi dimensioni più rapidamente, e la sua gestione ottimizzata della memoria riduce il consumo di risorse, rendendola più adatta alle applicazioni aziendali.
Dati
Entrambi gli strumenti gestiscono dati vettoriali ad alta dimensionalità, ma Voyager dispone di più funzionalità che la rendono più adatta ad ambienti cloud-based su larga scala. Il supporto di Voyager per lo streaming di dati da Google Cloud Services e i file di indice fault-tolerant la rendono più affidabile per i sistemi distribuiti. HNSWlib è adatta per configurazioni locali o applicazioni più piccole, ma manca delle funzionalità avanzate di gestione dei dati che rendono Voyager più versatile per ambienti complessi.
Scalabilità e prestazioni
HNSWlib è già scalabile e funziona bene per la maggior parte dei casi d’uso. Ma Voyager dispone del multithreading, che le offre un vantaggio quando si lavora con dataset più grandi o ambienti in cui è necessaria l’elaborazione parallela. Voyager può creare e interrogare indici in parallelo, riducendo il tempo di elaborazione dei sistemi su larga scala. Inoltre, le sue ottimizzazioni della memoria, come la rappresentazione in virgola mobile a 8 bit, le consentono di gestire dataset più grandi con meno memoria, rendendola più efficiente nell’uso delle risorse rispetto a HNSWlib.
Flessibilità e personalizzazione
Entrambe le librerie sono flessibili per quanto riguarda i parametri di ricerca, ma Voyager offre una maggiore personalizzazione per l’uso in produzione. Supporta Python e Java, che possono essere integrati in più ambienti. Inoltre, le sue funzionalità basate sul cloud, come l’integrazione con Google Cloud e la tolleranza ai guasti, lo rendono più adatto alle moderne applicazioni su larga scala. HNSWlib è flessibile, ma manca di alcune di queste funzionalità avanzate ed è più limitato negli ambienti in cui tali funzionalità sono necessarie.
Integrazione ed ecosistema
HNSWlib è progettato per essere integrato nei flussi di lavoro basati su Python, quindi è adatto alle pipeline di machine learning e alle applicazioni più piccole. Tuttavia, non dispone delle più ampie capacità di integrazione di Voyager. Voyager supporta Python, Java e l’integrazione con Google Cloud, quindi è più versatile nelle distribuzioni a livello enterprise. Voyager può gestire sistemi distribuiti e ambienti basati sul cloud, rendendolo una soluzione più completa per le organizzazioni con esigenze infrastrutturali complesse.
Facilità d’uso
HNSWlib è facile da usare e configurare, soprattutto per gli utenti Python. È adatto a chi desidera una libreria semplice e senza fronzoli per la ricerca ANN. Voyager offre funzionalità più avanzate, ma una curva di apprendimento leggermente più ripida a causa di multithreading, tolleranza ai guasti e integrazione cloud. Tuttavia, il suo design pronto per la produzione e l’ampia documentazione sia per Python sia per Java lo rendono più facile da integrare in sistemi più grandi e complessi.
Costi
Entrambe sono open source e gratuite da usare. Tuttavia, l’efficienza in termini di memoria e il multithreading di Voyager possono ridurre il consumo di risorse nelle distribuzioni su larga scala o basate sul cloud, portando a risparmi sui costi. La decisione in questo caso dipenderebbe dal fatto che la velocità aggiuntiva, l’efficienza della memoria e le funzionalità di Voyager valgano la maggiore complessità o il costo dell’infrastruttura.
Sicurezza
Né HNSWlib né Voyager dispongono di funzionalità di sicurezza integrate come crittografia o controllo degli accessi, quindi queste devono essere implementate separatamente. Tuttavia, i file di indice tolleranti ai guasti e il rilevamento della corruzione di Voyager lo rendono più affidabile per ambienti critici per l’integrità dei dati.
Quando scegliere HNSWlib
HNSWlib è un’ottima scelta se:
- Hai bisogno di uno strumento di ricerca ANN rapido e accurato per applicazioni su scala più ridotta.
- Il tuo progetto è basato su Python e non richiede il supporto Java.
- Stai lavorando in un ambiente locale o con dataset più piccoli in cui la tolleranza ai guasti avanzata e le funzionalità cloud non sono necessarie.
- Vuoi una soluzione semplice e facile da implementare con overhead minimo.
Quando scegliere Voyager
Voyager è più adatto se:
- Hai bisogno di una soluzione pronta per la produzione con supporto sia per Python sia per Java.
- Il tuo progetto coinvolge dataset su larga scala e richiede elaborazione multithread per una creazione dell’indice e interrogazioni più rapide.
- Hai bisogno di efficienza della memoria per gestire dati ad alta dimensionalità in ambienti con risorse limitate.
- La tua infrastruttura include ambienti basati sul cloud; hai bisogno di funzionalità come integrazione con Google Cloud e file di indice tolleranti ai guasti.
- Richiedi personalizzazione avanzata e uno strumento ottimizzato per distribuzioni a livello enterprise.
In definitiva, la scelta tra HNSWlib e Voyager dipende dai requisiti specifici del tuo progetto. Entrambi gli strumenti offrono prestazioni elevate, ma la tua scelta dovrebbe essere in linea con la scala e la complessità della tua applicazione e con le risorse e l’infrastruttura di cui disponi.
Confronto tra librerie di ricerca vettoriale e database vettoriali appositamente progettati
Sia le librerie di ricerca vettoriale come HNSWlib e Voyager sia i database vettoriali appositamente progettati come Milvus mirano a risolvere il problema della ricerca di similarità per dati vettoriali ad alta dimensionalità, ma svolgono ruoli diversi.
Le librerie di ricerca vettoriale si concentrano esclusivamente sul compito della ricerca efficiente dei vicini più prossimi. Offrono soluzioni leggere e veloci per trovare vettori simili a un vettore di query. Sono spesso utilizzate in ambienti più piccoli, a nodo singolo, o per applicazioni con dataset statici o di dimensioni moderate. Tuttavia, generalmente mancano di funzionalità per gestire dati dinamici, fornire persistenza o scalare su sistemi distribuiti. Gli sviluppatori che utilizzano queste librerie in genere devono gestire manualmente la gestione dei dati, gli aggiornamenti e la scalabilità.
D’altra parte, i database vettoriali purpose-built come Milvus e Zilliz Cloud (il Milvus gestito) sono sistemi completi progettati per la gestione di dati vettoriali su larga scala. Questi database vanno oltre la semplice ricerca vettoriale, offrendo funzionalità come archiviazione persistente, aggiornamenti in tempo reale, architettura distribuita e capacità avanzate di query. Supportano dataset dinamici e possono gestire facilmente applicazioni in tempo reale in cui i dati vengono aggiornati frequentemente. Inoltre, i database vettoriali spesso includono supporto integrato per combinare ricerche vettoriali con filtri tradizionali e query sui metadati, rendendoli ideali per ambienti di produzione che richiedono scalabilità, alta disponibilità e funzionalità di ricerca più complesse.
- Scopri le ultime nuove funzionalità e i miglioramenti di Zilliz Cloud: Zilliz Cloud Update: Servizi di migrazione, connettori Fivetran, Multi-repliche e altro
Quando scegliere ciascuna soluzione di ricerca vettoriale
Scegli le librerie di ricerca vettoriale se:
- Hai un dataset di dimensioni piccole o medie, relativamente statico.
- Preferisci il pieno controllo sugli algoritmi di indicizzazione e ricerca.
- Stai integrando la ricerca in un sistema esistente e puoi gestire l’infrastruttura.
Scegli i database vettoriali purpose-built se:
- Devi scalare fino a miliardi di vettori su sistemi distribuiti.
- Il tuo dataset cambia frequentemente, richiedendo aggiornamenti in tempo reale.
- Preferisci soluzioni gestite che si occupino per te di archiviazione, scalabilità e ottimizzazioni delle query.
In sintesi, le librerie di ricerca vettoriale sono più adatte a casi d’uso più semplici e su scala ridotta, dove velocità ed efficienza della memoria sono priorità, ma la complessità operativa è minima. I database vettoriali purpose-built, al contrario, sono progettati per sistemi su larga scala e di livello produzione che richiedono gestione dinamica dei dati, scalabilità e facilità d’uso, offrendo spesso vantaggi operativi significativi per gli sviluppatori che gestiscono applicazioni complesse.
Valutare e confrontare qualsiasi soluzione di ricerca vettoriale
OK, ora abbiamo appreso la differenza tra diverse soluzioni di ricerca vettoriale. Le domande seguenti sono: come garantire che il tuo algoritmo di ricerca restituisca risultati accurati e lo faccia alla velocità della luce? Come valutare l’efficacia di diversi algoritmi ANN, soprattutto su larga scala?
Per rispondere a queste domande, abbiamo bisogno di uno strumento di benchmarking. Sono disponibili molti strumenti di questo tipo, e due emergono come i più efficienti: ANN benchmarks e VectorDBBench.
Benchmark ANN
ANN Benchmarks (Benchmark dei vicini più prossimi approssimati) è un progetto open-source progettato per valutare e confrontare le prestazioni di vari algoritmi di vicini più prossimi approssimati (ANN). Fornisce un framework standardizzato per il benchmarking di diversi algoritmi su attività come la ricerca vettoriale ad alta dimensionalità, consentendo a sviluppatori e ricercatori di misurare metriche come velocità di ricerca, accuratezza e utilizzo della memoria su vari dataset. Utilizzando ANN-Benchmarks, puoi valutare i compromessi tra velocità e precisione per algoritmi come quelli presenti in librerie quali Faiss, Annoy, HNSWlib e altre, rendendolo uno strumento prezioso per comprendere quali algoritmi funzionano meglio per applicazioni specifiche.
Repository GitHub ANN Benchmarks: https://github.com/erikbern/ann-benchmarks
Sito web ANN Benchmarks: https://ann-benchmarks.com/
VectorDBBench: uno strumento di benchmarking open source
VectorDBBench è uno strumento di benchmarking open-source progettato per gli utenti che richiedono sistemi di archiviazione e recupero dei dati ad alte prestazioni, in particolare database vettoriali. Questo strumento consente agli utenti di testare e confrontare le prestazioni di diversi sistemi di database vettoriali come Milvus e Zilliz Cloud (il Milvus gestito) utilizzando i propri dataset, e di determinare quello più adatto ai loro casi d’uso. VectorDBBench è scritto in Python e concesso in licenza con licenza open-source MIT, il che significa che chiunque può usarlo, modificarlo e distribuirlo liberamente.
Repository GitHub VectorDBBench: https://github.com/zilliztech/VectorDBBench
Dai una rapida occhiata alle prestazioni dei principali database vettoriali nella classifica VectorDBBench.
Tecniche e approfondimenti sulla valutazione di VectorDB:
Ulteriori risorse su VectorDB, GenAI e ML
Continua a leggere
Stop Building AI Data Infra for the Wrong Stage
Learn how AI data infrastructure should evolve from prototype to enterprise scale, and when Vector Lakebase becomes the right architecture for AI apps.

Vector Lakebase: End the AI Data Silo
Learn how Vector Lakebase unifies vector search, data lakes, and AI data operations so teams can serve RAG and agents without copy-and-sync pipelines.

Introducing Zilliz MCP Server: Natural Language Access to Your Vector Database
Developers can easily manage and query vector databases with natural language via Zilliz MCP Server in AI-native environments.
The Definitive Guide to Choosing a Vector Database
Overwhelmed by all the options? Learn key features to look for & how to evaluate with your own data. Choose with confidence.


