NewsIA
En direct
Tutoriels & Guides

RAG production avec Supabase pgvector : guide 2026

Construire un RAG production-ready : embeddings Voyage-3, pgvector Supabase, reranking Cohere. Code prêt à déployer, tutoriel 2026.


PartagerXLinkedInEmail
RAG production avec Supabase pgvector : guide 2026
L'essentiel en 30 secondes
  • Tutoriel pour construire un système RAGRetrieval-Augmented Generation, une technique qui combine un LLM avec une base documentaire pour ancrer ses réponses dans des sources. en production avec Supabase et pgvector.
  • Stack : Supabase (pgvector) + [OpenAI](https://openai.com/blog) ada-3 (embeddings) + Claude Sonnet 4.7 (génération).
  • Coût mensuel estimé : 50 à 500 € selon le volume.
  • Code complet TypeScript fourni, déployable sur Vercel en quelques heures.

RAG est en 2026 la brique IA d'entreprise la plus rentable. Pour quelques heures de mise en place, vous obtenez un assistant qui hallucine 10× moins.

Si vous voulez faire répondre Claude ou GPT précisément sur vos propres documents (manuels produit, base de connaissances, jurisprudence interne), vous avez besoin d'un système RAG. Voici comment en construire un en production avec une stack moderne et abordable.

📚
RAG (RetrievalLa recherche rapide dans une base documentaire pour sélectionner l'information pertinente, première étape d'un système RAG. Augmented Generation)

Architecture combinant recherche vectorielle dans une base documentaire et génération par LLMLarge Language Model, un modèle de langage entraîné sur des milliards de paramètres pour générer et comprendre du texte.. L'IA répond uniquement en s'appuyant sur vos sources, avec citations. Concept popularisé par un papier Meta en 2020, devenu le standard entreprise en 2026.

Supabase

Plateforme open sourceUn logiciel dont le code source, et parfois les poids du modèle, sont publiés librement et réutilisables. créée en 2020, alternative à Firebase. Construit sur PostgreSQL avec APIApplication Programming Interface, le canal d'accès programmatique à un service ou à un modèle. auto-générée. Offre une extension pgvector qui transforme PostgreSQL en base vectorielle performante. Free tier généreux : 500 MB DB + 1 GB stockage + 50k requêtes API.

Étape 1Setup Supabase + pgvector

Configurer la base vectorielle

  • Créez un compte sur supabase.com (free tier suffisant pour démarrer)
  • Créez un nouveau projet (région Europe pour latenceLe temps écoulé entre l'envoi d'une requête et la réception de la réponse complète d'un modèle. + RGPDRèglement Général sur la Protection des Données, le cadre européen sur la vie privée numérique.)
  • Dans le SQL Editor, activez l'extension : create extension vector;
  • Créez la table avec colonne vectorielle (voir ci-dessous)
  • create table documents (
      id bigserial primary key,
      content text,
      metadata jsonb,
      embedding vector(1536)
    );
    
    create index on documents using ivfflat (embedding vector_cosine_ops);
    
    vector(1536)

    Le nombre 1536 correspond à la dimension des embeddings OpenAI text-embeddingLa représentation numérique (un vecteur) d'un mot, d'une phrase ou d'une image dans un espace que le modèle comprend.-3-small. Pour [Mistral](/modeles/mistral) Embed : 1024. Pour Cohere v4 : 1024. Toujours faire correspondre la dimension de la table avec celle de votre modèle d'embedding.

    Étape 2Indexer vos documents

    Le pipeline d'ingestion

  • Découper les documents en chunks de 500 à 1500 caractères avec recouvrement de 100
  • Générer un embedding pour chaque chunk via OpenAI ada-3
  • Stocker dans Supabase avec metadata (source, page, section)
  • Indexer avec pgvector pour recherche rapide
  • import { createClient } from '@supabase/supabase-js';
    import OpenAI from 'openai';
    
    const supabase = createClient(URL, KEY);
    const openai = new OpenAI();
    
    async function ingest(text: string, source: string) {
      const chunks = chunkText(text, 1000, 100);
      for (const chunk of chunks) {
        const { data: emb } = await openai.embeddings.create({
          model: 'text-embedding-3-small',
          input: chunk,
        });
        await supabase.from('documents').insert({
          content: chunk,
          metadata: { source },
          embedding: emb.data[0].embedding,
        });
      }
    }
    
    Étape 3La recherche vectorielle

    Construire la requête de retrieval

    create or replace function match_documents (
      query_embedding vector(1536),
      match_count int default 5
    ) returns table (
      id bigint,
      content text,
      similarity float
    ) language sql as $$
      select id, content, 1 - (embedding <=> query_embedding) as similarity
      from documents
      order by embedding <=> query_embedding
      limit match_count;
    $$;
    

    L'opérateur <=> de pgvector calcule la distance cosinus entre deux vecteurs. C'est le cœur mathématique du retrieval moderne.

    Étape 4La génération avec Claude

    Connecter le LLM

    import [Anthropic](https://www.anthropic.com/news) from '@anthropic-ai/sdk';
    const anthropic = new Anthropic();
    
    async function ask(question: string) {
      // 1. Embedding de la question
      const { data: emb } = await openai.embeddings.create({
        model: 'text-embedding-3-small',
        input: question,
      });
      
      // 2. Retrieval des chunks pertinents
      const { data: chunks } = await supabase.rpc('match_documents', {
        query_embedding: emb.data[0].embedding,
        match_count: 5,
      });
      
      // 3. Construction du prompt
      const context = chunks.map(c => c.content).join('\n\n');
      const prompt = `Réponds uniquement à partir du contexte suivant. Cite tes sources.
    
    <context>
    ${context}
    </context>
    
    Question: ${question}`;
      
      // 4. Appel Claude
      const response = await anthropic.messages.create({
        model: 'claude-sonnet-4-7',
        max_tokens: 1024,
        messages: [{ role: 'user', content: prompt }],
      });
      
      return response.content[0].text;
    }
    
    500€Coût max/mois
    5Chunks par requête
    200msLatence retrieval
    90%Cas entreprise

    Estimation des coûts

    Composant Free tier Production légère Production forte
    Supabase 0 € 25 €/mois 599 €/mois
    OpenAI embeddings ~5 €/mois 20 €/mois 100 €/mois
    Claude API ~30 €/mois 100 €/mois 1000 €/mois
    Total ~35 € ~145 € ~1700 €

    Les 3 pièges à éviter

    Erreurs classiques

    1. Mauvais découpage : couper au milieu d'une phrase ruine la pertinence. Toujours découper sur les paragraphes ou phrases.
    2. Pas de "réponds uniquement à partir du contexteLa fenêtre de contexte : le nombre maximum de tokens qu'un modèle peut traiter en une seule requête (ex : 200k, 1M)." : sans cette consigne, Claude redevient généraliste et hallucine.
    3. Top-K trop élevé : 5 chunks suffisent. Plus = bruit + coût inutile.

    Théorie RAGRAG : comprendre la génération augmentée par récupération

    Pourquoi RAG aideHallucinations IA : pourquoi les modèles inventent

    Niveau au-dessusAgents IA : le guide complet 2026

    Sources

    Architecture détaillée du RAG

    Un RAG production-ready combine 5 briques :

    1. Ingestion : extraction texte depuis docs (PDF, HTML, MD)
    2. Chunking : découpage en passages de 200-500 tokens
    3. Embedding : conversion en vecteurs (Voyage-3, OpenAI ada-3)
    4. Stockage : pgvector dans Supabase Postgres
    5. Retrieval + reranking : recherche similarité + Cohere rerank
    6. Generation : promptLes instructions ou questions écrites envoyées à un modèle d'IA pour obtenir une réponse. avec contexte + Claude Opus 4.7

    Schéma Supabase pour pgvector

    -- Activer l'extension
    create extension if not exists vector;
    
    -- Table des documents
    create table documents (
      id uuid primary key default uuid_generate_v4(),
      source text not null,
      metadata jsonb,
      content text not null,
      embedding vector(1024) -- Voyage-3 = 1024 dims
    );
    
    -- Index HNSW pour la recherche
    create index on documents using hnsw (embedding vector_cosine_ops);
    
    -- Fonction de recherche
    create function match_documents (
      query_embedding vector(1024),
      match_threshold float,
      match_count int
    ) returns table (id uuid, content text, similarity float)
    language sql stable as $$
      select id, content, 1 - (embedding <=> query_embedding) as similarity
      from documents
      where 1 - (embedding <=> query_embedding) > match_threshold
      order by embedding <=> query_embedding
      limit match_count;
    $$;
    

    Choisir son modèle d'embedding

    Modèle Vendor Dimensions Prix /M tokens Qualité
    Voyage-3 Voyage AI (Anthropic) 1024 0,12$ ⭐⭐⭐⭐⭐
    text-embedding-3-large OpenAI 3072 0,13$ ⭐⭐⭐⭐
    jina-embeddings-v3 Jina AI 1024 0,02$ ⭐⭐⭐⭐
    bge-large-en-v1.5 BAAI (open source) 1024 0 (self-host) ⭐⭐⭐
    Mistral embed Mistral 1024 0,10$ ⭐⭐⭐⭐

    Voyage-3 est notre recommandation pour la qualité, Mistral embed pour la souveraineté FR.

    Reranking : pourquoi c'est crucial

    La recherche par similarité cosinus retourne des passages "proches" mais pas forcément pertinents. Un reranker (Cohere Rerank ou Voyage Rerank) repondère les résultats selon la pertinence sémantique fine.

    // Pseudo-code reranking
    const initialResults = await pgvector.search(query, { topK: 50 });
    const reranked = await cohere.rerank({
      query,
      documents: initialResults.map(r => r.content),
      topN: 5,
    });
    const finalContext = reranked.results.map(r => r.document);
    

    Gain typique : +20-40% sur la précision de la réponse finale.

    Chunking : la science cachée

    Un chunking mal pensé sabote tout le RAG. Recommandations :

    • Taille : 200-500 tokens (pas plus)
    • Overlap : 50 tokens entre chunks consécutifs
    • Respecter la structure : ne pas couper au milieu d'une phrase ou paragraphe
    • Header injection : injecter le titre du document dans chaque chunk
    • Metadata : tagger chaque chunk (date, source, type)

    Coût mensuel pour un RAG production

    Profil : 10 000 documents, 1000 requêtes/jour.

    • Embedding initial : 10k docs × 500 tokens = 5M tokens × 0,12$ = 600$ (one-shot)
    • Embedding nouvelles requêtes : 1000 × 100 tokens × 30j = 3M tokens × 0,12$ = 360$/mois
    • Reranking : 1000 × 30 × 0,01$ = 300$/mois
    • LLM final (Claude Sonnet 4.7) : ~150$/mois
    • Supabase : 25$/mois Pro tier
    • Total mensuel : ~835$/mois pour un RAG sérieux

    Pièges à éviter

  • Chunking trop gros : dilue la pertinence
  • Chunking trop petit : perd le contexte
  • Pas de reranking : précision médiocre
  • Pas de metadata : impossible de filtrer par source/date
  • Embedding obsolète : ré-embedder quand le modèle évolue
  • Pour aller plus loin

    Points clés à connaître

    Pour les développeurs

    Les outils Claude Code 2 et Cursor 2 sont devenus indispensables en 2026. Pour aller plus loin, voir notre comparatif Cursor 2 vs Claude Code 2.

    Pour les PME françaises

    Mistral Le Chat Enterprise (15€/user) reste l'option souveraine privilégiée. Pour les usages internationaux, Claude Pro (22€) ou ChatGPT Plus (20$) offrent une qualité premium.

    Pour les créateurs de contenu

    Midjourney v7 pour l'image, Veo 3 pour la vidéo, Suno V5 pour la musique, ElevenLabs ou OpenAI Voice pour l'audio. Stack complète ~150€/mois.

    Pour la souveraineté EU

    L'AI Act européen impose des obligations renforcées dès août 2026. Mistral, Aleph Alpha (Allemagne) et Pollen Robotics (France) offrent des alternatives souveraines.

    Pour la recherche académique

    Les laboratoires français (INRIAInstitut National de Recherche en Informatique et Automatique, l'institut public français des sciences du numérique., CNRS, 3IA, IHES) restent à la pointe sur le ML théorique. Les outils comme NotebookLM et Claude Projects facilitent la synthèse de papers.

    Questions fréquentes

    pgvector tient-il à l'échelle ?
    Oui, jusqu'à plusieurs millions de chunks sans problème, à condition d'utiliser l'index HNSW. Au-delà de 100M chunks, des solutions dédiées comme Pinecone ou Weaviate peuvent devenir pertinentes, mais pour 99% des cas d'usage, pgvector est largement suffisant.
    Faut-il vraiment un reranker ?
    Quasi-toujours oui. Le reranker apporte +30% de précision en moyenne pour ~200ms de latence supplémentaire et 0,002$ par requête. C'est le meilleur ROI de toute la chaîne RAG. Skip uniquement pour des prototypes ou des cas ultra-simples.
    Comment gérer les documents multilingues ?
    Deux approches : (1) un embedder multilingue (Voyage-3, Cohere Embed v3 supportent 100+ langues) sur tous les contenus, ou (2) un embedder par langue avec routing au moment de la query. La première est plus simple, la seconde donne légèrement de meilleurs résultats sur des langues spécifiques (FR avec bge-large-fr par exemple).
    Quel modèle de génération utiliser ?
    Pour la majorité des cas, Claude Sonnet 4.7 ou Mistral Large 3 offrent le meilleur rapport qualité/prix. Pour des cas où la précision est critique (médical, juridique), Claude Opus 4.7 vaut le surcoût. Pour le low-cost massif, Llama 5 70B via Together est excellent.
    Cet outil est-il conforme au RGPD et à l'AI Act européen ?
    La conformité dépend du déploiement. Les versions cloud hébergées en région EU (AWS Paris, Azure West Europe, Google Cloud Paris) offrent une garantie technique, mais restent soumises au Cloud Act américain. Pour une souveraineté complète, privilégiez Mistral AI (français), Aleph Alpha (allemand) ou un déploiement on-premise. L'AI Act impose depuis août 2025 des obligations renforcées : documentation, supervision humaine pour les usages à haut risque, étiquetage des contenus générés. Consultez votre DPO pour valider votre cas d'usage.
    Quelle alternative française ou européenne existe-t-il ?
    L'écosystème européen offre plusieurs alternatives crédibles. Mistral AI (Paris, 22 Md€ de valorisation) propose Le Chat, Codestral et Mistral Large 3 avec hébergement souverain. Pour les modèles open source, Mistral 8x22B et les variantes Hugging Face de Pollen Robotics (Bordeaux) sont déployables on-premise. Sur la productivité, Doctolib AI, Pennylane et Qonto intègrent de l'IA respectant les standards français. Consultez notre cartographie complète de l'écosystème IA français pour les acteurs majeurs.

    À lire aussi