Ce que font réellement les bases de données vectorielles (et pourquoi elles sont importantes)
Si vous avez développé avec des modèles d’IA récemment, vous avez probablement entendu parler du terme « base de données vectorielle ». Voici ce qui se passe réellement : lorsque vous envoyez du texte à un modèle d’IA, il convertit ce texte en un vecteur — une liste de nombres représentant la signification de ce texte. Une base de données vectorielle est spécifiquement conçue pour stocker, indexer et rechercher ces vecteurs à grande échelle. Imaginez-la comme un système de classement spécialisé optimisé pour les recherches par similarité plutôt que par correspondances exactes.
Les bases de données traditionnelles comme PostgreSQL sont excellentes pour trouver des correspondances exactes (« trouver tous les enregistrements où nom = ‘John’ »). Les bases de données vectorielles excellent à trouver du contenu similaire (« trouver tous les documents dont le sens est similaire à ce concept »). C’est fondamental pour le fonctionnement des applications d’IA modernes, des chatbots avec mémoire à long terme aux systèmes de recommandation et à la recherche sémantique.
Sans base de données vectorielle, chaque requête d’IA nécessiterait de ré-encoder le même texte à plusieurs reprises, ce qui est lent et coûteux. Avec une base de données vectorielle, vous stockez les embeddings une seule fois et les interrogez des millions de fois de manière efficace.
Les Trois Grands : Pinecone, Weaviate et ChromaDB
Ces trois acteurs dominent le paysage des bases de données vectorielles, mais ils répondent à des besoins et des scénarios de déploiement différents.
Pinecone est une solution entièrement gérée et hébergée dans le cloud. Vous ne gérez pas l’infrastructure — Pinecone s’occupe de la mise à l’échelle, des sauvegardes et des performances. C’est la solution la plus simple pour démarrer et elle fonctionne parfaitement pour les applications de production où vous ne voulez pas vous soucier du DevOps. Compromis : vous payez par requête et par stockage, et vos données résident sur leurs serveurs. Parfait pour : les startups, les applications d’IA en production, les équipes sans expertise en infrastructure.
Weaviate est open-source et peut être exécuté sur votre propre infrastructure ou via leur cloud géré. Il offre plus de flexibilité et de contrôle que Pinecone, avec de puissantes capacités de filtrage et une recherche sémantique intégrée. Vous pouvez l’auto-héberger gratuitement ou utiliser leur service cloud. Parfait pour : les équipes souhaitant de la flexibilité, les déploiements sur site, les exigences de filtrage complexes.
ChromaDB est léger, open-source et conçu pour les développeurs travaillant localement ou pour des applications de petite à moyenne envergure. Il peut fonctionner entièrement en mémoire ou persister sur disque. C’est le plus facile pour le prototypage et ne nécessite aucune configuration. Compromis : non conçu pour une échelle massive ou un trafic de production. Parfait pour : le prototypage rapide, les petits projets, le développement local, l’intégration dans des applications.
Comment choisir : un cadre de décision pratique
Le choix du bon outil se résume à trois questions :
1. Échelle et Trafic — Si vous gérez des millions de requêtes par mois en production, Pinecone ou le cloud Weaviate sont des paris plus sûrs. ChromaDB fonctionne pour des applications plus petites (milliers de requêtes). Pour une échelle d’entreprise, Weaviate sur une infrastructure gérée vous donne le contrôle sans le fardeau du DevOps.
2. Budget et Résidence des Données — Pinecone facture par requête et par stockage. Si vous avez des exigences strictes en matière de résidence des données (les données doivent rester sur site), Weaviate auto-hébergé est votre seule option. ChromaDB est gratuit pour le développement et les petites applications.
3. Complexité des Fonctionnalités — Besoin d’un filtrage avancé ? D’une recherche hybride combinant recherche par mots-clés et recherche sémantique ? D’une suppression en temps réel ? Weaviate gère cela élégamment. Besoin de quelque chose de simple et rapide ? ChromaDB. Besoin d’une solution gérée simple ? Pinecone.
Travailler avec les bases de données vectorielles : exemples concrets
Exemple 1 : Construire un ChatBot avec mémoire (ChromaDB)
Construisons un chatbot simple qui se souvient du contexte de conversation en utilisant ChromaDB :
import chromadb
from openai import OpenAI
client = OpenAI()
chroma_client = chromadb.Client()
collection = chroma_client.create_collection(name="chat_memory")
def save_to_memory(user_message, assistant_response):
# Embed the conversation turn
user_embedding = client.embeddings.create(
input=user_message,
model="text-embedding-3-small"
).data[0].embedding
collection.add(
ids=[str(len(collection.get('ids')))],
embeddings=[user_embedding],
metadatas=[{"role": "user", "content": user_message}],
documents=[user_message]
)
def retrieve_context(current_message, top_k=3):
results = collection.query(
query_texts=[current_message],
n_results=top_k
)
return results['documents']
# Usage
user_input = "Tell me about my project timeline"
context = retrieve_context(user_input)
# Now feed context + current message to Claude for better responses
save_to_memory(user_input, "response here")
Cette approche permet à votre chatbot de référencer les conversations passées sans tout envoyer à l’API à chaque fois.
Exemple 2 : Recherche sémantique (Pinecone)
Voici comment construire un système de recherche sémantique qui trouve des documents pertinents par leur signification, et non par des mots-clés :
import pinecone
from openai import OpenAI
# Initialize Pinecone
pinecone.init(api_key="your-key", environment="us-west1-gcp")
index = pinecone.Index("documents")
client = OpenAI()
def index_documents(docs):
vectors_to_upsert = []
for i, doc in enumerate(docs):
embedding = client.embeddings.create(
input=doc,
model="text-embedding-3-small"
).data[0].embedding
vectors_to_upsert.append((str(i), embedding, {"text": doc}))
index.upsert(vectors=vectors_to_upsert)
def semantic_search(query, top_k=5):
query_embedding = client.embeddings.create(
input=query,
model="text-embedding-3-small"
).data[0].embedding
results = index.query(vector=query_embedding, top_k=top_k, include_metadata=True)
return [match['metadata']['text'] for match in results['matches']]
# Index your documents
docs = ["Vector databases store embeddings", "AI models convert text to numbers", ...]
index_documents(docs)
# Search
results = semantic_search("How do I store AI embeddings?")
# Returns semantically similar documents, not just keyword matches
Exemple 3 : RAG en production avec Weaviate
Pour les systèmes de génération augmentée par récupération (RAG) en production, Weaviate brille par ses capacités de recherche hybride :
import weaviate
from weaviate.embedded import EmbeddedOptions
# Connect to Weaviate
client = weaviate.Client(
embedded_options=EmbeddedOptions(),
additional_headers={"X-OpenAI-Api-Key": "your-key"}
)
# Create schema
schema = {
"classes": [{
"class": "Article",
"vectorizer": "text2vec-openai",
"properties": [
{"name": "title", "dataType": ["text"]},
{"name": "content", "dataType": ["text"]},
{"name": "category", "dataType": ["text"]}
]
}]
}
client.schema.create(schema)
# Hybrid search (keyword + semantic)
response = client.query.get("Article", ["title", "content"]).with_hybrid(
query="machine learning best practices",
alpha=0.75 # 75% semantic, 25% keyword
).do()
print(response)
Démarrage rapide : choisir votre première base de données vectorielle
Commencez avec ChromaDB si : Vous faites du prototypage localement, construisez une petite application ou apprenez. Aucune configuration requise — juste pip install chromadb et commencez à coder.
Passez à Pinecone si : Vous déployez une application de production et ne voulez pas gérer l’infrastructure. Créez un compte gratuit sur pinecone.io, obtenez une clé API, et vous interrogerez des vecteurs en quelques minutes.
Envisagez Weaviate si : Vous avez besoin de flexibilité, de filtrage ou de contrôle sur votre infrastructure. Essayez d’abord leur offre cloud sur weaviate.io.
Quel que soit votre choix, le modèle d’embedding est le plus important. Utilisez text-embedding-3-small (OpenAI) ou des alternatives open-source comme Sentence Transformers pour une cohérence entre les projets.