Template n8n · Pack Assistant RAG
Exposer une API question-réponse sur ses documents avec n8n
Le chat n8n ne s'intègre pas partout — une API, si. Ce workflow expose un endpoint POST /ask : envoyez {"question": "…"} et recevez la réponse fondée sur vos documents en JSON structuré, prête à afficher dans votre site, votre CRM ou votre outil interne.
- POST /ask (Webhook)triggerWebhook
- Question valide ?IF (condition)
- Répondre depuis les documentsChaîne RAG (Q&R)
- Base vectorielle SupabaseBase vectorielle Supabase
- Formater la réponseSet (champs)
- Réponse JSONRéponse webhook
- Erreur 400Réponse webhook
Sous-nodes IA rattachés
- Modèle OpenAIModèle OpenAI
- RetrieverRetriever
- Embeddings OpenAIEmbeddings OpenAI
$ n8n import:workflow --input=api-question-reponse-rag.json ✔ Import réussi — 10 nodes, connexions valides
Le problème que ça règle
Une fois le RAG en place, chaque équipe veut l'appeler depuis son propre outil : le widget du site, le back-office, un canal support. Multiplier les chatbots serait absurde ; il faut une interface programmatique unique devant la même base vectorielle.
Ce template est cette interface : validation d'entrée, erreur 400 explicite, réponse JSON horodatée. C'est aussi le point de départ naturel pour brancher un frontend maison sur votre assistant.
Comment le workflow fonctionne, node par node
- 01
POST /ask (Webhook)
WebhookEndpoint HTTP POST (chemin flowkit-ask) attendant un corps JSON {"question": "…"}. Le mode responseNode laisse le workflow contrôler entièrement la réponse HTTP.
- 02
Question valide ?
IF (condition)Rejette les requêtes sans question exploitable avant de dépenser le moindre token — hygiène de base d'une API.
- 03
Répondre depuis les documents
Chaîne RAG (Q&R)Même chaîne RAG que le chatbot du pack : passages récupérés injectés dans le prompt, réponse contrainte au contexte, citations des sources.
- 04
Modèle OpenAI
Modèle OpenAISous-node ai_languageModel (gpt-4o-mini) — même modèle que le chat pour des réponses cohérentes entre canaux.
- 05
Retriever
RetrieverRecherche les 4 passages les plus pertinents dans la base vectorielle avant génération.
- 06
Base vectorielle Supabase
Base vectorielle SupabaseMode retrieve sur la table documents — la même que celle alimentée par les workflows d'ingestion du pack.
- 07
Embeddings OpenAI
Embeddings OpenAIVectorise la question entrante dans le même espace que le corpus indexé.
- 08
Formater la réponse
Set (champs)Construit l'objet de sortie : réponse, modèle utilisé, horodatage — un contrat d'API stable pour vos intégrations.
- 09
Réponse JSON
Réponse webhookRenvoie le JSON final avec un statut 200.
- 10
Erreur 400
Réponse webhookBranche d'échec de la validation : {"error": "question manquante"} — l'appelant sait immédiatement corriger son appel.
Ce qu'il faut pour le faire tourner
- n8n ≥ 1.60 avec les nodes LangChain
- Une base Supabase pgvector alimentée (ingestion PDF ou Notion du pack)
- Une clé API OpenAI
- Recommandé : une authentification sur le webhook (header API key) avant exposition publique
Pistes de personnalisation
- Ajouter l'authentification par en-tête dans les options du webhook avant toute exposition sur internet
- Renvoyer aussi les sources utilisées en interrogeant les métadonnées des passages récupérés
- Tracer les questions/réponses dans une table Supabase pour analyser ce que cherchent vos utilisateurs
FAQ
Questions fréquentes
Comment importer ce template dans n8n ?
Importez api-question-reponse-rag.json via « Import from File », associez OpenAI et Supabase, activez, puis testez : curl -X POST https://votre-n8n/webhook/flowkit-ask -H 'Content-Type: application/json' -d '{"question":"…"}'.
Quel temps de réponse attendre ?
De 2 à 5 secondes typiquement : recherche vectorielle (rapide) plus génération LLM (le gros du délai). Pour un widget web, affichez un indicateur d'attente ; le modèle mini maintient la latence basse.
Puis-je appeler cette API depuis un site public ?
Techniquement oui, mais ajoutez d'abord une authentification et une limitation de débit (reverse proxy ou node de comptage) : un endpoint LLM ouvert, c'est votre facture OpenAI ouverte.