This workflow corresponds to n8n.io template #17780 — we link there as the canonical source.
This workflow follows the Chainretrievalqa → Retrievervectorstore 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 →
{
"id": "moIGeRuCcLffi7s5",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Local RAG Query Chatbot (n8n + Qdrant + Ollama)",
"tags": [],
"nodes": [
{
"id": "54b98690-858d-4583-b7dd-769830ebe63b",
"name": "When chat message received",
"type": "@n8n/n8n-nodes-langchain.chatTrigger",
"position": [
-528,
192
],
"parameters": {
"options": {}
},
"typeVersion": 1.4
},
{
"id": "52c90c35-ca93-4979-90ea-61ecca135ee0",
"name": "Question and Answer Chain",
"type": "@n8n/n8n-nodes-langchain.chainRetrievalQa",
"position": [
-112,
192
],
"parameters": {
"options": {
"systemPromptTemplate": "You are answering questions about a document using ONLY the retrieved context provided below. Do not use outside knowledge, and do not guess.\n\nRules:\n- Read the ENTIRE retrieved context before answering. If a passage contains conditions, exceptions, or qualifications, include them \u2014 a partial answer that omits a condition is treated as incorrect.\n- If the retrieved context does not contain enough information to answer the question, say so plainly. Do not fabricate an answer or fill gaps with assumptions.\n- Prefer quoting or closely paraphrasing the source over loose summarizing.\n- Keep the answer concise and directly relevant to the question asked.\n- If asked about anything outside the retrieved context, state that it isn't covered by the indexed document.\n{context}"
}
},
"typeVersion": 1.7
},
{
"id": "e61a3785-0654-4f3f-9aeb-362b5f632e64",
"name": "Ollama Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOllama",
"position": [
-336,
352
],
"parameters": {
"model": "qwen2.5:7b",
"options": {}
},
"credentials": {
"ollamaApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "a8e6ab3f-07f4-4335-a07c-231840c0b973",
"name": "Vector Store Retriever",
"type": "@n8n/n8n-nodes-langchain.retrieverVectorStore",
"position": [
0,
352
],
"parameters": {},
"typeVersion": 1
},
{
"id": "461147cd-9621-42a2-8385-86f47a5345a9",
"name": "Qdrant Vector Store",
"type": "@n8n/n8n-nodes-langchain.vectorStoreQdrant",
"position": [
0,
480
],
"parameters": {
"options": {},
"qdrantCollection": {
"__rl": true,
"mode": "list",
"value": "handbook",
"cachedResultName": "handbook"
}
},
"credentials": {
"qdrantApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.3
},
{
"id": "b78190ee-8681-4f14-96f6-281a8f0ec4ea",
"name": "Embeddings Ollama",
"type": "@n8n/n8n-nodes-langchain.embeddingsOllama",
"position": [
64,
624
],
"parameters": {
"model": "nomic-embed-text:latest"
},
"credentials": {
"ollamaApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "ae95ab5d-8d3e-49af-a29f-cd897980f168",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-528,
-32
],
"parameters": {
"color": "#3B0202",
"height": 96,
"content": "LOCAL DOCUMENT INTELLIGENCE PIPELINE (ZERO DATA LEAKAGE)\n"
},
"typeVersion": 1
},
{
"id": "4ffc5cb4-8f84-4ad5-bdca-d589ca6431e4",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-272,
-32
],
"parameters": {
"color": "#000000",
"width": 720,
"height": 80,
"content": "Stack: n8n + Qdrant Vector Store + Local Ollama (nomic-embed-text / qwen2.5:7b)\nSecurity: 100% Local Execution | No OpenAI API Keys | Client Documents Stay On-Premise"
},
"typeVersion": 1
},
{
"id": "e1e889b7-08a0-4a1f-b564-db958ddaa3e1",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-416,
480
],
"parameters": {
"color": 4,
"content": "SETUP STEP 1: Requires Ollama running locally with\nqwen2.5:7b installed. \n\nIn your terminal run:\nollama pull qwen2.5:7b\n"
},
"typeVersion": 1
},
{
"id": "29b77d7c-cef2-426f-8f58-6c97d3ff93d3",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
256,
464
],
"parameters": {
"color": 4,
"width": 448,
"height": 112,
"content": "SETUP STEP 2: Set the SAME Collection Name you used\nin the Index workflow. If these two don't match exactly,\nthis workflow will return no results.\n"
},
"typeVersion": 1
},
{
"id": "441f6f56-3f8a-46bf-848f-8e8896546aef",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-816,
160
],
"parameters": {
"height": 240,
"content": "REQUIRES: Run the Index workflow first to load your\ndocument into Qdrant. \n\nThis workflow can only answer\nquestions about documents that have already been indexed.\n"
},
"typeVersion": 1
},
{
"id": "b712ed33-21b6-4fe7-97d2-cee548af4796",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
-160,
752
],
"parameters": {
"width": 272,
"height": 96,
"content": "HOW TO TEST: Click \"Open chat\" below and ask a question\nabout your indexed document.\n"
},
"typeVersion": 1
},
{
"id": "8d09067e-0fba-4f0f-9179-ef0d4dfb754d",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
384,
96
],
"parameters": {
"color": 6,
"width": 384,
"height": 304,
"content": "Known limitation: retrieval quality depends on the Vector\n\nStore Retriever's Top K setting. With the default value, multi-fact questions (e.g. \"which sectors are represented\") may retrieve an incomplete set of chunks and the assistant will correctly decline rather than guess. \n\nIncrease Top K on the retriever node if you need broader recall."
},
"typeVersion": 1
}
],
"active": true,
"settings": {
"binaryMode": "separate",
"callerPolicy": "workflowsFromSameOwner",
"timeSavedMode": "dynamic",
"availableInMCP": false,
"executionOrder": "v1",
"saveManualExecutions": true,
"saveExecutionProgress": true,
"saveDataErrorExecution": "all",
"saveDataSuccessExecution": "all"
},
"versionId": "b97cb73d-d2ce-4902-b954-7cc297084f36",
"nodeGroups": [],
"connections": {
"Embeddings Ollama": {
"ai_embedding": [
[
{
"node": "Qdrant Vector Store",
"type": "ai_embedding",
"index": 0
}
]
]
},
"Ollama Chat Model": {
"ai_languageModel": [
[
{
"node": "Question and Answer Chain",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Qdrant Vector Store": {
"ai_vectorStore": [
[
{
"node": "Vector Store Retriever",
"type": "ai_vectorStore",
"index": 0
}
]
]
},
"Vector Store Retriever": {
"ai_retriever": [
[
{
"node": "Question and Answer Chain",
"type": "ai_retriever",
"index": 0
}
]
]
},
"When chat message received": {
"main": [
[
{
"node": "Question and Answer Chain",
"type": "main",
"index": 0
}
]
]
}
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
ollamaApiqdrantApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow provides a local RAG chatbot in n8n that answers chat questions using context retrieved from a Qdrant collection, generating responses with a local Ollama chat model and Ollama embeddings. Receives a user question from the n8n chat trigger. Retrieves the most…
Source: https://n8n.io/workflows/17780/ — 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.
n8n_ollama_pgvector. Uses chatTrigger, vectorStorePGVector, embeddingsGoogleGemini, documentDefaultDataLoader. Chat trigger; 20 nodes.
RAG Agent Integration Hub mit Knowledge Management. Uses memoryPostgresChat, lmChatOllama, lmOllama, toolVectorStore. Chat trigger; 27 nodes.
Apple RAG Chatbot V2. Uses googleDrive, documentDefaultDataLoader, agent, toolVectorStore. Chat trigger; 23 nodes.
Local RAG AI Agent with Knowledge Management. Uses memoryPostgresChat, lmChatOllama, lmOllama, toolVectorStore. Chat trigger; 22 nodes.
⚠️ Note: This system only works for self-hosted n8n instances. It will not function on n8n.cloud or other remote setups. LocalRAG.AI is a private, on-prem AI assistant that uses your own documents to