Intermedio 11 minStack

Qdrant: il database vettoriale di un RAG locale

Risposta diretta

Qdrant è una base di dati vettoriale open source scritta in Rust, pubblicata sotto licenza Apache 2.0 (più di 34.000 stelle su GitHub a fine settembre 2026, versione 1.19.1), che si avvia con un solo comando Docker. In una catena di ricerca documentale locale, è il componente che memorizza i vettori dei tuoi documenti, applica filtri ai loro metadati durante la ricerca stessa anziché a posteriori e trova i passaggi più vicini a una domanda posta dall'utente.

Qdrant è un database vettoriale scritto in Rust, pubblicato sotto licenza Apache 2.0, che si installa con un solo comando e gestisce senza difficoltà corpus che le librerie in memoria non riescono più a supportare. Il progetto contava più di 34.000 stelle su GitHub a fine settembre 2026, alla versione 1.19.1. In una catena di ricerca documentale locale, è il componente che memorizza i vettori dei tuoi documenti e trova, per ogni domanda, i passaggi più vicini. Ecco cosa fa bene e quando basta una soluzione più semplice.

Di Mohamed Meguedmi·Agg. 2026-09-28·Testato su Windows, macOS e Linux

#A cosa serve un database vettoriale

Un modello di embedding converte un testo in una lista di numeri — un vettore — in modo che due testi dal significato simile producano due vettori vicini. Trovare i passaggi pertinenti a una domanda equivale quindi a cercare i vettori più vicini a quello della domanda. Su mille passaggi, basta un semplice calcolo sull'intero insieme. Su un milione, serve una struttura di indicizzazione, ed è questo il compito di un database vettoriale: costruire e mantenere questa struttura, rispondere in pochi millisecondi anziché confrontare i vettori uno per uno e continuare a fornire risultati corretti mentre il corpus continua a ricevere nuovi documenti.

Questa fase condiziona tutto il resto: un modello eccellente che riceve i passaggi sbagliati risponde male, e nessuna istruzione nel prompt può compensare un recupero delle informazioni inefficace. Per questo motivo, la scelta del database vettoriale, a lungo considerata un dettaglio infrastrutturale intercambiabile, merita la stessa cura riservata alla scelta del modello linguistico stesso.

#Cosa offre Qdrant

Il kit RAG Locale

I tuoi documenti, la tua IA: un RAG locale affidabile sui tuoi PDF, sulle tue note e sulle tue email — senza inviare nulla nel cloud.

  • Spazio online a vita
  • PDF + file
  • Aggiornamenti a vita

Il progetto si descrive come un motore di ricerca e un database vettoriale «ad alte prestazioni, su larga scala», progettato per un filtraggio esteso, il che lo distingue dalle librerie che si limitano a cercare il vicino più prossimo senza condizioni. È scritto in Rust, caratteristica che i suoi autori indicano come il motivo della sua velocità e affidabilità sotto carico elevato. Quanto alla robustezza operativa, il progetto documenta anche la registrazione anticipata delle scritture (write-ahead logging), che garantisce la persistenza dei dati con conferma dell'aggiornamento, anche in caso di interruzione dell'alimentazione, oltre a metriche, telemetria e log di audit per monitorare un deployment in produzione ed eseguirne il debug.

Un server autonomo
Un container, un'API HTTP e gRPC, client ufficiali in Python, Go, Rust, JavaScript/TypeScript, .NET e Java. Funziona indipendentemente dalla tua applicazione, che può riavviarsi senza mai perdere l'indice costruito.
Filtraggio per payload
Ogni vettore contiene metadati — autore, data, servizio, tipo di documento — sui quali si applicano filtri durante la ricerca con le clausole should, must e must_not, non dopo. È la differenza tra una ricerca utilizzabile in azienda e una dimostrazione.
La quantizzazione dei vettori
Comprimere i vettori per ridurre notevolmente l'occupazione di memoria (di un fattore 4× con la quantizzazione scalare, fino a 32× con quella binaria), al prezzo di una perdita di precisione controllata e compensabile.
Vettori sparsi e multi-vettori
Oltre ai classici vettori densi, Qdrant supporta i vettori sparsi per la ricerca a testo integrale e gli oggetti con più embedding, utili per modelli a interazione tardiva come ColBERT.
La ricerca ibrida
Combinare più vettori in una stessa query per sfruttare sia la comprensione semantica sia la precisione della ricerca per parole chiave, ottenendo un risultato combinato tramite strategie configurabili come la fusione dei ranghi reciproci (RRF) o la fusione dei punteggi basata sulla distribuzione (DBSF).
Snapshot e ripristino
Salvare una collezione e ripristinarla altrove, un aspetto importante quando una nuova indicizzazione costerebbe ore di utilizzo della GPU.
Il deployment distribuito
Distribuire una collezione su più nodi tramite sharding e replica, con ridimensionamento senza interruzioni del servizio — utile al di là di un utilizzo strettamente locale, ma da tenere presente se il progetto cresce, per non dover ricostruire tutto da zero il giorno in cui una sola macchina non basta più.

