Create a RAG System with Paul Essays, Milvus, and OpenAI for Cited Answers

Go to Workflow
1,186 views
Built by Cheney Zhang Cheney Zhang
Created on June 10, 2026

Description

Create a RAG System with Paul Essays, Milvus, and OpenAI for Cited Answers

This workflow automates the process of creating a document-based AI retrieval system using Milvus, an open-source vector database. It consists of two main steps:

Data collection/processing
Retrieval/response generation

The system scrapes Paul Graham essays, processes them, and loads them into a Milvus vector store. When users ask questions, it retrieves relevant information and generates responses with citations.

Step 1: Data Collection and Processing

Set up a Milvus server using the official guide
Create a collection named "my_collection"
Execute the workflow to scrape Paul Graham essays:
Fetch essay lists
Extract names
Split content into manageable items
Limit results (if needed)
Fetch texts
Extract content
Load everything into Milvus Vector Store

This step uses OpenAI embeddings for vectorization.

Step 2: Retrieval and Response Generation

When a chat message is received, the system:

Sets chunks to send to the model
Retrieves relevant information from the Milvus Vector Store
Prepares chunks
Answers the query based on those chunks
Composes citations
Generates a comprehensive response

This process uses OpenAI embeddings and models to ensure accurate and relevant answers with proper citations.

For more information on vector databases and similarity search, visit Milvus documentation.

Nodes Used (9)

Code
n8n-nodes-base.code
Default Data Loader
@n8n/n8n-nodes-langchain.documentDefaultDataLoader
Embeddings OpenAI
@n8n/n8n-nodes-langchain.embeddingsOpenAi
HTML
n8n-nodes-base.html
HTTP Request
n8n-nodes-base.httpRequest
Information Extractor
@n8n/n8n-nodes-langchain.informationExtractor
Milvus Vector Store
@n8n/n8n-nodes-langchain.vectorStoreMilvus
OpenAI Chat Model
@n8n/n8n-nodes-langchain.lmChatOpenAi
Recursive Character Text Splitter
@n8n/n8n-nodes-langchain.textSplitterRecursiveCharacterTextSplitter