Choix de base de données vectorielle pour RAG : Pinecone vs Weaviate vs Milvus

Un système RAG avec seulement 2 millions de documents et une latence P99 qui grimpe à 800 ms — l’erreur de sélection typique. L’équipe avait monté un prototype avec Chroma en deux semaines, mais au-delà du million de documents, la latence est passée de 20 ms à des niveaux insupportables. La migration vers une autre solution a pris trois semaines supplémentaires : export, reconstruction des vecteurs, configuration de l’index — chaque étape un piège.
Choisir la bonne base de données vectorielle, c’est déjà la moitié du succès d’un système RAG. Le retrieval détermine si l’IA trouve la « bonne » information ; la génération ne peut produire une « bonne » réponse qu’ensuite. Si le retrieval s’effondre, ajuster les prompts ou changer de modèle ne servira à rien.
Cet article compare Pinecone, Weaviate et Milvus sur les benchmarks de performance, les modèles tarifaires et les cas d’usage. Vous repartirez avec un cadre de décision clair, adapté à votre scénario, et les moyens de calculer un budget réel.
Chapitre 1 : Pourquoi le choix de base de données vectorielle est si crucial ?
1.1 Le rôle de la base de données vectorielle dans un système RAG
Beaucoup pensent à tort qu’une base vectorielle n’est qu’un « entrepôt » pour stocker des embeddings. En réalité, sa valeur centrale n’est pas le stockage, mais la recherche efficace de similarité sémantique.
Les bases relationnelles excellent dans la correspondance exacte — par exemple WHERE id = 100. Le RAG doit résoudre un autre problème : l’utilisateur demande « comment optimiser les performances Python », et vous devez trouver les documents sémantiquement les plus pertinents, pas une correspondance mot à mot. La base vectorielle convertit texte, images et audio en vecteurs haute dimension (par exemple 1536 dimensions avec OpenAI text-embedding-3-small), puis utilise des algorithmes ANN (Approximate Nearest Neighbor) pour trouver rapidement les candidats les plus proches parmi des millions, voire des milliards de vecteurs.
Le cœur du compromis ANN : rappel vs latence de requête. Calculer la distance exacte pour tous les vecteurs coûte cher — 1 million de vecteurs à 1536 dimensions, un scan complet prend des dizaines de secondes. Les algorithmes ANN (HNSW, IVF, PQ) ramènent la latence à la milliseconde en « approximant », au prix de résultats parfois manqués. Chaque base vectorielle tranche différemment sur la courbe rappel-latence, ce qui impacte directement la précision du retrieval RAG.
1.2 Le coût réel d’une mauvaise sélection
L’expérience de notre équipe en est un bon exemple. Chroma en local est pratique pour le développement — pip install chromadb, opérationnel en cinq minutes. Mais au-delà d’1 million de documents, les limites du déploiement mononœud apparaissent : la montée en charge multi-machines exige de gérer serveurs, migration, reconstruction d’index et équilibrage de charge manuellement.
Un piège plus discret : la dérive des coûts Pinecone. La couche gratuite supporte 1 million de vecteurs — séduisant. Mais en passant au payant, la double facturation stockage + requêtes surprend. Un ami dans le juridique IA : 50 millions de documents, 100 000 requêtes/jour, facture mensuelle à plus de 3 000 $ — loin des 500 $ budgétés.
Une mauvaise sélection n’est pas qu’un problème technique, c’est aussi une question d’argent.
1.3 Le paysage des bases vectorielles en 2026
Le marché se résume à « trois leaders + nouvelles forces » :
Les trois principaux :
- Pinecone : Serverless entièrement managé, prêt à l’emploi, idéal pour démarrer vite. En 2026, le Serverless abaisse encore la barrière d’entrée.
- Weaviate : conception modulaire, capacités de graphe intégrées, recherche hybride (mots-clés + vecteurs) particulièrement performante.
- Milvus : architecture cloud-native distribuée, accélération GPU, réponse en millisecondes à l’échelle du milliard de vecteurs.
Nouvelles forces :
- pgvector : extension PostgreSQL — si vous utilisez déjà PG, coût marginal nul pour ajouter la recherche vectorielle. Adapté aux scénarios légers.
- Qdrant : open source, bonnes performances, positionnement rapport qualité-prix, plus léger que Milvus en auto-hébergement.
Cet article se concentre sur les trois premiers, couvrant de « zéro exploitation managé » à « auto-hébergement à grande échelle ». pgvector et Qdrant seront évoqués dans la section des cas particuliers.
Chapitre 2 : Comparaison des différences clés entre les trois bases
2.1 Architecture : trois philosophies distinctes
Milvus : architecture cloud-native distribuée
La philosophie de Milvus : « conçu pour la grande échelle ». Architecture distribuée native — déploiement Kubernetes, réplication multi-copies, extension horizontale. Composants bien séparés : nœuds coordinateurs pour l’orchestration, nœuds de données pour le stockage, nœuds de requête pour la recherche.
Déployer Milvus exige une vraie compétence d’exploitation : Kubernetes, configuration de cluster, réglage GPU. Une fois en place, de 10 à 100 millions de vecteurs, ajoutez des nœuds sans changer d’architecture. Recommandation officielle Milvus : cluster d’au moins 3 nœuds en production, 16 Go RAM minimum par nœud, GPU (NVIDIA A100 ou équivalent) pour les données à l’échelle du milliard.
Pinecone : Serverless entièrement managé
Pinecone pousse la simplicité au maximum. Pas de serveurs, pas de configuration d’index, pas de gestion de montée en charge — créez un compte, un index, appelez l’API. Le Serverless 2026 facture à l’usage réel ; quasi gratuit à l’arrêt.
Mais la commodité limite la flexibilité. Pinecone n’offre qu’une montée en charge verticale — la capacité d’index est plafonnée par le fournisseur cloud, sans extension horizontale comme Milvus. Les paramètres d’index personnalisés (M, ef pour HNSW) sont restreints à quelques presets. Si vous avez besoin d’un réglage fin des performances de retrieval, Pinecone peut sembler contraignant.
Weaviate : conception modulaire + héritage graphe
Weaviate fusionne base vectorielle et base de graphes. Chaque vecteur peut porter des attributs d’objet (texte, image, métadonnées) et des relations sémantiques entre objets. Idéal pour les graphes de connaissances — pas seulement des vecteurs similaires, mais aussi la navigation relationnelle.
Modularité : modules d’embedding OpenAI, Cohere ou modèles locaux ; vectorisation personnalisable ; recherche multimodale (texte vers image) prête à l’emploi. Déploiement flexible : auto-hébergé, Weaviate Cloud ou hybride. Plus de flexibilité signifie plus de paramètres — courbe d’apprentissage plus raide que Pinecone.
2.2 Benchmarks de performance : données réelles
Le tableau ci-dessous provient du benchmark Tencent Cloud 2025 et du rapport IoT Digital Twin PLM 2026. Conditions : vecteurs 1536 dimensions (OpenAI text-embedding-3-small), index HNSW, rappel 95 %.
| Produit | Capacité par index | Latence (P99) | Recherche hybride | Distribué | Accélération GPU |
|---|---|---|---|---|---|
| Milvus | Centaines de milliards | <50ms | Oui | Oui | Oui |
| Weaviate | Centaines de milliards | <150ms | Oui | Oui | Non |
| Pinecone | Milliards | <100ms | Oui | Auto-scaling | Non |
Observations clés :
-
Écart de latence marqué : Milvus avec GPU ramène la P99 sous 50 ms, soit 3× plus rapide que Weaviate. Pour les scénarios sensibles à la réactivité (Q&R temps réel, chatbot), l’utilisateur perçoit la différence.
-
Plafonds de capacité différents : Weaviate annonce des centaines de milliards de vecteurs, mais au-delà de 1 milliard les performances décroissent nettement. Milvus reste stable à l’échelle du milliard grâce au sharding distribué. Le plafond milliard de Pinecone suffit aux PME, mais peut limiter les grands comptes.
-
Recherche hybride devenue standard : les trois supportent vecteur + mots-clés. Weaviate excelle — son héritage graphe rend la modélisation sémantique plus naturelle, avec un gain de précision de 5 à 10 % en sémantique complexe (données Tencent Cloud).
2.3 Modèles tarifaires : calculer le coût réel
Chaque éditeur a sa logique. Voici la structure des coûts :
Tarification Pinecone :
- Gratuit : 1 M de vecteurs, stockage 0 $, requêtes limitées
- Payant : à partir de 70 $/mois (10 Md de vecteurs inclus), dépassement facturé à la requête
- Formule :
Cost = $70 + (nombre de requêtes × $0,0001/requête)(hors quota gratuit)
Tarification Weaviate :
- Cloud : 0,01 $/Go/mois (stockage), requêtes illimitées
- Formule :
Cost = (nombre de vecteurs × 1536 dim × 4 octets ÷ 1 Go) × $0,01 × mois - Auto-hébergé : open source gratuit, coût serveur à votre charge
Tarification Milvus :
- Open source : auto-hébergement gratuit
- Cloud (Tencent Cloud/AWS) : facturation par nœud, nœud haut de gamme ~2 000 $/mois
- Formule :
Cost = nombre de nœuds × $2 000/mois + coût GPU(si nécessaire)
Cas concret : 50 M de vecteurs, 100 000 requêtes/jour, 1536 dimensions.
| Solution | Coût mensuel estimé | Remarque |
|---|---|---|
| Pinecone payant | 70 $ + 100k×30×$0,0001 = 370 $ | Facturation à la requête, coût élevé si trafic fort |
| Weaviate Cloud | 50M×1536×4÷1024³ × $0,01 ≈ 3 $ | Stockage uniquement, requêtes illimitées, très économique |
| Milvus auto-hébergé | Serveur 500 $ + GPU 1 000 $ = 1 500 $ | Coût amorti sur le long terme, mais coût humain d’exploitation en sus |
Point important : le modèle au stockage de Weaviate est très compétitif en requêtes fréquentes. Mais l’auto-hébergement cache souvent le coût d’exploitation — un ingénieur Kubernetes coûte au minimum 50 000 $/an.
Chapitre 3 : Arbre de décision selon les scénarios
Il n’y a pas de « meilleur » absolu, seulement le plus adapté. Voici un cadre selon volume de données et taille d’équipe.
3.1 Prototype rapide (<1 M de vecteurs)
Recommandation : couche gratuite Pinecone ou Chroma en local
Pour valider un produit, une démo interne ou si la croissance des données est incertaine, privilégiez Pinecone gratuit : zéro exploitation, intégration en 5 minutes, quota suffisant. Chroma convient aussi, mais au-delà du million, la migration devient douloureuse.
Comparaison de démarrage :
Pinecone :
from pinecone import Pinecone
pc = Pinecone(api_key="your-api-key")
index = pc.Index("my-index") # 索引已在云端创建好
Chroma :
import chromadb
client = chromadb.Client() # 本地内存模式
collection = client.create_collection("my-collection")
Les deux démarrent vite, mais l’index Pinecone persiste dans le cloud ; Chroma en mode local perd les données au redémarrage. Pour un prototype multi-session, Pinecone gratuit est préférable.
3.2 Production PME (1 M–100 M de vecteurs)
Recommandation : Pinecone payant ou Weaviate Cloud
Deux facteurs : coût d’exploitation et précision du retrieval.
Sans équipe dédiée, choisissez un service managé. Pinecone et Weaviate Cloud éliminent l’exploitation. Mais les modèles tarifaires divergent : requêtes fréquentes → Weaviate (stockage) ; requêtes rares → Pinecone (stockage + requêtes).
Pour une haute exigence de précision (juridique, médical), la recherche hybride Weaviate performe mieux — +5 à 10 % en sémantique complexe selon Tencent Cloud. Les capacités graphe permettent aussi le retrieval par relations, pas seulement par similarité documentaire.
Estimation des coûts :
Coût mensuel = (nombre de vecteurs × dimensions × 4 octets ÷ 1 Go) × prix stockage × mois
+ (requêtes/jour × 30 × prix/requête)
Weaviate : prix requête = 0. Pinecone : ~0,0001 $/requête. Insérez vos chiffres — l’écart peut être considérable.
3.3 Grande entreprise (>100 M de vecteurs)
Recommandation : Milvus auto-hébergé + Kubernetes
À l’échelle du milliard, le managé perd en rapport qualité-prix. Le plafond milliard de Pinecone peut être insuffisant ; Weaviate Cloud au stockage devient cher. Milvus auto-hébergé : open source, GPU, extension horizontale.
Prérequis : une équipe d’exploitation. Déploiement Milvus nécessite :
- Cluster Kubernetes (minimum 3 nœuds)
- Serveurs GPU (NVIDIA A100 ou équivalent)
- Réglage des paramètres d’index et optimisation de latence
Ne négligez pas le coût humain. Sans compétence Kubernetes existante, recrutement ou formation à intégrer. Sur le long terme, l’auto-hébergement à l’échelle du milliard coûte moins que le managé — mais investissement initial élevé, adapté aux projets à croissance prévisible.
3.4 Cas particuliers
Recherche multimodale (texte vers image, image vers image) : Weaviate
Weaviate intègre la vectorisation multimodale (CLIP, modèles multimodaux) — uploadez une image, vectorisation automatique, recherche dans le même index que les vecteurs texte. Milvus le supporte aussi, mais configuration manuelle. Pinecone ne stocke que les vecteurs fournis — la vectorisation reste à votre charge.
Graphe de connaissances + RAG : Weaviate
Weaviate modélise les relations objet-objet — par exemple la chaîne entreprise-employé-projet. Navigation relationnelle, pas seulement similarité documentaire. Milvus et Pinecone ne font que de la recherche vectorielle pure.
Léger / PostgreSQL existant : pgvector
Si vous utilisez déjà PostgreSQL avec peu de données (moins d’1 M), pgvector ajoute la recherche vectorielle sans coût supplémentaire. CREATE EXTENSION vector; suffit. Performance inférieure aux bases dédiées ; au-delà du million, latence notable.
Chapitre 4 : Intégration LangChain — code pratique
Exemples complets pour les trois bases : initialisation, ajout de vecteurs, requête — prêts à exécuter.
4.1 Pinecone + LangChain
# 安装依赖
# pip install pinecone-client langchain-openai
from pinecone import Pinecone
from langchain_openai import OpenAIEmbeddings
from langchain_pinecone import PineconeVectorStore
# 初始化 Pinecone
pc = Pinecone(api_key="your-pinecone-api-key")
index_name = "rag-demo"
# 创建索引(首次需要)
if index_name not in pc.list_indexes().names():
pc.create_index(
name=index_name,
dimension=1536, # OpenAI text-embedding-3-small
metric="cosine",
spec={"serverless": {"cloud": "aws", "region": "us-east-1"}}
)
index = pc.Index(index_name)
# 初始化 LangChain 向量存储
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
vectorstore = PineconeVectorStore(
index=index,
embedding=embeddings,
text_key="text"
)
# 添加文档
from langchain.schema import Document
docs = [
Document(page_content="Python 性能技巧:使用列表推导式替代循环", metadata={"source": "blog"}),
Document(page_content="NumPy 向量化运算比纯 Python 快 100 倍", metadata={"source": "blog"}),
]
vectorstore.add_documents(docs)
# 查询检索
results = vectorstore.similarity_search("如何 Python 性能", k=3)
for doc in results:
print(doc.page_content)
4.2 Weaviate + LangChain
# 安装依赖
# pip install weaviate-client langchain-openai
import weaviate
from langchain_openai import OpenAIEmbeddings
from langchain_weaviate import WeaviateVectorStore
# 初始化 Weaviate(云托管示例)
client = weaviate.connect_to_wcs(
cluster_url="your-cluster-url.weaviate.network",
auth_credentials=weaviate.auth.AuthApiKey("your-weaviate-api-key"),
)
# 初始化 LangChain 向量存储
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
vectorstore = WeaviateVectorStore(
client=client,
index_name="RagDemo",
text_key="content",
embedding=embeddings,
)
# 添加文档
from langchain.schema import Document
docs = [
Document(page_content="RAG 系统检索精度取决于向量数据库选型", metadata={"category": "tech"}),
Document(page_content="Weaviate 混合搜索提升语义检索准确率", metadata={"category": "tech"}),
]
vectorstore.add_documents(docs)
# 混合搜索(向量 + 关键词)
results = vectorstore.similarity_search(
query="RAG 检索",
k=3,
)
for doc in results:
print(doc.page_content)
client.close() # 关闭连接
4.3 Milvus + LangChain
# 安装依赖
# pip install pymilvus langchain-openai
from pymilvus import MilvusClient
from langchain_openai import OpenAIEmbeddings
from langchain_milvus import Milvus
# 初始化 Milvus(本地示例)
client = MilvusClient(uri="http://localhost:19530")
# 创建 collection
collection_name = "rag_demo"
if client.has_collection(collection_name):
client.drop_collection(collection_name)
client.create_collection(
collection_name=collection_name,
dimension=1536,
)
# 初始化 LangChain 向量存储
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
vectorstore = Milvus(
embedding_function=embeddings,
collection_name=collection_name,
connection_args={"uri": "http://localhost:19530"},
)
# 添加文档
from langchain.schema import Document
docs = [
Document(page_content="Milvus GPU 加速实现亿级向量毫秒检索", metadata={"gpu": True}),
Document(page_content="分布式架构支持水平扩展到百亿向量", metadata={"scale": "large"}),
]
vectorstore.add_documents(docs)
# 查询检索
results = vectorstore.similarity_search("大规模向量检索", k=3)
for doc in results:
print(doc.page_content)
4.4 Migration : de Chroma vers une solution managée
Si Chroma servait au prototype et que vous passez en production, voici le flux en trois étapes :
Étape 1 : exporter les données Chroma
import chromadb
client = chromadb.PersistentClient(path="./chroma_db")
collection = client.get_collection("my_collection")
# 获取所有向量
results = collection.get(include=["embeddings", "metadatas", "documents"])
vectors = results["embeddings"]
metadatas = results["metadatas"]
documents = results["documents"]
Étape 2 : import par lots vers la base cible
# 导入到 Pinecone
from langchain.schema import Document
docs = [
Document(page_content=documents[i], metadata=metadatas[i])
for i in range(len(documents))
]
pinecone_store.add_documents(docs) # 批量上传
Étape 3 : reconstruire l’index et valider
# 验证检索结果一致性
chroma_results = collection.query(query_texts=["test query"], n_results=5)
pinecone_results = pinecone_store.similarity_search("test query", k=5)
# 对比召回率,确认迁移成功
Estimation : 2 à 3 heures pour 1 M de vecteurs de Chroma vers Pinecone (selon bande passante). Exécutez en période creuse.
Chapitre 5 : Synthèse et tableau de décision
5.1 Tableau de décision
| Scénario | Volume | Équipe | Recommandation | Justification |
|---|---|---|---|---|
| Prototype | <1 M | 1–2 pers. | Pinecone gratuit | Zéro exploitation, démarrage rapide |
| Production PME | 1 M–100 M | 3–5 pers., sans ops | Weaviate Cloud | Recherche hybride précise, stockage économique |
| Production requêtes fréquentes | 1 M–100 M | 3–5 pers. | Weaviate Cloud | Requêtes illimitées, meilleur rapport qualité-prix |
| Production requêtes rares | 1 M–100 M | 3–5 pers. | Pinecone payant | Facturation à la requête, coût maîtrisé si faible trafic |
| Grande entreprise | >100 M | 5+ pers. + ops | Milvus auto-hébergé | GPU, extension horizontale, coût long terme |
| Multimodal | Illimité | Illimité | Weaviate | Support multimodal intégré |
| Graphe de connaissances RAG | Illimité | Illimité | Weaviate | Héritage graphe, relations sémantiques |
| Léger / PG existant | <1 M | Illimité | pgvector | Coût marginal nul, extension simple |
5.2 Processus de sélection en trois étapes
-
Évaluer volume et croissance
- Combien de documents aujourd’hui ?
- Projection dans un an ?
- Croissance linéaire ou exponentielle ?
-
Calculer le coût réel
Coût mensuel = stockage + requêtes + exploitationAppliquez les formules ci-dessus. N’oubliez pas l’exploitation — le managé la supprime, l’auto-hébergement peut être moins cher amorti.
-
Valider à petite échelle
- Testez avec 10 % des données
- Mesurez P99, rappel, QPS
- Migrez en volume une fois validé
5.3 Trois erreurs courantes
Erreur 1 : regarder le prix, pas l’exploitation
Beaucoup choisissent l’open source « parce que gratuit », mais le coût humain est sous-estimé. Un ingénieur Kubernetes : 50 000 $+/an ; former l’équipe existante : 1 à 2 mois. Le managé semble cher, mais économisez l’exploitation dans le calcul total.
Erreur 2 : ignorer l’impact de la dimension des vecteurs
text-embedding-3-large produit 3072 dimensions — 2× text-embedding-3-small (1536). Plus la dimension est élevée, plus latence et stockage augmentent. Fixez d’abord le modèle d’embedding avant de choisir la base.
Erreur 3 : découvrir trop tard l’incompatibilité avec le modèle d’embedding
Pinecone ne stocke que les vecteurs — vous générez les embeddings vous-même. Weaviate intègre la vectorisation (OpenAI, Cohere, modèles locaux). Si vous voulez « uploader un document et vectoriser automatiquement », vérifiez cette capacité avant de choisir.
Il n’y a pas de réponse standard. Clarifiez votre scénario, calculez le coût réel, validez à petite échelle avant le déploiement complet. Cet article devrait vous aider à éviter les pièges et choisir la solution adaptée.
Si vous rencontrez d’autres problèmes en pratique, n’hésitez pas à commenter — nous continuons aussi à apprendre sur le terrain.
FAQ
Pinecone, Weaviate ou Milvus — lequel a la latence la plus faible ?
Lequel coûte le moins cher en cas de requêtes fréquentes ?
Sans équipe d'exploitation, lequel choisir ?
Combien de temps pour migrer depuis Chroma ?
Comment choisir la dimension des vecteurs ?
Graphe de connaissances + RAG : lequel choisir ?
14 min de lecture · Publié le: 27 avr. 2026 · Mis à jour le: 27 juil. 2026
Guide d'ingénierie RAG
Si vous arrivez depuis la recherche, le plus rapide est de passer à l’article précédent ou suivant de cette série.
Précédent
RAG + Agent : architecture des applications IA de nouvelle génération
De la RAG traditionnelle à la RAG agentique : évolution architecturale, 10 modèles RAG, comparaison des frameworks, feuille de route entreprise et cas pratique de service client intelligent
Partie 1 sur 5
Suivant
Optimiser un système RAG : équilibrer précision de retrieval et qualité de génération
Le retrieval RAG est imprécis ? Cet article décompose en cinq volets le traitement des requêtes, la recherche hybride, le reranking, le chunking et la boucle d'évaluation, avec un cadre de décision précision/latence pour passer d'évaluations insuffisantes à un système maîtrisé.
Partie 3 sur 5



Commentaires
Connectez-vous avec GitHub pour laisser un commentaire