FlowKit

Template n8n · Pack Assistant RAG

Ingérer des PDF dans Supabase pgvector avec n8n

Premier maillon d'un RAG : ce workflow expose un webhook qui accepte vos PDF, en extrait le texte, le découpe en fragments, calcule les embeddings et insère le tout dans une table Supabase pgvector. Un curl suffit pour indexer un document.

Par Clément Lacaille (Tech-Bharat) · mis à jour le 11 juillet 2026 · notre méthode

Pack Assistant RAG — 119 €

Ce workflow + 3 autres, JSON validés, guide en français, garantie 14 jours

Voir le pack
Canvas généré depuis l'export JSON livréworkflows/ingestion-pdf-supabase-pgvector.json · 6 nodes · n8n
Dépôt de PDF (Webhook) — n8n-nodes-base.webhook v2Dépôt de PDF (Webho…WebhookInsérer dans la base vectorielle — @n8n/n8n-nodes-langchain.vectorStoreSupabase v1.1Insérer dans la bas…Base vectorielle Supaba…Confirmer l'ingestion — n8n-nodes-base.respondToWebhook v1.1Confirmer l'ingesti…Réponse webhookChargeur de PDF — @n8n/n8n-nodes-langchain.documentDefaultDataLoader v1Chargeur de PDFChargeur de documentsDécoupage du texte — @n8n/n8n-nodes-langchain.textSplitterRecursiveCharacterTextSplitter v1Découpage du texteDécoupage de texteEmbeddings OpenAI — @n8n/n8n-nodes-langchain.embeddingsOpenAi v1.2Embeddings OpenAIEmbeddings OpenAI
flux de données sous-node IA3 notes explicatives dans le canvas (non dessinées)
workflows/ingestion-pdf-supabase-pgvector.json5,8 Ko · 6 nodes
{
  "name": "FlowKit — Ingestion de PDF dans Supabase pgvector",
  "nodes": [
    {"name": "Dépôt de PDF (Webhook)", "type": "n8n-nodes-base.webhook", "typeVersion": 2, "position": [-220,0]},
    {"name": "Insérer dans la base vectorielle", "type": "@n8n/n8n-nodes-langchain.vectorStoreSupabase", "typeVersion": 1.1, "position": [0,0]},
    {"name": "Confirmer l'ingestion", "type": "n8n-nodes-base.respondToWebhook", "typeVersion": 1.1, "position": [220,0]},
    {"name": "Chargeur de PDF", "type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader", "typeVersion": 1, "position": [-80,200]},
    {"name": "Découpage du texte", "type": "@n8n/n8n-nodes-langchain.textSplitterRecursiveCharacterTextSplitter", "typeVersion": 1, "position": [-80,400]},
    {"name": "Embeddings OpenAI", "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi", "typeVersion": 1.2, "position": [140,200]}
  ]
}

Extrait réel du fichier livré (structure seulement : paramètres des nodes et prompts font partie du pack payant).

Le problème que ça règle

Un chatbot documentaire ne vaut que par son index : sans pipeline d'ingestion fiable, la base vectorielle se remplit à la main, mal, puis plus du tout. L'ingestion est la partie ingrate du RAG — extraction, découpage, vectorisation, métadonnées — et c'est précisément celle qu'on gagne à standardiser.

En l'exposant comme un simple endpoint HTTP, ce template rend l'indexation triviale : depuis un terminal, un formulaire interne ou un autre workflow, tout ce qui sait envoyer un fichier peut alimenter votre assistant.

Comment le workflow fonctionne, node par node

  1. 01

    Dépôt de PDF (Webhook)

    Webhook

    Reçoit le PDF en multipart (curl -F) sur le chemin flowkit-ingest. Le fichier arrive en donnée binaire, prêt pour l'extraction.

  2. 02

    Insérer dans la base vectorielle

    Base vectorielle Supabase

    Node racine en mode insert vers la table documents : il orchestre chargement, découpage et embeddings de ses trois sous-nodes, puis écrit fragments, métadonnées et vecteurs dans Supabase.

  3. 03

    Chargeur de PDF

    Chargeur de documents

    Sous-node ai_document : extrait le texte du binaire PDF page par page — aucune conversion préalable nécessaire.

  4. 04

    Découpage du texte

    Découpage de texte

    Sous-node ai_textSplitter : fragments de 1 000 caractères avec 150 de chevauchement, le meilleur compromis précision/rappel pour des documents professionnels.

  5. 05

    Embeddings OpenAI

    Embeddings OpenAI

    Sous-node ai_embedding : text-embedding-3-small (1 536 dimensions), aligné avec la colonne vector(1536) de la table — la dimension doit correspondre des deux côtés.

  6. 06

    Confirmer l'ingestion

    Réponse webhook

    Renvoie une confirmation JSON à l'appelant une fois l'indexation terminée : intégrable dans un script de chargement en masse.

Ce qu'il faut pour le faire tourner

  • n8n ≥ 1.60 avec les nodes LangChain
  • Un projet Supabase avec pgvector activé et la fonction match_documents (SQL complet dans le guide du pack)
  • Une clé API OpenAI (embeddings)
  • Vos PDF au format texte (pour des scans, ajoutez une étape OCR en amont)

Pistes de personnalisation

  • Ajouter des métadonnées (client, version, confidentialité) au chargeur pour filtrer les recherches ensuite
  • Ajuster chunkSize et chunkOverlap selon vos documents : plus courts pour des FAQ, plus longs pour des contrats
  • Chaîner l'ingestion depuis Google Drive : un trigger Drive remplace le webhook, le reste ne bouge pas

FAQ

Questions fréquentes

Comment importer ce template dans n8n ?

Importez ingestion-pdf-supabase-pgvector.json via « Import from File », associez vos credentials Supabase et OpenAI, exécutez le SQL pgvector fourni dans le guide, activez, puis testez : curl -F 'file=@document.pdf' https://votre-n8n/webhook/flowkit-ingest.

Quelle taille de PDF le workflow accepte-t-il ?

Des rapports de plusieurs centaines de pages passent sans problème ; la limite vient surtout du corps de requête maximal de votre reverse proxy (souvent 100 Mo par défaut sur n8n self-hosted). Pour des corpus entiers, appelez le webhook en boucle, un fichier à la fois.

Puis-je réingérer un document mis à jour ?

Oui, mais pensez à supprimer d'abord ses anciens fragments (delete from documents where metadata->>'source' = '…'), sinon les deux versions coexisteront dans les résultats de recherche.