IntermédiaireRAG
18 min de lecture11 vues

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

BaseHébergementCoûtLatenceScalabilitéCas d'usageAgno Support
pgvectorSelf-hosted / SupabaseGratuit (infra)Faible (<10ms)Moyenne (1M-10M vecteurs)Production PostgreSQL existanteNatif
LanceDBEmbarqué (fichier)GratuitTrès faible (<5ms)Faible-MoyennePrototypage, apps légèresNatif
PineconeCloud managéPay-as-you-goTrès faible (<10ms)Très haute (milliards)Production sans infraNatif
WeaviateSelf-hosted / CloudGratuit + CloudFaible (<15ms)HauteRecherche hybride avancéeNatif
QdrantSelf-hosted / CloudGratuit + CloudTrès faible (<5ms)HauteHaute performance, filtrage complexeNatif
ChromaEmbarqué / Self-hostedGratuitFaibleFaible-MoyennePrototypage PythonNatif

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

-- Dans l'éditeur SQL Supabase
create extension if not exists vector;

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