This workflow corresponds to n8n.io template #7667 — we link there as the canonical source.
This workflow follows the Agent → Chat Trigger 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": {
"templateCredsSetupCompleted": false
},
"nodes": [
{
"id": "f19a7174-863b-4247-b5a1-41230aa09261",
"name": "When clicking \u2018Test workflow\u2019",
"type": "n8n-nodes-base.manualTrigger",
"position": [
-48,
128
],
"parameters": {},
"typeVersion": 1
},
{
"id": "08e1dbdb-9cfe-41a5-9883-663b2d193ae5",
"name": "Loop Over Items",
"type": "n8n-nodes-base.splitInBatches",
"position": [
448,
128
],
"parameters": {
"options": {},
"batchSize": "={{ $json.Key.length }}"
},
"typeVersion": 3
},
{
"id": "e4d45149-2de7-42ba-a175-6c89bb621a58",
"name": "Extract from File",
"type": "n8n-nodes-base.extractFromFile",
"position": [
1024,
144
],
"parameters": {
"options": {},
"operation": "pdf",
"binaryPropertyName": "=data"
},
"typeVersion": 1
},
{
"id": "1651b60c-f92e-4b16-a04a-608beb7881c9",
"name": "Qdrant Vector Store",
"type": "@n8n/n8n-nodes-langchain.vectorStoreQdrant",
"position": [
1280,
144
],
"parameters": {
"mode": "insert",
"options": {},
"qdrantCollection": {
"__rl": true,
"mode": "id",
"value": "YOUR_QDRANT_COLLECTION"
}
},
"typeVersion": 1.1
},
{
"id": "2a6a7f9e-65a9-42c4-9bb3-677ec026017e",
"name": "Download Files from AWS",
"type": "n8n-nodes-base.awsS3",
"position": [
720,
144
],
"parameters": {
"fileKey": "={{ $json.Key }}",
"bucketName": "YOUR_S3_BUCKET"
},
"typeVersion": 2
},
{
"id": "922e18b4-d3fb-4ee3-a133-e5bcc5215b38",
"name": "Get Files from S3",
"type": "n8n-nodes-base.awsS3",
"position": [
224,
128
],
"parameters": {
"options": {},
"operation": "getAll",
"bucketName": "YOUR_S3_BUCKET"
},
"typeVersion": 2
},
{
"id": "058ed0bd-10a6-456d-a06b-b5803581d669",
"name": "Embeddings OpenAI",
"type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
"position": [
1232,
368
],
"parameters": {
"options": {}
},
"typeVersion": 1.2
},
{
"id": "11258785-bfbb-4e68-80e5-0a2bdb0fced1",
"name": "Default Data Loader",
"type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader",
"position": [
1424,
368
],
"parameters": {
"options": {}
},
"typeVersion": 1
},
{
"id": "68e596d0-72b5-41d7-ba67-59459e21562e",
"name": "Recursive Character Text Splitter",
"type": "@n8n/n8n-nodes-langchain.textSplitterRecursiveCharacterTextSplitter",
"position": [
1520,
592
],
"parameters": {
"options": {}
},
"typeVersion": 1
},
{
"id": "7efde217-13c8-4f1e-b586-5594a422be33",
"name": "When chat message received",
"type": "@n8n/n8n-nodes-langchain.chatTrigger",
"position": [
224,
400
],
"parameters": {
"options": {}
},
"typeVersion": 1.1
},
{
"id": "028017ff-3e7c-440b-bbe5-b446f473d52e",
"name": "AI Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
432,
400
],
"parameters": {
"options": {}
},
"typeVersion": 1.9
},
{
"id": "8456578d-a87e-43c1-9da0-ab168c8f2bba",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
352,
672
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini"
},
"options": {}
},
"typeVersion": 1.2
},
{
"id": "312b852d-1c9c-41ef-904c-d60eb78dc22c",
"name": "Qdrant Vector Store1",
"type": "@n8n/n8n-nodes-langchain.vectorStoreQdrant",
"position": [
704,
640
],
"parameters": {
"mode": "retrieve-as-tool",
"options": {},
"toolName": "proposal_knowledge_base",
"toolDescription": "Call this tool to search the vector store knowledge base for proposal-related data. If context is empty, say you don't know the answer.",
"qdrantCollection": {
"__rl": true,
"mode": "list",
"value": "YOUR_QDRANT_COLLECTION",
"cachedResultName": "YOUR_QDRANT_COLLECTION"
}
},
"typeVersion": 1.1
},
{
"id": "126d27c5-bc53-405d-ada3-725f6285efa8",
"name": "Embeddings OpenAI1",
"type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
"position": [
880,
800
],
"parameters": {
"options": {}
},
"typeVersion": 1.2
}
],
"connections": {
"Loop Over Items": {
"main": [
[],
[
{
"node": "Download Files from AWS",
"type": "main",
"index": 0
}
]
]
},
"Embeddings OpenAI": {
"ai_embedding": [
[
{
"node": "Qdrant Vector Store",
"type": "ai_embedding",
"index": 0
}
]
]
},
"Extract from File": {
"main": [
[
{
"node": "Qdrant Vector Store",
"type": "main",
"index": 0
}
]
]
},
"Get Files from S3": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "AI Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Embeddings OpenAI1": {
"ai_embedding": [
[
{
"node": "Qdrant Vector Store1",
"type": "ai_embedding",
"index": 0
}
]
]
},
"Default Data Loader": {
"ai_document": [
[
{
"node": "Qdrant Vector Store",
"type": "ai_document",
"index": 0
}
]
]
},
"Qdrant Vector Store": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Qdrant Vector Store1": {
"ai_tool": [
[
{
"node": "AI Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"Download Files from AWS": {
"main": [
[
{
"node": "Extract from File",
"type": "main",
"index": 0
}
]
]
},
"When chat message received": {
"main": [
[
{
"node": "AI Agent",
"type": "main",
"index": 0
}
]
]
},
"Recursive Character Text Splitter": {
"ai_textSplitter": [
[
{
"node": "Default Data Loader",
"type": "ai_textSplitter",
"index": 0
}
]
]
},
"When clicking \u2018Test workflow\u2019": {
"main": [
[
{
"node": "Get Files from S3",
"type": "main",
"index": 0
}
]
]
}
}
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Ingest PDF files from S3, extract text, chunk, embed with OpenAI embeddings, and index into a Qdrant collection with metadata. Provide a chat entry point that uses an Agent with OpenAI to retrieve from the same Qdrant collection as a tool and answer proposal knowledge questions.…
Source: https://n8n.io/workflows/7667/ — 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.
Alfred (funcional). Uses gmailTool, googleCalendarTool, gmail, embeddingsOpenAi. Event-driven trigger; 83 nodes.
Build a powerful, customizable AI chatbot for your WordPress website that intelligently retrieves posts, answers questions, and engages in natural conversations. This complete solution handles content
Chat with docs - 5minAI New version. Uses httpRequest, documentDefaultDataLoader, textSplitterRecursiveCharacterTextSplitter, embeddingsOpenAi. Event-driven trigger; 62 nodes.
I prepared a detailed guide that illustrates the entire process of building an AI agent using Supabase and Google Drive within N8N workflows.
RAG AI Agent Template V5. Uses lmChatOpenAi, documentDefaultDataLoader, embeddingsOpenAi, googleDrive. Event-driven trigger; 56 nodes.