Qdrant : définition, fonctionnement et exemple Python
La base de données vectorielle open source écrite en Rust, auto-hébergeable ou managée, qui retrouve les embeddings par similarité : collections, payload, recherche hybride, quantification et exemple Python.
Par Équipe Blent· Mis à jour le · 14 min de lecture· Niveau intermédiaire
Qdrant en bref
- Type
- Base de données vectorielle open source
- Éditeur
- Qdrant, société basée à Berlin
- Licence
- Apache 2.0
- Langage
- Rust
Définition : Qdrant
Qdrant est une base de données vectorielle open source, écrite en Rust et distribuée sous licence Apache 2.0. Elle stocke des embeddings, c'est-à-dire des vecteurs numériques qui représentent le sens de textes, d'images ou d'autres contenus, et retrouve rapidement ceux qui sont les plus proches d'un vecteur de requête. Chaque point peut porter un payload JSON sur lequel on filtre la recherche. Qdrant s'installe sur vos serveurs ou s'utilise en service managé, et sert de brique de recherche dans les systèmes RAG, la recherche sémantique, la recommandation et la mémoire des agents IA.
En une phrase : Qdrant stocke vos embeddings et retrouve les plus proches d'une requête, avec des filtres fins et un déploiement libre : chez vous ou dans le cloud.
Dans cette définition
Qu'est-ce que Qdrant ?
Qdrant (prononcé « quadrant ») est une base de données spécialisée dans le vecteur. Dans une application d'IA générative, chaque document, paragraphe ou image est converti en embedding, une liste de nombres qui encode son sens. Retrouver les contenus pertinents pour une question revient alors à chercher les vecteurs les plus proches de celui de la question, c'est ce que fait Qdrant, y compris sur de gros volumes.
Le moteur est écrit en Rust et publié sous licence Apache 2.0. Il est développé par la société Qdrant, basée à Berlin, qui propose aussi un service managé, Qdrant Cloud. L'essor des LLM et du RAG en a fait l'une des bases vectorielles open source les plus utilisées, aux côtés de Weaviate et de l'extension pgvector.
Son positionnement : une base libre que l'on déploie où l'on veut, avec des filtres sur métadonnées particulièrement soignés. C'est ce qui la distingue de Pinecone, proposée uniquement en service managé.
À retenir : Qdrant ne génère pas de texte et ne comprend pas les documents. Il stocke des vecteurs produits par un modèle d'embedding et retrouve rapidement les plus proches, en respectant des filtres.
Sous le capot : collections, points et payload
Qdrant organise les données sur trois niveaux, à concevoir avant d'écrire le premier vecteur.
- Collection : l'ensemble de points de même nature, défini par la taille des vecteurs et la distance. Une collection peut contenir plusieurs vecteurs nommés par point, par exemple un vecteur dense et un vecteur creux.
- Point : l'unité de stockage, composée d'un identifiant, d'un ou plusieurs vecteurs et d'un payload.
- Payload : un document JSON attaché au point. Il sert à filtrer la recherche (par date, source, droit d'accès) et à restituer le contenu. Les champs filtrés fréquemment gagnent à être indexés.
Filtrage, quantification et mode distribué
Le filtrage combine des conditions de type must, should et must_not sur des mots-clés, des plages numériques, du texte ou des coordonnées géographiques. La quantification compresse les vecteurs pour réduire la mémoire vive utilisée, avec une perte de précision que l'on compense en réévaluant les meilleurs candidats. Enfin, le mode distribué répartit une collection en shards et en réplicas sur plusieurs nœuds, pour monter en charge et tolérer les pannes.
La recherche hybride
La recherche vectorielle seule rate parfois des correspondances exactes : un code produit, un nom propre, un acronyme interne. Qdrant prend en charge les vecteurs creux, qui encodent la présence et le poids des termes, et propose des requêtes à étages (prefetch) dont les listes sont fusionnées par Reciprocal Rank Fusion (RRF) ou par une fusion basée sur la distribution des scores (DBSF).
Les principaux cas d'usage de Qdrant
Qdrant intervient partout où il faut retrouver des contenus proches par le sens, avec des contraintes de filtrage ou de maîtrise de l'infrastructure.
RAG en production
Fournir à un LLM les passages pertinents d'un corpus, filtrés par droits d'accès.
Recherche sémantique
Trouver des documents qui répondent à une question formulée avec d'autres mots.
Recherche hybride
Combiner similarité vectorielle et correspondance de termes pour les noms et références.
Recommandation
Suggérer des produits ou contenus proches de ceux qu'un utilisateur consulte.
Mémoire d'agent
Conserver et retrouver les faits utiles aux conversations passées d'un agent IA.
Données sensibles
Garder les vecteurs sur sa propre infrastructure pour répondre à une contrainte réglementaire.
Exemple : une recherche hybride filtrée en Python
Une plateforme de support veut retrouver les réponses de sa FAQ les plus proches d'une question, en combinant sens et termes exacts. Le code suivant utilise le client officiel (paquet qdrant-client) face à un serveur local lancé avec docker run -p 6333:6333 qdrant/qdrant. Les vecteurs sont ici fictifs : en pratique, ils proviennent d'un modèle d'embedding.
from qdrant_client import QdrantClient, models
client = QdrantClient(url="http://localhost:6333")
# 1. Collection avec un vecteur dense (3 dimensions pour l'exemple) et un vecteur creux
client.create_collection(
collection_name="support-faq",
vectors_config={"dense": models.VectorParams(size=3, distance=models.Distance.COSINE)},
sparse_vectors_config={"sparse": models.SparseVectorParams()},
)
# 2. Upsert : identifiant, vecteurs et payload
client.upsert(
collection_name="support-faq",
points=[
models.PointStruct(
id=1,
vector={
"dense": [0.01, 0.45, 0.67],
"sparse": models.SparseVector(indices=[1, 42], values=[0.22, 0.8]),
},
payload={"text": "Le remboursement intervient sous 14 jours.", "produit": "boutique", "annee": 2026},
),
],
)
# 3. Requête hybride : deux recherches fusionnées par RRF, filtrées sur le payload
filtre = models.Filter(must=[models.FieldCondition(key="produit", match=models.MatchValue(value="boutique"))])
resultats = client.query_points(
collection_name="support-faq",
prefetch=[
models.Prefetch(query=[0.01, 0.45, 0.67], using="dense", limit=20, filter=filtre),
models.Prefetch(
query=models.SparseVector(indices=[1, 42], values=[0.22, 0.8]),
using="sparse",
limit=20,
filter=filtre,
),
],
query=models.FusionQuery(fusion=models.Fusion.RRF),
limit=3,
)
for point in resultats.points:
print(point.id, round(point.score, 3), point.payload["text"])
La taille du vecteur dense doit correspondre exactement à celle du modèle d'embedding, et la question doit être vectorisée avec ce même modèle. Chaque Prefetch exécute sa propre recherche, puis la fusion RRF produit un classement unique. Le texte d'origine est conservé dans le payload pour l'afficher ou le transmettre au LLM sans seconde requête. Dans un RAG, ces résultats sont ensuite injectés dans le prompt, souvent par LangChain ou LlamaIndex, qui disposent d'intégrations.
Quels sont les avantages de Qdrant ?
Qdrant combine la liberté d'une solution open source et un moteur conçu pour la performance, sans imposer de mode d'hébergement.
- Code ouvert sous licence Apache 2.0, ce qui limite la dépendance à un éditeur.
- Déploiement au choix : conteneur Docker, cluster Kubernetes ou service managé.
- Filtres riches sur le payload (mots-clés, plages numériques, géolocalisation) appliqués pendant la recherche.
- Recherche hybride native avec vecteurs denses et creux, fusionnés par RRF ou DBSF.
- Quantification intégrée pour réduire fortement la mémoire vive consommée par les vecteurs.
- Clients officiels pour Python, JavaScript, Go, Rust et Java, et intégrations dans LangChain et LlamaIndex.
Quelles sont les limites de Qdrant ?
Le contrôle a une contrepartie : l'auto-hébergement demande des compétences d'exploitation, et la quantification n'est pas gratuite en précision.
- L'auto-hébergement impose de gérer sauvegardes, mises à jour, supervision et dimensionnement.
- Une configuration par défaut sans authentification doit être sécurisée avant toute exposition réseau.
- La quantification économise de la mémoire au prix d'une perte de précision à compenser (réévaluation, sur-échantillonnage).
- Qdrant ne calcule pas les embeddings par défaut : le pipeline de vectorisation reste à votre charge.
- Le dimensionnement d'un cluster (shards, réplicas) demande de comprendre la charge réelle.
- Moins d'outils tout-en-un qu'une base généraliste si le besoin dépasse la recherche vectorielle.
Qdrant vs Pinecone : quelles différences ?
Le choix d'une base vectorielle se joue moins sur la qualité de la recherche, comparable d'une solution à l'autre, que sur le modèle d'exploitation. Voici comment Qdrant se situe face à Pinecone, Weaviate et pgvector.
| Critère | Qdrant | Pinecone | Weaviate | pgvector |
|---|---|---|---|---|
| Modèle | Open source (Apache 2.0) | Service propriétaire | Open source (BSD-3) | Extension PostgreSQL open source |
| Hébergement | Vos serveurs ou cloud managé | Cloud de l'éditeur uniquement | Vos serveurs ou cloud managé | Partout où tourne PostgreSQL |
| Exploitation | À votre charge si auto-hébergé | Aucune | À votre charge si auto-hébergé | Celle de votre base existante |
| Recherche hybride | Vecteurs denses et creux, RRF et DBSF | Vecteurs denses et creux | BM25 et vecteurs natifs | À composer avec le plein texte PostgreSQL |
| Filtrage | Filtres sur payload pendant la recherche | Filtres sur métadonnées | Filtres sur propriétés | SQL |
| Idéal pour | Contrôle des données, filtres fins | Équipes sans exploitation | Vectorisation intégrée | Corpus modestes, stack PostgreSQL |
Une démarche fréquente consiste à prototyper avec pgvector ou un Qdrant local, puis à choisir la base de production selon les contraintes : souveraineté des données et réversibilité orientent vers Qdrant ou Weaviate, absence d'équipe d'exploitation vers Pinecone. Notre article Pinecone : la base de données vectorielle managée détaille le fonctionnement des bases vectorielles côté managé.
Ce n'est pas un choix binaire. Si vos données sont des vecteurs bien séparés de leur texte source, changer de base reste possible : conservez toujours les documents et le pipeline de vectorisation.
Qdrant comme mémoire d'agent
Les agents IA ont besoin de retrouver des faits issus de conversations ou d'actions passées. Une collection Qdrant sert de mémoire à long terme : chaque souvenir est un point, filtrable par utilisateur, session ou date. Les articles Mémoire des agents IA et Gérer l'état des agents IA détaillent ces stratégies, que le métier d'AI Engineer met en pratique au quotidien.
Quand choisir Qdrant ?
Le critère décisif est rarement la qualité de la recherche, comparable entre bases vectorielles : ce sont le contrôle des données et les filtres.
Vous voulez garder la main
- Les données doivent rester sur votre infrastructure ou dans votre cloud.
- Les requêtes combinent similarité et filtres fins sur des métadonnées.
- Vous souhaitez une solution open source et réversible.
- Une équipe sait exploiter un service conteneurisé.
Vous préférez déléguer ou simplifier
- Aucune équipe ne peut exploiter une base de données en production.
- Le corpus est modeste et une base PostgreSQL existe déjà.
- Vous voulez uniquement un service managé sans option d'auto-hébergement.
- Le besoin dépasse la recherche vectorielle et exige des jointures complexes.
Technologies et outils associés à Qdrant
Qdrant s'insère dans une chaîne qui comprend un modèle d'embedding, un framework d'orchestration et, souvent, une base concurrente évaluée en parallèle.
- Alternative managée
Pinecone
Base vectorielle propriétaire, proposée uniquement en service managé.
- Alternative open source
Weaviate
Base vectorielle auto-hébergeable ou managée, avec recherche hybride native.
- Alternative
pgvector
Extension PostgreSQL pour ajouter la recherche vectorielle à une base existante.
- Orchestration
LangChain
Intégration officielle pour utiliser une collection Qdrant comme retriever.
- Orchestration
LlamaIndex
Framework de données pour LLM, qui utilise Qdrant comme vector store.
- Déploiement
Docker
Conteneur officiel pour lancer un serveur Qdrant en une commande.
- Orchestration de conteneurs
Kubernetes
Plateforme pour déployer un cluster Qdrant distribué.
- Modèles
Hugging Face
Modèles d'embedding open source pour vectoriser textes et images.
Les concepts à connaître autour de Qdrant
Ces notions expliquent ce que Qdrant stocke, comment il compare les vecteurs et où il se place dans une application IA.
- EmbeddingLe vecteur qui représente le sens d'un contenu, unité de base de Qdrant.
- RAGL'architecture qui utilise une base vectorielle pour alimenter un LLM.
- Recherche hybrideLa combinaison de la similarité vectorielle et de la correspondance par mots-clés.
- RerankingLe réordonnancement des résultats par un modèle plus précis après la recherche.
- Mémoire d'agentLe mécanisme qui permet à un agent de conserver et retrouver des informations passées.
- LLMLe modèle de langage qui exploite les passages retrouvés par Qdrant.
Ressources pour approfondir Qdrant
Trois articles du blog Blent pour comprendre les bases vectorielles et les exploiter dans un RAG ou un agent.
- Comparatif
Pinecone : la base de données vectorielle managée
Le fonctionnement des bases vectorielles et le point de comparaison managé de Qdrant.
Lire l'article - Article
Reciprocal Rank Fusion : améliorer son RAG
Fusionner les résultats de plusieurs recherches, comme le fait la requête hybride de Qdrant.
Lire l'article - Guide
Mémoire des agents IA : stratégies, outils et bonnes pratiques
Utiliser une base vectorielle comme mémoire à long terme d'un agent.
Lire l'article
Questions fréquentes
Questions fréquentes
Expertise
À propos de l'auteur
Équipe Blent
Les ingénieurs et mentors Blent conçoivent, évaluent et mettent en production des applications LLM, et forment chaque année des centaines de professionnels à l'IA générative.
Sources et méthodologie
- Documentation officielle Qdrant (collections, payload, filtrage, requêtes hybrides, quantification)
- Dépôt GitHub qdrant/qdrant (licence Apache 2.0)
- Retours d'expérience des projets et formations Blent
Comment fonctionne Qdrant ?
Utiliser Qdrant revient à suivre cinq étapes, de la création de la collection à l'exploitation des résultats par un LLM ou une application.
Créer une collection
On définit la taille des vecteurs (celle du modèle d'embedding) et la distance de similarité : cosinus, produit scalaire, distance euclidienne ou distance de Manhattan.
Vectoriser les contenus
Chaque texte ou image est transformé en vecteur par un modèle d'embedding, exécuté chez vous ou chez un fournisseur. Qdrant stocke les vecteurs, il ne les calcule pas par défaut.
Insérer les points
L'opération upsert envoie des points : un identifiant, un ou plusieurs vecteurs et un payload JSON (source, date, langue, droits). Un identifiant existant est mis à jour.
Interroger la collection
La requête est vectorisée avec le même modèle. Qdrant renvoie les points les plus proches, restreints si besoin par un filtre sur le payload, avec leur score.
Exploiter les résultats
Les passages retrouvés sont réordonnés si besoin par un modèle de reranking, puis transmis au LLM dans un RAG, ou affichés directement dans un moteur de recherche.