#Avviare localmente

La strada più breve è il container ufficiale, con un volume che conservi i dati dopo il riavvio. Un’interfaccia web integrata, descritta dal progetto come «un modo visivo per interagire con i tuoi dati e monitorare lo stato del tuo deployment», permette poi di esplorare le collezioni, gestire i dati e interrogare l’API REST senza scrivere una riga di codice — è il miglior strumento di diagnosi quando una risposta è sbagliata: si guarda ciò che è stato effettivamente recuperato, anziché cercare di indovinarlo rileggendo il codice di recupero.

Avviare Qdrant con persistenza
docker run -p 6333:6333 -p 6334:6334 \
  -v "$(pwd)/qdrant_storage:/qdrant/storage" \
  qdrant/qdrant

Il client Python può funzionare anche senza alcun server: QdrantClient(":memory:") per un test usa e getta, oppure QdrantClient(path="chemin/vers/db") per un'archiviazione locale persistente. È prezioso per un prototipo o per test automatizzati: lo stesso codice può poi passare al server modificando una sola riga di connessione. Dal 2026 il progetto documenta una seconda modalità di integrazione, Qdrant Edge: una versione alleggerita progettata per dispositivi con risorse limitate, che viene eseguita direttamente nel processo dell'applicazione anziché in un'architettura client-server, con la possibilità di sincronizzarsi con un server Qdrant completo.

#Il minimo in Python

  1. 01
    Connettersi
    from qdrant_client import QdrantClient, poi client = QdrantClient(url="http://localhost:6333") per collegarsi al container avviato sopra.
  2. 02
    Creare una collezione
    client.create_collection(collection_name="docs", vectors_config=VectorParams(size=1024, distance=Distance.COSINE)) — la dimensione deve corrispondere esattamente alla dimensione del tuo modello di embedding.
  3. 03
    Inserire punti
    client.upsert(collection_name="docs", points=[PointStruct(id=1, vector=[...], payload={"service": "support"})]) associa a ogni vettore un identificativo e metadati filtrabili.
  4. 04
    Interrogare
    client.query_points(collection_name="docs", query=vecteur_question, limit=5).points restituisce i cinque passaggi più vicini, con il loro punteggio e il loro payload.
i
La dimensione del vettore non è un dettaglio
Una collezione viene creata per una determinata dimensione del vettore e una determinata misura di distanza, che dipendono dal modello di embedding scelto. Cambiare modello di embedding impone di ricreare la collezione e reindicizzare tutto: questa scelta va fatta all'inizio, non in corso d'opera, e documentare la versione esatta del modello utilizzato evita una brutta sorpresa il giorno in cui qualcun altro riprende il progetto.

#Il filtraggio per metadati, la funzione che ci dispiace di aver trascurato

In una situazione reale, una domanda non riguarda quasi mai l'intero corpus. Si cercano documenti di un servizio, successivi a una certa data, di un determinato tipo o accessibili all'utente che pone la domanda. Qdrant applica queste condizioni durante la ricerca vettoriale, con una ricca gamma di filtri — corrispondenza di parole chiave, ricerca a testo completo, intervalli numerici, geolocalizzazione — combinati tramite le clausole logiche should, must e must_not. Questo permette di ottenere sempre il giusto numero di risultati pertinenti, mentre un filtraggio effettuato a posteriori potrebbe non lasciarne nessuno.

Il controllo degli accessi merita una menzione a parte: se più persone interrogano lo stesso indice, il filtro sui permessi impedisce al modello di citare a una persona un documento che quella persona non è autorizzata a leggere. Nessuna istruzione nel prompt sostituisce questo filtro, e implementarlo a livello di database anziché nel codice applicativo evita che un nuovo punto di accesso alla stessa collezione dimentichi di riapplicarlo.

#Far stare in memoria: la quantizzazione dei vettori

Ordine di grandezza per 1 milione di passaggi, vettori di 1.024 dimensioni
Archiviazione dei vettoriIngombro approssimativoEffetto sulla qualità
Numeri in virgola mobile a 32 bit, in formato grezzo≈ 4 GBRiferimento
Quantizzazione scalare a 8 bit≈ 1 GB (÷4, documentato da Qdrant)Perdita il più delle volte trascurabile
Quantizzazione binaria≈ 128 MB (÷32, documentato da Qdrant)Perdita reale, da compensare con una verifica dei migliori candidati

