Vector Databases : pgvector vs Pinecone vs Weaviate : Comparatif Complet
pgvector, Pinecone, Weaviate, LanceDB, Qdrant… comment choisir sa vector database ? Comparatif complet avec intégration Agno et cas pratique Supabase.
Qu'est-ce qu'une Vector Database ?
Une base de données classique (PostgreSQL, MySQL) stocke des données structurées et répond à des requêtes exactes : "Trouve tous les utilisateurs dont l'âge est 30". Elle compare des valeurs.
Une vector database stocke des vecteurs (listes de nombres flottants) et répond à des requêtes de similarité : "Trouve les 5 vecteurs les plus proches de ce vecteur". Elle compare des directions dans un espace à haute dimension.
Pourquoi la Recherche Vectorielle Change Tout
Recherche classique (SQL) :
SELECT * FROM documents WHERE content LIKE '%machine learning%'
→ Trouve exactement les mots "machine learning"
→ Rate : "apprentissage automatique", "ML", "deep learning"
Recherche vectorielle :
SELECT * FROM documents ORDER BY embedding <-> query_embedding LIMIT 5
→ Trouve les documents sémantiquement proches
→ Trouve aussi : "apprentissage automatique", "réseaux de neurones", "IA"
Architecture d'une Vector Database
ANN (Approximate Nearest Neighbor) : les vector databases n'effectuent pas une recherche exacte (trop lente sur des millions de vecteurs), mais une recherche approximative via des index spécialisés (HNSW, IVF, LSH). Le compromis est un léger perte de précision contre un gain de vitesse considérable (1000x plus rapide).
Tableau Comparatif des 6 Principales Vector Databases
| Base | Hébergement | Coût | Latence | Scalabilité | Cas d'usage | Agno Support |
|---|---|---|---|---|---|---|
| pgvector | Self-hosted / Supabase | Gratuit (infra) | Faible (<10ms) | Moyenne (1M-10M vecteurs) | Production PostgreSQL existante | Natif |
| LanceDB | Embarqué (fichier) | Gratuit | Très faible (<5ms) | Faible-Moyenne | Prototypage, apps légères | Natif |
| Pinecone | Cloud managé | Pay-as-you-go | Très faible (<10ms) | Très haute (milliards) | Production sans infra | Natif |
| Weaviate | Self-hosted / Cloud | Gratuit + Cloud | Faible (<15ms) | Haute | Recherche hybride avancée | Natif |
| Qdrant | Self-hosted / Cloud | Gratuit + Cloud | Très faible (<5ms) | Haute | Haute performance, filtrage complexe | Natif |
| Chroma | Embarqué / Self-hosted | Gratuit | Faible | Faible-Moyenne | Prototypage Python | Natif |
Détail des Décisions
pgvector : si vous avez déjà PostgreSQL, c'est le choix évident. Pas de nouvelle infrastructure, transactions ACID, backup standard. Supabase le propose gratuitement.
LanceDB : aucun serveur à installer, données dans un fichier local. Idéal pour débuter ou pour des applications desktop/edge.
Pinecone : leader du marché cloud. Parfait si vous voulez une solution managée sans vous soucier de l'infra. Facturation à l'usage.
Qdrant : performances brutes exceptionnelles, filtrage avancé par métadonnées, open-source. Excellent pour les cas où la latence est critique.
Weaviate : hybrid search natif (vectoriel + BM25), graphe de connaissances intégré. Idéal pour les recherches complexes multi-critères.
Chroma : très simple à utiliser pour le prototypage Python, mais pas recommandé pour la production à grande échelle.
Intégration dans Agno
Agno propose des adaptateurs natifs pour toutes les principales vector databases. L'interface est unifiée : vous changez la vector DB sans modifier votre code métier.
pgvector
from agno.vectordb.pgvector import PgVector, SearchType
from agno.knowledge.embedder.openai import OpenAIEmbedder
from agno.knowledge.knowledge import Knowledge
knowledge = Knowledge(
vector_db=PgVector(
db_url="postgresql+psycopg://user:pass@localhost:5432/mydb",
table_name="documents",
search_type=SearchType.hybrid,
embedder=OpenAIEmbedder(id="text-embedding-3-small"),
),
)
LanceDB
from agno.vectordb.lancedb import LanceDb, SearchType
from agno.knowledge.embedder.openai import OpenAIEmbedder
from agno.knowledge.knowledge import Knowledge
knowledge = Knowledge(
vector_db=LanceDb(
uri="tmp/lancedb", # Dossier local
table_name="docs",
search_type=SearchType.vector,
embedder=OpenAIEmbedder(id="text-embedding-3-small"),
),
)
Qdrant
from agno.vectordb.qdrant import Qdrant
from agno.knowledge.embedder.openai import OpenAIEmbedder
from agno.knowledge.knowledge import Knowledge
knowledge = Knowledge(
vector_db=Qdrant(
collection="mes_documents",
url="http://localhost:6333", # Ou votre instance cloud
embedder=OpenAIEmbedder(id="text-embedding-3-small"),
),
)
L'interface Agno est unifiée. knowledge.insert(), knowledge.search() et agent.knowledge fonctionnent de la même manière quelle que soit la vector database choisie. Vous pouvez changer de VDB en une ligne de code.
Micro-exercice : RAG avec LanceDB Local
LanceDB est parfait pour commencer : zéro infrastructure, données dans un fichier local, aucune configuration réseau.
Installation
pip install agno openai lancedb tantivy pypdf
# tantivy est nécessaire pour la recherche hybride (BM25)
Code complet
# rag_lancedb.py
import os
from agno.agent import Agent
from agno.knowledge.embedder.openai import OpenAIEmbedder
from agno.knowledge.knowledge import Knowledge
from agno.models.openai import OpenAIResponses
from agno.vectordb.lancedb import LanceDb, SearchType
# Configuration
os.environ["OPENAI_API_KEY"] = "sk-..."
knowledge = Knowledge(
vector_db=LanceDb(
uri="tmp/lancedb",
table_name="docs",
search_type=SearchType.hybrid, # Sémantique + BM25
embedder=OpenAIEmbedder(id="text-embedding-3-small"),
),
)
# Charger un PDF (s'exécute une seule fois, LanceDB persiste les données)
knowledge.insert(
url="https://agno-public.s3.amazonaws.com/recipes/ThaiRecipes.pdf"
)
# Créer l'agent
agent = Agent(
model=OpenAIResponses(id="gpt-4o-mini"),
knowledge=knowledge,
instructions=[
"Cherche dans ta base de connaissances avant de répondre.",
"Si l'information n'est pas dans tes documents, dis-le clairement.",
],
markdown=True,
)
# Interroger
agent.print_response("Quels ingrédients pour un Pad Thai ?", stream=True)
python rag_lancedb.py
# La première exécution indexe le PDF (~30 secondes)
# Les exécutions suivantes sont instantanées (données persistées dans tmp/lancedb/)
Intégrer pgvector avec Supabase
Supabase propose pgvector en natif, gratuitement sur le tier gratuit. C'est la combinaison idéale pour les projets Next.js / Python en production.
Étape 1 : Activer pgvector dans Supabase
Étape 2 : Récupérer l'URL de connexion
Dans votre projet Supabase : Settings → Database → Connection string → URI.
Format : postgresql://postgres.[project-ref]:[password]@aws-0-eu-west-3.pooler.supabase.com:5432/postgres
Étape 3 : Connexion depuis Agno
from agno.vectordb.pgvector import PgVector, SearchType
from agno.knowledge.embedder.openai import OpenAIEmbedder
from agno.knowledge.knowledge import Knowledge
from agno.agent import Agent
from agno.models.openai import OpenAIResponses
import os
SUPABASE_DB_URL = os.environ["SUPABASE_DB_URL"]
# Format attendu par psycopg3 :
# postgresql+psycopg://postgres.[ref]:[password]@aws-0-eu-west-3.pooler.supabase.com:5432/postgres
knowledge = Knowledge(
vector_db=PgVector(
db_url=SUPABASE_DB_URL,
table_name="knowledge_base",
search_type=SearchType.hybrid,
embedder=OpenAIEmbedder(id="text-embedding-3-small"),
),
)
# Charger vos documents
knowledge.insert(path="./docs/")
agent = Agent(
model=OpenAIResponses(id="gpt-4o"),
knowledge=knowledge,
instructions="Réponds en français, basé sur ta base de connaissances.",
markdown=True,
)
agent.print_response("Résume la documentation", stream=True)
Supabase + pgvector = stack idéale en production. Vous bénéficiez de l'infrastructure PostgreSQL de Supabase (backups automatiques, monitoring, RLS) avec les capacités vectorielles pour votre RAG. Pas de nouvelle infrastructure à maintenir.
Arbre de Décision : Quelle VDB Choisir ?
Commencez toujours par LanceDB pour prototyper. Migrez vers pgvector/Supabase quand vous passez en production. Si vous avez besoin de scalabilité massive (>10M vecteurs), regardez Pinecone ou Qdrant Cloud.
Specialiste IA — Master Intelligence Artificielle
Diplome d'un Master en Intelligence Artificielle, je travaille au quotidien sur des projets IA en entreprise. J'ai cree IwanttolearnAI pour rendre l'apprentissage de l'IA accessible a tous, gratuitement.
Continuer a apprendre
Stratégies de Chunking et Indexation pour le RAG
La qualité d'un RAG repose à 80% sur le chunking. Découvrez comment découper vos documents pour maximiser la pertinence des réponses de votre agent IA.
GraphRAG et Hybrid Search : BM25 + Vecteur
Le RAG vectoriel pur a ses limites. Hybrid search (BM25 + embedding) et GraphRAG résolvent les cas complexes — apprenez à les implémenter avec Agno et LanceDB.
Évaluer un Système RAG avec Ragas
Comment savoir si votre RAG fonctionne vraiment ? Découvrez Ragas, le framework d'évaluation standard, et apprenez à mesurer faithfulness, relevancy et recall.