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 →
{
"nodes": [
{
"id": "33e94ee1-4244-4075-bb4b-93a99a2cacd9",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
20,
560
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini"
},
"options": {}
},
"typeVersion": 1.2
},
{
"id": "dd97266d-a039-4d8f-bc7d-fb439ad5a6d7",
"name": "When clicking \"Execute Workflow\"",
"type": "n8n-nodes-base.manualTrigger",
"position": [
-180,
0
],
"parameters": {},
"typeVersion": 1
},
{
"id": "c4d4a979-3182-46c9-b145-fa4e6ba57011",
"name": "Fetch Essay List",
"type": "n8n-nodes-base.httpRequest",
"position": [
80,
0
],
"parameters": {
"url": "http://www.paulgraham.com/articles.html",
"options": {}
},
"typeVersion": 4.2
},
{
"id": "2e2913f9-d01a-41e8-b1b8-9a981910db7b",
"name": "Extract essay names",
"type": "n8n-nodes-base.html",
"position": [
280,
0
],
"parameters": {
"options": {},
"operation": "extractHtmlContent",
"extractionValues": {
"values": [
{
"key": "essay",
"attribute": "href",
"cssSelector": "table table a",
"returnArray": true,
"returnValue": "attribute"
}
]
}
},
"typeVersion": 1.2
},
{
"id": "c121dc65-37e3-49d4-b449-f28491e19a6f",
"name": "Split out into items",
"type": "n8n-nodes-base.splitOut",
"position": [
480,
0
],
"parameters": {
"options": {},
"fieldToSplitOut": "essay"
},
"typeVersion": 1
},
{
"id": "5644c48d-62b6-4e2d-ad25-013b55f5ec71",
"name": "Fetch essay texts",
"type": "n8n-nodes-base.httpRequest",
"position": [
880,
0
],
"parameters": {
"url": "=http://www.paulgraham.com/{{ $json.essay }}",
"options": {}
},
"typeVersion": 4.2
},
{
"id": "cd84596e-4046-4d33-9f43-cf464e5c5c01",
"name": "Limit to first 3",
"type": "n8n-nodes-base.limit",
"position": [
680,
0
],
"parameters": {
"maxItems": 3
},
"typeVersion": 1
},
{
"id": "318aeeed-fcce-4de2-aa04-92033ef01f28",
"name": "Extract Text Only",
"type": "n8n-nodes-base.html",
"position": [
1200,
0
],
"parameters": {
"options": {},
"operation": "extractHtmlContent",
"extractionValues": {
"values": [
{
"key": "data",
"cssSelector": "body",
"skipSelectors": "img,nav"
}
]
}
},
"typeVersion": 1.2
},
{
"id": "0668851e-a31f-4e6e-8966-4544092e318e",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
0,
-120
],
"parameters": {
"width": 1071.752021563343,
"height": 285.66037735849045,
"content": "## Scrape latest Paul Graham essays"
},
"typeVersion": 1
},
{
"id": "cf9af24c-9e08-4f27-ad4e-509f72e54a9b",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
1120,
-120
],
"parameters": {
"width": 625,
"height": 607,
"content": "## Load into Milvus vector store"
},
"typeVersion": 1
},
{
"id": "95e9a59d-1832-4eb7-b58d-ba391c1acb1c",
"name": "When chat message received",
"type": "@n8n/n8n-nodes-langchain.chatTrigger",
"position": [
-200,
380
],
"parameters": {
"options": {}
},
"typeVersion": 1.1
},
{
"id": "0076ea3d-e667-4df2-83c3-9de0d3de0498",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-380,
-160
],
"parameters": {
"width": 280,
"height": 180,
"content": "## Step 1\n1. Set up a Milvus server based on [this guide](https://milvus.io/docs/install_standalone-docker-compose.md). And then create a collection named `my_collection`.\n2. Click this workflow to load scrape and load Paul Graham essays to Milvus collection.\n"
},
"typeVersion": 1
},
{
"id": "e90a069e-cfd8-49f1-8fe6-a334bb920027",
"name": "Milvus Vector Store",
"type": "@n8n/n8n-nodes-langchain.vectorStoreMilvus",
"position": [
1420,
0
],
"parameters": {
"mode": "insert",
"options": {
"clearCollection": true
},
"milvusCollection": {
"__rl": true,
"mode": "list",
"value": "my_collection",
"cachedResultName": "my_collection"
}
},
"typeVersion": 1.1
},
{
"id": "d786c471-d564-4f25-beab-f1c7f4559f7a",
"name": "Default Data Loader",
"type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader",
"position": [
1460,
220
],
"parameters": {
"options": {},
"jsonData": "={{ $('Extract Text Only').item.json.data }}",
"jsonMode": "expressionData"
},
"typeVersion": 1
},
{
"id": "26730b7b-2bb9-46f8-83c3-3d4ffdfdef57",
"name": "Embeddings OpenAI",
"type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
"position": [
1320,
240
],
"parameters": {
"options": {}
},
"typeVersion": 1.2
},
{
"id": "de836110-4073-44d5-bbf3-d57f57525f69",
"name": "Recursive Character Text Splitter",
"type": "@n8n/n8n-nodes-langchain.textSplitterRecursiveCharacterTextSplitter",
"position": [
1540,
340
],
"parameters": {
"options": {},
"chunkSize": 6000
},
"typeVersion": 1
},
{
"id": "ddaa936e-416a-40e4-adf6-cf7ebfb8b094",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-380,
280
],
"parameters": {
"width": 280,
"height": 120,
"content": "## Step 2\nChat with this QA Chain with Milvus retriever\n"
},
"typeVersion": 1
},
{
"id": "f5b7410f-37c7-40ff-b841-12ed04252317",
"name": "Embeddings OpenAI1",
"type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
"position": [
80,
860
],
"parameters": {
"options": {}
},
"typeVersion": 1.2
},
{
"id": "7a5d1b3f-9b2c-4943-9b40-2a213e30159c",
"name": "Milvus Vector Store1",
"type": "@n8n/n8n-nodes-langchain.vectorStoreMilvus",
"position": [
120,
720
],
"parameters": {
"milvusCollection": {
"__rl": true,
"mode": "list",
"value": "my_collection",
"cachedResultName": "my_collection"
}
},
"typeVersion": 1.1
},
{
"id": "2402387f-e147-4239-9128-34af296e0012",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-20,
360
],
"parameters": {
"color": 7,
"width": 574,
"height": 629,
"content": ""
},
"typeVersion": 1
},
{
"id": "3665ef25-e464-496a-84d6-980b96e78e9a",
"name": "Q&A Chain to Retrieve from Milvus and Answer Question",
"type": "@n8n/n8n-nodes-langchain.chainRetrievalQa",
"position": [
120,
380
],
"parameters": {
"options": {}
},
"typeVersion": 1.5
},
{
"id": "10bf4a2c-ee2b-4185-b1e5-29b8664078fb",
"name": "Milvus Vector Store Retriever",
"type": "@n8n/n8n-nodes-langchain.retrieverVectorStore",
"position": [
260,
580
],
"parameters": {},
"typeVersion": 1
}
],
"connections": {
"Fetch Essay List": {
"main": [
[
{
"node": "Extract essay names",
"type": "main",
"index": 0
}
]
]
},
"Limit to first 3": {
"main": [
[
{
"node": "Fetch essay texts",
"type": "main",
"index": 0
}
]
]
},
"Embeddings OpenAI": {
"ai_embedding": [
[
{
"node": "Milvus Vector Store",
"type": "ai_embedding",
"index": 0
}
]
]
},
"Extract Text Only": {
"main": [
[
{
"node": "Milvus Vector Store",
"type": "main",
"index": 0
}
]
]
},
"Fetch essay texts": {
"main": [
[
{
"node": "Extract Text Only",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "Q&A Chain to Retrieve from Milvus and Answer Question",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Embeddings OpenAI1": {
"ai_embedding": [
[
{
"node": "Milvus Vector Store1",
"type": "ai_embedding",
"index": 0
}
]
]
},
"Default Data Loader": {
"ai_document": [
[
{
"node": "Milvus Vector Store",
"type": "ai_document",
"index": 0
}
]
]
},
"Extract essay names": {
"main": [
[
{
"node": "Split out into items",
"type": "main",
"index": 0
}
]
]
},
"Milvus Vector Store1": {
"ai_vectorStore": [
[
{
"node": "Milvus Vector Store Retriever",
"type": "ai_vectorStore",
"index": 0
}
]
]
},
"Split out into items": {
"main": [
[
{
"node": "Limit to first 3",
"type": "main",
"index": 0
}
]
]
},
"When chat message received": {
"main": [
[
{
"node": "Q&A Chain to Retrieve from Milvus and Answer Question",
"type": "main",
"index": 0
}
]
]
},
"Milvus Vector Store Retriever": {
"ai_retriever": [
[
{
"node": "Q&A Chain to Retrieve from Milvus and Answer Question",
"type": "ai_retriever",
"index": 0
}
]
]
},
"When clicking \"Execute Workflow\"": {
"main": [
[
{
"node": "Fetch Essay List",
"type": "main",
"index": 0
}
]
]
},
"Recursive Character Text Splitter": {
"ai_textSplitter": [
[
{
"node": "Default Data Loader",
"type": "ai_textSplitter",
"index": 0
}
]
]
}
}
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
How this works
This workflow streamlines the process of analysing lengthy essays by fetching a list from a website, extracting and limiting the content to the first three items, then using AI to generate concise summaries or insights. It's ideal for researchers, students, or content creators who need quick overviews of multiple documents without manual effort, saving hours of reading time. The key step involves the OpenAI Chat Model integration to process the split-out essay texts intelligently, while HTTP Request nodes handle the initial data retrieval seamlessly.
Use this workflow when dealing with event-driven tasks requiring rapid extraction and AI-assisted limiting of web-sourced documents, such as summarising news articles or academic papers in batches. Avoid it for real-time processing of dynamic content or when full essays are needed, as it caps at three items to prevent overload. Common variations include adjusting the limit node for more items or swapping OpenAI for another embedding service like vectorStoreMilvus to store summaries for later retrieval.
About this workflow
Splitout Limit. Uses lmChatOpenAi, manualTrigger, httpRequest, html. Event-driven trigger; 22 nodes.
Source: https://github.com/Zie619/n8n-workflows — 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.
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.
Code Extractfromfile. Uses manualTrigger, sort, httpRequest, compression. Event-driven trigger; 50 nodes.
2464. Uses httpRequest, compression, editImage, documentDefaultDataLoader. Event-driven trigger; 50 nodes.