Weaviate : définition, fonctionnement et auto-hébergement
La base de données vectorielle open source que l'on peut héberger soi-même ou en service managé : collections, vectorisation intégrée, recherche hybride, multi-tenancy et exemple avec le client Python v4.
Par Équipe Blent· Mis à jour le · 14 min de lecture· Niveau intermédiaire
Weaviate en bref
- Type
- Base de données vectorielle open source
- Éditeur
- Weaviate, Amsterdam (ex-SeMI Technologies)
- Licence
- BSD-3-Clause
- Langage
- Go
- Déploiement
- Docker, Kubernetes ou Weaviate Cloud
- API
- REST, GraphQL, gRPC
- Points forts
- Recherche hybride, vectorisation intégrée, multi-tenancy
Définition : Weaviate
Weaviate est une base de données vectorielle open source, publiée sous licence BSD-3-Clause par l'entreprise néerlandaise du même nom. Elle stocke des objets, leurs propriétés et leurs vecteurs dans des collections, et permet de les retrouver par similarité sémantique, par mots-clés ou par une combinaison des deux, avec des filtres sur les propriétés. Des modules intégrés peuvent calculer les embeddings à l'import et à la requête en appelant un fournisseur de modèles. Weaviate s'installe sur ses propres serveurs avec Docker ou Kubernetes, ou s'utilise en service managé, ce qui en fait une brique fréquente des systèmes RAG qui doivent garder la maîtrise de leurs données.
En une phrase : Weaviate est une base vectorielle open source qui combine recherche sémantique et recherche par mots-clés, et que vous pouvez héberger vous-même.
Dans cette définition
Qu'est-ce que Weaviate ?
Weaviate est une base de données conçue pour stocker des objets accompagnés de leurs vecteurs, et pour les retrouver par proximité de sens. Chaque objet porte des propriétés classiques (titre, contenu, date, catégorie) et un ou plusieurs embeddings. On peut ensuite chercher les objets les plus proches d'une question, filtrer sur leurs propriétés et combiner cette recherche avec une recherche par mots-clés.
Le projet est développé par l'entreprise néerlandaise Weaviate, basée à Amsterdam et cofondée notamment par Bob van Luijt. Elle s'appelait SeMI Technologies jusqu'en 2023, avant d'adopter le nom de son produit phare. Le moteur est écrit en Go et publié sous licence BSD-3-Clause, une licence permissive qui autorise l'usage commercial et l'auto-hébergement sans contrainte. L'éditeur finance le projet par une offre managée, Weaviate Cloud.
Ce double modèle est la clé de son positionnement. Là où Pinecone n'existe qu'en service managé, Weaviate peut tourner sur un poste de développement avec Docker, sur un cluster Kubernetes dans votre cloud ou votre centre de données, ou chez l'éditeur. C'est souvent ce qui le fait retenir pour les projets RAG soumis à des exigences de souveraineté ou de confidentialité.
À retenir : Weaviate n'est pas seulement un index de vecteurs. Il stocke les objets complets, peut calculer leurs embeddings lui-même et combine nativement recherche sémantique et recherche lexicale.
Exemple : une collection vectorisée et une recherche hybride
L'exemple suivant crée une collection d'articles de base de connaissances, laisse Weaviate calculer les embeddings avec un modèle OpenAI, puis lance une recherche hybride filtrée. Il utilise le client Python v4 (paquet weaviate-client), qui communique avec le serveur en gRPC, et la syntaxe de configuration vector_config des versions récentes du client.
import os
import weaviate
from weaviate.classes.config import Configure, DataType, Property
from weaviate.classes.query import Filter
client = weaviate.connect_to_local(
headers={"X-OpenAI-Api-Key": os.environ["OPENAI_API_KEY"]}
)
try:
# 1. Collection : propriétés typées et vectorisation automatique
if not client.collections.exists("Article"):
client.collections.create(
"Article",
vector_config=Configure.Vectors.text2vec_openai(model="text-embedding-3-small"),
properties=[
Property(name="titre", data_type=DataType.TEXT),
Property(name="contenu", data_type=DataType.TEXT),
Property(name="categorie", data_type=DataType.TEXT),
],
)
articles = client.collections.use("Article")
# 2. Import par lots : Weaviate calcule les embeddings
documents = [
{"titre": "Télétravail", "contenu": "Les cadres peuvent télétravailler deux jours par semaine.", "categorie": "RH"},
{"titre": "Notes de frais", "contenu": "Les notes de frais sont remboursées sous 30 jours.", "categorie": "Finance"},
{"titre": "Accord QVT-2026", "contenu": "L'accord QVT-2026 précise les règles de déconnexion.", "categorie": "RH"},
]
with articles.batch.dynamic() as batch:
for doc in documents:
batch.add_object(properties=doc)
# 3. Recherche hybride : BM25 et vecteurs, pondérés par alpha
response = articles.query.hybrid(
query="combien de jours de télétravail pour les cadres",
alpha=0.5,
limit=3,
filters=Filter.by_property("categorie").equal("RH"),
)
for obj in response.objects:
print(obj.properties["titre"])
finally:
client.close()
La recherche hybride trouve l'article sur le télétravail par le sens de la question, mais retrouverait aussi l'accord QVT-2026 sur une requête contenant sa référence exacte, là où une recherche purement vectorielle peut échouer. Le paramètre alpha règle l'équilibre entre les deux. Les mêmes objets peuvent être exploités par LlamaIndex ou LangChain, qui disposent d'intégrations Weaviate, pour construire le reste du pipeline RAG.
Déployer Weaviate : auto-hébergé, managé ou local
Weaviate propose plusieurs modes de déploiement, avec la même API dans tous les cas.
- Docker : un conteneur unique pour le développement et les petits volumes. Un fichier Docker Compose suffit à décrire l'instance et ses modules.
- Kubernetes : la cible de production auto-hébergée, avec un chart Helm officiel. Le cluster répartit les collections en shards sur plusieurs nœuds et les réplique pour la haute disponibilité.
- Weaviate Cloud : l'offre managée de l'éditeur, qui prend en charge l'exploitation, les mises à jour et les sauvegardes.
- Mode embarqué : une instance lancée directement depuis le code Python, pratique pour des tests.
Voici un fichier Docker Compose minimal pour un environnement de développement. La version de l'image est volontairement fournie par une variable : en production, on fixe toujours une version précise.
services:
weaviate:
image: cr.weaviate.io/semitechnologies/weaviate:${WEAVIATE_VERSION}
ports:
- "8080:8080" # API REST et GraphQL
- "50051:50051" # gRPC, utilisé par le client Python v4
environment:
PERSISTENCE_DATA_PATH: "/var/lib/weaviate"
ENABLE_MODULES: "text2vec-openai,generative-openai"
AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: "true" # développement uniquement
CLUSTER_HOSTNAME: "node1"
volumes:
- weaviate_data:/var/lib/weaviate
volumes:
weaviate_data:
En auto-hébergé, plusieurs réglages pèsent directement sur la facture et la performance. L'index vectoriel par défaut, HNSW, est un graphe conservé en mémoire : sa taille croît avec le nombre et la dimension des vecteurs. Les techniques de compression (quantification des vecteurs) réduisent fortement cette empreinte. Pour les petites collections, notamment les tenants peu volumineux, un index plat sans graphe suffit.
Recherche hybride et multi-tenancy
Deux fonctionnalités justifient souvent le choix de Weaviate. La recherche hybride exécute en parallèle une recherche BM25 et une recherche vectorielle, puis fusionne leurs scores. Le principe de fusion est proche de celui décrit dans notre article sur la Reciprocal Rank Fusion. La multi-tenancy attribue à chaque tenant son propre shard au sein d'une collection : les données d'un client sont physiquement isolées, et un tenant inactif peut être déchargé de la mémoire. C'est l'outil adapté pour un SaaS qui sert des milliers de clients avec une seule collection.
À quoi sert Weaviate ?
Weaviate convient aux applications qui doivent retrouver des contenus par le sens, tout en gardant la main sur l'hébergement des données.
RAG souverain
Un assistant documentaire dont les données restent sur votre infrastructure ou votre cloud.
Recherche hybride
Un moteur qui trouve à la fois les reformulations et les références exactes (codes, noms).
SaaS multi-clients
Un tenant par client, isolé physiquement, activable ou désactivable à la demande.
Recherche multimodale
Rechercher des images à partir d'un texte, ou l'inverse, avec un vectoriseur multimodal.
Catalogue e-commerce
Combiner similarité sémantique et filtres sur le prix, la marque ou le stock.
Environnement isolé
Un RAG entièrement local, avec des modèles servis par Ollama, sans appel externe.
Quels sont les avantages de Weaviate ?
Weaviate se distingue par la combinaison d'un cœur open source et de fonctionnalités intégrées qui simplifient le pipeline.
- Open source sous licence permissive : auto-hébergement libre et absence de dépendance à un fournisseur.
- Recherche hybride native, sans moteur de recherche lexical à ajouter.
- Modules de vectorisation et de génération intégrés pour raccourcir le pipeline RAG.
- Multi-tenancy native, avec une isolation par tenant et une gestion fine des ressources.
- Même API en local, sur vos serveurs et en service managé : migration possible dans les deux sens.
- Réglages avancés accessibles : type d'index, compression des vecteurs, réplication.
Quelles sont les limites de Weaviate ?
La liberté d'hébergement a un revers : en auto-hébergé, toute l'exploitation repose sur votre équipe.
- Exploitation à votre charge en auto-hébergé : mises à jour, sauvegardes, supervision, montée en charge.
- L'index vectoriel HNSW consomme beaucoup de mémoire sans compression des vecteurs.
- Le client Python a connu des changements d'API importants : de nombreux exemples en ligne sont obsolètes.
- Le dimensionnement d'un cluster (shards, réplicas, mémoire) demande de l'expérience.
- Les modules de vectorisation intégrés masquent des appels payants à des fournisseurs externes.
Weaviate vs Pinecone : quelles différences ?
La fiche Pinecone compare les bases vectorielles sous l'angle du service managé. Ici, la question est inverse : que gagne-t-on, et que doit-on assumer, en choisissant une base open source que l'on peut héberger soi-même ?
| Critère | Weaviate | Pinecone |
|---|---|---|
| Code source | Ouvert, licence BSD-3-Clause | Fermé |
| Localisation des données | Où vous le décidez : poste, serveurs, cloud, éditeur | Cloud de l'éditeur, dans la région choisie |
| Exploitation | Par votre équipe, ou déléguée à Weaviate Cloud | Entièrement prise en charge par l'éditeur |
| Réglages | Index, compression, shards, réplication accessibles | Peu de réglages, choix faits par le service |
| Vectorisation | Modules intégrés vers de nombreux fournisseurs | Modèles hébergés par Pinecone ou vecteurs fournis |
| Fonctionnement hors ligne | Possible avec des modèles locaux | Impossible |
| Réversibilité | Changement d'hébergement sans changer d'API | Migration complète vers un autre produit |
Le bon choix dépend des compétences de l'équipe autant que des contraintes. Une équipe qui exploite déjà des conteneurs sur Kubernetes intégrera Weaviate sans difficulté et gardera la maîtrise complète de ses données. Une équipe sans compétence d'exploitation gagnera du temps avec un service managé, qu'il s'agisse de Pinecone ou de Weaviate Cloud.
Quand choisir Weaviate ?
Le critère principal est le contrôle : où doivent vivre les données, et qui exploite la base ?
Vous voulez maîtriser vos données
- Les données doivent rester sur votre infrastructure ou dans votre cloud.
- Vous exigez une solution open source et réversible.
- La recherche hybride est indispensable à la qualité des résultats.
- L'équipe sait exploiter des conteneurs sur Docker ou Kubernetes.
Une autre option sera plus simple
- Personne ne peut exploiter une base de données en production.
- Le corpus est petit et PostgreSQL est déjà en place : pgvector suffit.
- Vous voulez une offre entièrement managée sans aucun réglage.
- Le besoin se limite à un prototype en mémoire.
Outils et alternatives autour de Weaviate
Weaviate s'intègre à l'écosystème des frameworks LLM et des outils d'infrastructure, et se compare à plusieurs bases vectorielles.
- Alternative managée
Pinecone
Base vectorielle propriétaire, proposée uniquement en service managé.
- Alternative open source
Qdrant
Moteur vectoriel open source écrit en Rust, avec filtres avancés.
- Alternative
pgvector
Extension PostgreSQL pour ajouter la recherche vectorielle à une base existante.
- Déploiement
Docker
Le moyen le plus rapide de lancer une instance Weaviate locale.
- Déploiement
Kubernetes
La cible de production pour un cluster Weaviate répliqué.
- Déploiement
Helm
Le chart officiel qui décrit le déploiement de Weaviate sur Kubernetes.
- Orchestration
LlamaIndex
Framework de données pour LLM, avec Weaviate comme vector store.
- Orchestration
LangChain
Intégration officielle pour utiliser Weaviate comme retriever.
- Modèles
Ollama
Modèles d'embedding et de génération locaux, branchés par un module dédié.
Les concepts à connaître pour utiliser Weaviate
Ces notions éclairent la façon dont Weaviate stocke, indexe et retrouve les objets.
- EmbeddingLe vecteur qui représente le sens d'un objet, calculé à l'import.
- Recherche hybrideLa fusion des résultats de BM25 et de la recherche vectorielle.
- HNSWL'algorithme de graphe qui accélère la recherche des plus proches voisins.
- Multi-tenancyL'isolation des données de chaque client dans une même collection.
- RAGL'architecture qui alimente un LLM avec les objets retrouvés.
- Docker ComposeL'outil qui décrit une instance Weaviate et ses dépendances dans un fichier.
Ressources pour approfondir Weaviate
Trois articles du blog Blent pour concevoir un RAG auto-hébergé et améliorer sa recherche.
- Technique
Reciprocal Rank Fusion : améliorer son RAG
Comment fusionner les classements de plusieurs recherches dans une recherche hybride.
Lire l'article - Déploiement
Docker Compose : tout savoir
Décrire et lancer une base comme Weaviate et ses services associés en local.
Lire l'article - Tutoriel
Créer un RAG avec LangChain et Mistral
Construire un pipeline RAG complet, dans lequel Weaviate peut servir de base vectorielle.
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 Weaviate (collections, recherche hybride, multi-tenancy)
- Documentation du client Python Weaviate v4
- Retours d'expérience des projets et formations Blent
Comment fonctionne Weaviate ?
Mettre en place Weaviate suit cinq étapes, du déploiement de l'instance jusqu'à la génération de réponses à partir des objets retrouvés.
Déployer l'instance
Un conteneur Docker suffit pour démarrer. En production, Weaviate tourne sur Kubernetes avec un chart Helm officiel, ou sur Weaviate Cloud, l'offre managée de l'éditeur.
Définir une collection
Une collection regroupe des objets de même nature. On y déclare les propriétés et leur type, le module de vectorisation, le type d'index vectoriel et, si besoin, la multi-tenancy.
Importer les objets
Les objets sont envoyés par lots. Si un module de vectorisation est configuré, Weaviate calcule lui-même les embeddings ; sinon, on fournit les vecteurs déjà calculés.
Interroger
Trois modes de recherche coexistent : par similarité vectorielle, par mots-clés avec BM25, ou hybride. Tous acceptent des filtres sur les propriétés et une limite de résultats.
Générer
Un module génératif peut transmettre les objets retrouvés à un LLM et renvoyer sa réponse dans la même requête, ce qui constitue un RAG minimal intégré à la base.