La pratica documentata consiste nel cercare nei vettori compressi, poi nel riordinare (rescoring) i migliori candidati con i vettori originali — Qdrant offre un parametro di sovracampionamento (oversampling) per regolare questo compromesso: impostandolo a 2,4 con un limite di 100 risultati, vengono preselezionati 240 candidati sull'indice quantizzato prima del riordinamento finale. Si mantiene gran parte della precisione riducendo la memoria a un quarto o meno, il che su una macchina che ospita anche un modello non è un lusso. La documentazione ufficiale dichiara inoltre un'accelerazione fino a 40 volte con la quantizzazione binaria rispetto ai vettori originali, un dato da verificare sul proprio insieme di dati anziché darlo per scontato. Il progetto riassume tutte queste opzioni di compressione, combinate con l'archiviazione su disco, annunciando una riduzione dell'uso della memoria fino al 97% — un ordine di grandezza che spiega perché la quantizzazione viene presentata come una funzionalità centrale anziché come un'impostazione marginale.

#Qdrant o un'altra base vettoriale

La domanda da porsi non è «qual è il miglior database vettoriale», ma «che cosa richiede oggi il mio progetto». Uno script di test non ha bisogno di altro che di una libreria in memoria. Un'applicazione aziendale che interroga già PostgreSQL trae vantaggio dall'aggiungervi un'estensione vettoriale anziché un servizio in più. Qdrant diventa la scelta giusta proprio quando più esigenze tra queste si presentano contemporaneamente: un servizio condiviso da più applicazioni, un filtraggio preciso dei metadati, un corpus che continua a crescere e il desiderio di non implementare da sé la persistenza o gli snapshot. Rivedere regolarmente questa scelta, anziché fissarla al primo prototipo, evita sia di complicare eccessivamente l'architettura di un progetto modesto sia di sottodimensionare un progetto che nel frattempo è cresciuto.

Scegliere in base alla situazione, non alla moda
SituazioneCiò che è adatto
Prototipo, qualche migliaio di brani di testo, un solo scriptUna libreria in memoria o un file locale basta
Hai già PostgreSQL e pochi vettoriUn'estensione vettoriale nel tuo database esistente
Servizio condiviso, filtraggio granulare, corpus in crescitaQdrant
Applicazione embedded, senza server da gestireLa modalità locale del client Python, oppure Qdrant Edge

#FAQ

Qdrant è gratuito?+
Sì, il motore è open source con licenza Apache 2.0 e può essere ospitato autonomamente senza costi di licenza, con un repository GitHub che contava più di 34.000 stelle a fine settembre 2026. Il produttore propone anche un'offerta cloud a pagamento; non è necessaria per un utilizzo locale.
Serve una GPU per Qdrant?+
No, non per l'uso abituale: la ricerca vettoriale, scritta in Rust, comporta un carico sulla CPU e sulla memoria. Qdrant documenta tuttavia un supporto GPU opzionale (NVIDIA e AMD) per accelerare la costruzione degli indici su volumi molto grandi: un'opzione, non un prerequisito per un corpus locale.
Qdrant o Chroma?+
Chroma è più rapido da configurare per un prototipo in Python. Qdrant regge meglio il carico, filtra i metadati in modo più preciso grazie a un ricco insieme di condizioni e si amministra come un vero servizio, con snapshot, ripristino e osservabilità integrata. Il passaggio a Qdrant diventa generalmente conveniente con l'uso multiutente o con alcune centinaia di migliaia di passaggi di testo.
Quanta RAM serve?+
Dipende dal numero di vettori e dalla loro dimensione. Un milione di vettori di 1.024 dimensioni occupa circa 4 GB di dati grezzi secondo l'aritmetica standard dei numeri in virgola mobile a 32 bit, e circa quattro volte meno con la quantizzazione scalare documentata da Qdrant, fino a 32 volte meno con la quantizzazione binaria. Aggiungi lo spazio occupato dall'indice e dai metadati, che rimane modesto in confronto.
È possibile usarlo senza server?+
Sì, il client Python può lavorare in memoria (":memory:") o su una cartella locale, cosa utile per i prototipi e i test. Il progetto documenta anche Qdrant Edge, una versione che si esegue all'interno del processo dell'applicazione per ambienti a risorse limitate, con possibilità di sincronizzazione verso un server completo.
La quantizzazione comporta davvero una perdita di qualità?+
Un po' ma recuperabile: la pratica documentata prevede di cercare sui vettori compressi e poi di riordinare i migliori candidati con i vettori originali (rescoring), attraverso un parametro di oversampling regolabile. La quantizzazione scalare a 8 bit è in generale la meno rischiosa; la binaria, più aggressiva, richiede di verificare la qualità sul proprio corpus.
Qdrant è adatto per più clienti in una sola istanza?+
Sì, è uno dei casi d'uso che il progetto documenta esplicitamente sotto il nome di multi-tenant: una partizione scalabile dei dati per cliente o per organizzazione all'interno della stessa collezione, combinata al filtraggio per payload per isolare ciò che ogni utente può vedere. È più economico, sia in termini di gestione operativa sia di memoria, rispetto ad aprire una collezione separata per ogni cliente quando il numero dei clienti supera qualche decina.
Questa guida ti è stata utile?

Un feedback, un errore, una precisazione? Facci sapere, così la guida migliora per tutti.