This workflow corresponds to n8n.io template #16136 — we link there as the canonical source.
This workflow follows the Agent → Documentdefaultdataloader recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"meta": {
"templateId": "rag-knowledge-base-webhook-voice"
},
"name": "RAG Knowledge Base \u2013 Webhook to Voice Assistant",
"tags": [],
"nodes": [
{
"id": "f03da6d9-93b6-4040-8d39-3054ad137cbe",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-848,
-528
],
"parameters": {
"color": 4,
"width": 712,
"height": 460,
"content": "\ud83d\udcda LOAD DATA FLOW \u2013 Dokumenten-Indexierung\n\nZweck:\nLiest Dokumente aus einer Quelle (z.B. Google Drive) \nund speichert sie als Vektoren in einer \nVektordatenbank. Muss bei neuen Dokumenten \nmanuell ausgef\u00fchrt werden oder l\u00e4uft automatisch \nper Schedule Trigger.\n\nAblauf:\n1. Dokumente auflisten (HTTP Request / Drive Node)\n2. IDs extrahieren (Code Node)\n3. Jede Datei einzeln verarbeiten (Loop)\n4. Datei herunterladen & Text laden (Data Loader)\n5. Vektoren erstellen (Embeddings Node)\n6. Chunks dauerhaft speichern (Vector Store)\n\n\u26a0\ufe0f Konfiguration erforderlich:\n- Ordner-ID / Quelle anpassen\n- Embeddings Modell festlegen\n- Vector Store Credentials hinterlegen\n- Nur unterst\u00fctzte Dateiformate verwenden"
},
"typeVersion": 1
},
{
"id": "4b88caba-d028-44cc-a2e9-dd3fda4e4a76",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-848,
-64
],
"parameters": {
"color": 7,
"width": 1372,
"height": 876,
"content": "### \ud83d\udcda Load Data Flow"
},
"typeVersion": 1
},
{
"id": "69a4dd21-b126-49a6-b533-1e13f497edaf",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
528,
-64
],
"parameters": {
"color": 7,
"width": 840,
"height": 876,
"content": "### \ud83c\udfaf 2. Retriever Flow"
},
"typeVersion": 1
},
{
"id": "9a922612-b2a9-4061-9b4c-fab7ffad57bc",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
528,
-496
],
"parameters": {
"color": 4,
"width": 832,
"height": 432,
"content": "\ud83c\udfaf RETRIEVER FLOW \u2013 Wissensabfrage via Webhook\n\nZweck:\nEmpf\u00e4ngt Fragen per Webhook, durchsucht semantisch \ndie Vektordatenbank und gibt eine strukturierte \nAntwort zur\u00fcck \u2013 optimiert f\u00fcr telefonische \nSprachausgabe.\n\nAblauf:\n1. Frage per Webhook empfangen (POST)\n2. Semantische Suche in Vektordatenbank\n3. Antwort via LLM generieren\n4. Antwort an den Aufrufer zur\u00fcckgeben\n\n\u26a0\ufe0f Konfiguration erforderlich:\n- Webhook URL in aufrufendem System hinterlegen\n- Erwarteter Request Body: { \"chatInput\": \"...\" }\n- System Prompt an Use Case anpassen\n- LLM Modell und Credentials hinterlegen\n- Gleiches Embeddings Modell wie Load Flow verwenden!"
},
"typeVersion": 1
},
{
"id": "fcbcfab3-4a0b-41a7-8aa3-006e8243c6cd",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
144,
-288
],
"parameters": {
"width": 384,
"height": 224,
"content": "\u26a0\ufe0f WICHTIG \u2013 Embeddings Konsistenz\n\nDas Embeddings Modell muss in BEIDEN Flows \nidentisch sein:\n- Load Data Flow: Embeddings Node\n- Retriever Flow: Embeddings Node\n\nUnterschiedliche Modelle f\u00fchren zu \nfehlerhaften Suchergebnissen!"
},
"typeVersion": 1
},
{
"id": "41b1c997-0db4-4a69-919f-d91a87a4be13",
"name": "T\u00e4glich 02:00 Uhr \u2013 Auto-Reindex",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-832,
160
],
"parameters": {
"rule": {
"interval": [
{
"triggerAtHour": 2
}
]
}
},
"typeVersion": 1.3
},
{
"id": "e93b10b5-a806-40b1-a2e6-da44c0705dba",
"name": "Manueller Start \u2013 Reindex",
"type": "n8n-nodes-base.manualTrigger",
"position": [
-832,
320
],
"parameters": {},
"typeVersion": 1
},
{
"id": "14c54b2d-26bd-421c-a411-4fe5306576a1",
"name": "Google Drive \u2013 Dateien auflisten",
"type": "n8n-nodes-base.httpRequest",
"position": [
-624,
320
],
"parameters": {
"url": "https://www.googleapis.com/drive/v3/files",
"options": {},
"sendQuery": true,
"authentication": "predefinedCredentialType",
"queryParameters": {
"parameters": [
{
"name": "q",
"value": "'DEINE_ORDNER_ID' in parents and trashed = false"
},
{
"name": "fields",
"value": "files(id,name,mimeType)"
}
]
},
"nodeCredentialType": "googleDriveOAuth2Api"
},
"typeVersion": 4.4
},
{
"id": "b2578a63-93ce-4525-a91e-f3304df21775",
"name": "Datei-IDs extrahieren",
"type": "n8n-nodes-base.code",
"position": [
-192,
512
],
"parameters": {
"jsCode": "const files = $input.first().json.files;\nreturn files.map(f => ({ json: f }));"
},
"typeVersion": 2
},
{
"id": "a35e3a56-f890-4096-94b6-449a8ddf70c8",
"name": "Loop \u2013 Jede Datei",
"type": "n8n-nodes-base.splitInBatches",
"position": [
-368,
320
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "f859c1fe-0601-4a66-bdc6-f13150c69597",
"name": "Google Drive \u2013 Datei herunterladen",
"type": "n8n-nodes-base.googleDrive",
"position": [
32,
512
],
"parameters": {
"fileId": {
"__rl": true,
"mode": "id",
"value": "={{ $json.id }}"
},
"options": {},
"operation": "download"
},
"typeVersion": 3
},
{
"id": "647dcab8-973e-49e4-b156-ea34c4614713",
"name": "Text Loader",
"type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader",
"position": [
224,
304
],
"parameters": {
"loader": "textLoader",
"options": {},
"dataType": "binary"
},
"typeVersion": 1.1
},
{
"id": "8a164618-fe3b-406d-b79b-2aae6cb89a89",
"name": "OpenAI Embeddings \u2013 Indexierung",
"type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
"position": [
-80,
304
],
"parameters": {
"options": {}
},
"typeVersion": 1.2
},
{
"id": "259f433a-22fa-48e8-9866-a80cd2d361b4",
"name": "Supabase \u2013 Chunks speichern",
"type": "@n8n/n8n-nodes-langchain.vectorStoreSupabase",
"position": [
32,
48
],
"parameters": {
"mode": "insert",
"options": {
"queryName": "match_documents"
},
"tableName": {
"__rl": true,
"mode": "list",
"value": "documents",
"cachedResultName": "documents"
}
},
"typeVersion": 1.3
},
{
"id": "28e07b4b-b35c-4c08-8c94-2ed06b52a1ea",
"name": "Webhook \u2013 Frage empfangen",
"type": "n8n-nodes-base.webhook",
"position": [
576,
80
],
"parameters": {
"path": "rag-knowledge-webhook",
"options": {},
"httpMethod": "POST",
"responseMode": "responseNode"
},
"typeVersion": 2.1
},
{
"id": "2a6e3d1a-f33c-4756-98ac-0334749ed5ac",
"name": "RAG \u2013 Antwort generieren",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
816,
80
],
"parameters": {
"text": "={{ $json.body.chatInput }}",
"options": {
"systemMessage": "Du bist ein hilfreicher Assistent. Beantworte Fragen ausschlie\u00dflich auf Basis der bereitgestellten Dokumente. Antworte kurz und klar (maximal 5 S\u00e4tze) \u2013 die Antwort wird vorgelesen. Wenn du eine Frage nicht beantworten kannst, sage: 'Dazu habe ich leider keine Information.' Gib am Ende immer die Quelle (Dateiname) an."
},
"promptType": "define"
},
"typeVersion": 3.1
},
{
"id": "d39e90a9-5f92-4b0f-b5b1-0164ffd8c65c",
"name": "GPT-4o-mini",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
688,
288
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini",
"cachedResultName": "gpt-4o-mini"
},
"options": {}
},
"typeVersion": 1.3
},
{
"id": "2675b084-e2d3-463b-b035-0843bcbe9eb9",
"name": "Supabase \u2013 Wissensdatenbank",
"type": "@n8n/n8n-nodes-langchain.vectorStoreSupabase",
"position": [
880,
320
],
"parameters": {
"mode": "retrieve-as-tool",
"options": {
"queryName": "match_documents"
},
"tableName": {
"__rl": true,
"mode": "list",
"value": "documents",
"cachedResultName": "documents"
},
"toolDescription": "Wissensdatenbank. Durchsucht indexierte Dokumente semantisch und gibt relevante Textpassagen zur\u00fcck."
},
"typeVersion": 1.3
},
{
"id": "a4d7be78-7ed4-4d83-a2a0-b4e50aef4436",
"name": "OpenAI Embeddings \u2013 Abfrage",
"type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
"position": [
1024,
528
],
"parameters": {
"options": {}
},
"typeVersion": 1.2
},
{
"id": "2aed682a-ccfc-4d8c-9803-d6c3000fa55f",
"name": "Webhook \u2013 Antwort zur\u00fcckgeben",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
1168,
80
],
"parameters": {
"options": {},
"respondWith": "allIncomingItems"
},
"typeVersion": 1.5
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"connections": {
"GPT-4o-mini": {
"ai_languageModel": [
[
{
"node": "RAG \u2013 Antwort generieren",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Text Loader": {
"ai_document": [
[
{
"node": "Supabase \u2013 Chunks speichern",
"type": "ai_document",
"index": 0
}
]
]
},
"Loop \u2013 Jede Datei": {
"main": [
[
{
"node": "Supabase \u2013 Chunks speichern",
"type": "main",
"index": 0
}
],
[
{
"node": "Datei-IDs extrahieren",
"type": "main",
"index": 0
}
]
]
},
"Datei-IDs extrahieren": {
"main": [
[
{
"node": "Google Drive \u2013 Datei herunterladen",
"type": "main",
"index": 0
}
]
]
},
"RAG \u2013 Antwort generieren": {
"main": [
[
{
"node": "Webhook \u2013 Antwort zur\u00fcckgeben",
"type": "main",
"index": 0
}
]
]
},
"Manueller Start \u2013 Reindex": {
"main": [
[
{
"node": "Google Drive \u2013 Dateien auflisten",
"type": "main",
"index": 0
}
]
]
},
"Webhook \u2013 Frage empfangen": {
"main": [
[
{
"node": "RAG \u2013 Antwort generieren",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Embeddings \u2013 Abfrage": {
"ai_embedding": [
[
{
"node": "Supabase \u2013 Wissensdatenbank",
"type": "ai_embedding",
"index": 0
}
]
]
},
"Supabase \u2013 Chunks speichern": {
"main": [
[]
]
},
"Supabase \u2013 Wissensdatenbank": {
"ai_tool": [
[
{
"node": "RAG \u2013 Antwort generieren",
"type": "ai_tool",
"index": 0
}
]
]
},
"OpenAI Embeddings \u2013 Indexierung": {
"ai_embedding": [
[
{
"node": "Supabase \u2013 Chunks speichern",
"type": "ai_embedding",
"index": 0
}
]
]
},
"Google Drive \u2013 Dateien auflisten": {
"main": [
[
{
"node": "Loop \u2013 Jede Datei",
"type": "main",
"index": 0
}
]
]
},
"T\u00e4glich 02:00 Uhr \u2013 Auto-Reindex": {
"main": [
[
{
"node": "Google Drive \u2013 Dateien auflisten",
"type": "main",
"index": 0
}
]
]
},
"Google Drive \u2013 Datei herunterladen": {
"main": [
[
{
"node": "Loop \u2013 Jede Datei",
"type": "main",
"index": 0
}
]
]
}
}
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow indexes Google Drive documents into a Supabase vector store using OpenAI embeddings, then exposes a webhook that uses a GPT-4o-mini RAG agent to answer incoming questions with short, voice-friendly responses grounded in the stored documents. Runs on a daily…
Source: https://n8n.io/workflows/16136/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
WooriFisa. Uses agent, httpRequest, documentDefaultDataLoader, vectorStorePinecone. Scheduled trigger; 86 nodes.
WooriFisa 최종. Uses memoryMongoDbChat, agent, httpRequest, documentDefaultDataLoader. Scheduled trigger; 68 nodes.
Overview
AI-Business-Agent. Uses vectorStoreSupabase, embeddingsOpenAi, documentDefaultDataLoader, textSplitterRecursiveCharacterTextSplitter. Scheduled trigger; 27 nodes.
This workflow automatically indexes your n8n workflows every 24 hours, converts them into vector embeddings using OpenAI and stores them in Supabase. It exposes a webhook that lets you query your work