Lexique · Frameworks / outils IA

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.

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.

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

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.

python
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èreQdrantPineconeWeaviatepgvector
ModèleOpen source (Apache 2.0)Service propriétaireOpen source (BSD-3)Extension PostgreSQL open source
HébergementVos serveurs ou cloud managéCloud de l'éditeur uniquementVos 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 hybrideVecteurs denses et creux, RRF et DBSFVecteurs denses et creuxBM25 et vecteurs natifsÀ composer avec le plein texte PostgreSQL
FiltrageFiltres sur payload pendant la rechercheFiltres sur métadonnéesFiltres sur propriétésSQL
Idéal pourContrôle des données, filtres finsÉquipes sans exploitationVectorisation intégréeCorpus 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.

Pertinent si

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é.
Moins adapté si

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.

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.

Ressources pour approfondir Qdrant

Trois articles du blog Blent pour comprendre les bases vectorielles et les exploiter dans un RAG ou un agent.

Questions fréquentes

Questions fréquentes

Oui, le logiciel est open source sous licence Apache 2.0 : on peut l'installer gratuitement sur ses serveurs. Le service managé Qdrant Cloud est payant au-delà d'une offre d'essai. Dans les deux cas, il faut prévoir le coût de l'infrastructure et de l'exploitation.

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