内部文档聊天
高级
这是一个Internal Wiki, AI RAG领域的自动化工作流,包含 29 个节点。主要使用 Set, Switch, Webhook, Supabase, Aggregate 等节点。 使用Ollama、Supabase向量数据库和Google Drive与内部文档对话
前置要求
- •HTTP Webhook 端点(n8n 会自动生成)
- •Supabase URL 和 API Key
- •Google Drive API 凭证
- •PostgreSQL 数据库连接信息
使用的节点 (29)
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
"id": "pfmUDAfMnmwHPCSC",
"meta": {
"instanceId": "558d88703fb65b2d0e44613bc35916258b0f0bf983c5d4730c00c424b77ca36a",
"templateCredsSetupCompleted": true
},
"name": "Chat-internal-documents",
"tags": [],
"nodes": [
{
"id": "5499112e-c417-4a13-9d3f-6e1aa16ee8cd",
"name": "默认数据加载器",
"type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader",
"position": [
840,
840
],
"parameters": {
"options": {
"metadata": {
"metadataValues": [
{
"name": "=file_id",
"value": "={{ $('Set File ID').first().json.file_id }}"
}
]
}
},
"jsonData": "={{ $json.data || $json.text || $json.concatenated_data }}",
"jsonMode": "expressionData"
},
"typeVersion": 1
},
{
"id": "b780ee44-6928-4382-96d9-52d015e97fc2",
"name": "便签",
"type": "n8n-nodes-base.stickyNote",
"position": [
0,
60
],
"parameters": {
"color": 4,
"width": 583,
"height": 489,
"content": "## 用于 RAG 的智能体工具"
},
"typeVersion": 1
},
{
"id": "733c038e-5315-490f-a8f1-449aae7aa7b1",
"name": "便签1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1240,
580
],
"parameters": {
"color": 5,
"width": 2353,
"height": 627,
"content": "## 将 Google Drive 文件添加到向量数据库的工具"
},
"typeVersion": 1
},
{
"id": "f4f6830e-e057-4817-99b6-cd1a24ef85af",
"name": "下载文件",
"type": "n8n-nodes-base.googleDrive",
"position": [
-400,
800
],
"parameters": {
"fileId": {
"__rl": true,
"mode": "id",
"value": "={{ $('Set File ID').item.json.file_id }}"
},
"options": {
"googleFileConversion": {
"conversion": {
"docsToFormat": "text/plain"
}
}
},
"operation": "download"
},
"credentials": {
"googleDriveOAuth2Api": {
"id": "",
"name": "Google Drive account"
}
},
"executeOnce": true,
"typeVersion": 3
},
{
"id": "d6053181-12df-4ee9-98fc-5263c44cb828",
"name": "文件已创建",
"type": "n8n-nodes-base.googleDriveTrigger",
"position": [
-1160,
700
],
"parameters": {
"event": "fileCreated",
"options": {},
"pollTimes": {
"item": [
{
"mode": "everyMinute"
}
]
},
"triggerOn": "specificFolder",
"folderToWatch": {
"__rl": true,
"mode": "list",
"value": "1kxxE-cSJYZA1EwRohcgNL2PNFZDzAyhw",
"cachedResultUrl": "",
"cachedResultName": "test-folder"
}
},
"credentials": {
"googleDriveOAuth2Api": {
"id": "",
"name": "Google Drive account"
}
},
"typeVersion": 1
},
{
"id": "0ed25822-27c2-4ae3-9ec9-ff0eaeec1938",
"name": "文件已更新",
"type": "n8n-nodes-base.googleDriveTrigger",
"position": [
-1160,
920
],
"parameters": {
"event": "fileUpdated",
"options": {},
"pollTimes": {
"item": [
{
"mode": "everyMinute"
}
]
},
"triggerOn": "specificFolder",
"folderToWatch": {
"__rl": true,
"mode": "list",
"value": "1kxxE-cSJYZA1EwRohcgNL2PNFZDzAyhw",
"cachedResultUrl": "",
"cachedResultName": "test-folder"
}
},
"credentials": {
"googleDriveOAuth2Api": {
"id": "",
"name": "Google Drive account"
}
},
"typeVersion": 1
},
{
"id": "70d053ec-b880-489c-8c20-261f0a4c148c",
"name": "提取文档文本",
"type": "n8n-nodes-base.extractFromFile",
"position": [
360,
1000
],
"parameters": {
"options": {},
"operation": "text"
},
"typeVersion": 1,
"alwaysOutputData": true
},
{
"id": "cb9d4b81-c74f-44e5-9cb5-f55133b737d5",
"name": "Postgres 聊天记忆",
"type": "@n8n/n8n-nodes-langchain.memoryPostgresChat",
"position": [
-480,
360
],
"parameters": {},
"credentials": {
"postgres": {
"id": "",
"name": "Postgres account"
}
},
"notesInFlow": false,
"typeVersion": 1
},
{
"id": "fff92d07-0a2c-40ff-a073-b2e17d4695a3",
"name": "删除旧文档行",
"type": "n8n-nodes-base.supabase",
"position": [
-640,
800
],
"parameters": {
"tableId": "documents",
"operation": "delete",
"filterType": "string",
"filterString": "=metadata->>file_id=like.*{{ $json.file_id }}*"
},
"credentials": {
"supabaseApi": {
"id": "",
"name": "Supabase account"
}
},
"typeVersion": 1,
"alwaysOutputData": true
},
{
"id": "e5ca30cc-ea70-42b1-bdce-b110a922765b",
"name": "设置文件 ID",
"type": "n8n-nodes-base.set",
"position": [
-880,
800
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "10646eae-ae46-4327-a4dc-9987c2d76173",
"name": "file_id",
"type": "string",
"value": "={{ $json.id }}"
},
{
"id": "f4536df5-d0b1-4392-bf17-b8137fb31a44",
"name": "file_type",
"type": "string",
"value": "={{ $json.mimeType }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "02fbed8f-592d-4380-b9b4-f129cbc052d5",
"name": "便签2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1040,
60
],
"parameters": {
"width": 1036,
"height": 485,
"content": "## 带聊天界面的 RAG AI 智能体"
},
"typeVersion": 1
},
{
"id": "33ffec5d-1c87-42df-91a9-87f29fda4d24",
"name": "响应 Webhook",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
-180,
140
],
"parameters": {
"options": {},
"respondWith": "allIncomingItems"
},
"typeVersion": 1.1
},
{
"id": "c7cf92ba-d3b7-401f-be57-1f2ad1452fad",
"name": "编辑字段",
"type": "n8n-nodes-base.set",
"position": [
-740,
140
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "9a9a245e-f1a1-4282-bb02-a81ffe629f0f",
"name": "chatInput",
"type": "string",
"value": "={{ $json?.chatInput || $json.body.chatInput || $json.body.message }}"
},
{
"id": "b80831d8-c653-4203-8706-adedfdb98f77",
"name": "sessionId",
"type": "string",
"value": "={{ $json?.sessionId || $json.body.sessionId}}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "28af4afe-bb57-41cf-97cd-5f5bf244ced2",
"name": "当收到聊天消息时",
"type": "@n8n/n8n-nodes-langchain.chatTrigger",
"position": [
-1000,
140
],
"webhookId": "15e4d662-3f98-48d0-9f50-68838769ecac",
"parameters": {
"public": true,
"options": {
"allowFileUploads": true
},
"initialMessages": "Hi there! 👋\nMy name is Laki. How can I assist you today?"
},
"typeVersion": 1.1
},
{
"id": "172cdbdc-df5e-4126-b437-6ee87cb002e8",
"name": "Webhook",
"type": "n8n-nodes-base.webhook",
"position": [
-1000,
340
],
"webhookId": "9ba11544-5c4e-4f91-818a-08a4ecb596c5",
"parameters": {
"path": "rag-chat",
"options": {},
"httpMethod": "POST",
"responseMode": "responseNode"
},
"typeVersion": 2
},
{
"id": "c22851fc-54b3-4f6f-90de-1d1ee4144987",
"name": "提取 PDF 文本",
"type": "n8n-nodes-base.extractFromFile",
"position": [
360,
620
],
"parameters": {
"options": {},
"operation": "pdf"
},
"typeVersion": 1
},
{
"id": "6cd6a07e-e401-4941-8120-0fe720138986",
"name": "聚合",
"type": "n8n-nodes-base.aggregate",
"position": [
280,
800
],
"parameters": {
"options": {},
"aggregate": "aggregateAllItemData"
},
"typeVersion": 1
},
{
"id": "57dd71fa-6500-4e8f-b5e2-824eb8812b9a",
"name": "字符文本分割器",
"type": "@n8n/n8n-nodes-langchain.textSplitterCharacterTextSplitter",
"position": [
840,
1060
],
"parameters": {},
"typeVersion": 1
},
{
"id": "af7a36dc-8a07-4b00-affc-5c01677d3dcf",
"name": "摘要",
"type": "n8n-nodes-base.summarize",
"position": [
440,
800
],
"parameters": {
"options": {},
"fieldsToSummarize": {
"values": [
{
"field": "data",
"aggregation": "concatenate"
}
]
}
},
"typeVersion": 1
},
{
"id": "64931b9c-35d3-4eff-89f6-9fb6053325d2",
"name": "RAG AI 代理",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
-520,
140
],
"parameters": {
"text": "={{ $json.chatInput }}\n\nContext from retrieved documents:\n{{ $json.user_documents }}\n\nInstructions:\n- Use ONLY the context above to answer the question.\n- If the context already provides the answer, respond directly with that Answer.\n- Do NOT call any tools or offer to call tools if the context already has the answer.\n- Only call tools if the context is empty or obviously incomplete.\n- Keep the answer clear and complete.\n",
"options": {
"systemMessage": "=You are a helpful assistant that answers user questions. Always prioritize using the provided context. Only call tools when the provided context does not contain the necessary information.\nIf you use the tool then provide the answer coming from the tool directly\n"
},
"promptType": "define"
},
"typeVersion": 1.6
},
{
"id": "de90a406-592e-4c0d-9052-3e95caebf01b",
"name": "Google Calendar MCP",
"type": "n8n-nodes-base.switch",
"position": [
-180,
800
],
"parameters": {
"rules": {
"values": [
{
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $('Set File ID').item.json.file_type }}",
"rightValue": "application/pdf"
}
]
}
},
{
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "2ae7faa7-a936-4621-a680-60c512163034",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $('Set File ID').item.json.file_type }}",
"rightValue": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
}
]
}
},
{
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "fc193b06-363b-4699-a97d-e5a850138b0e",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $('Set File ID').item.json.file_type }}",
"rightValue": "application/vnd.google-apps.document"
}
]
}
}
]
},
"options": {
"fallbackOutput": 2
}
},
"typeVersion": 3
},
{
"id": "a2055d5e-a445-4706-afb7-f36f8adedb43",
"name": "插入到 Supabase Vectorstore",
"type": "@n8n/n8n-nodes-langchain.vectorStoreSupabase",
"position": [
720,
620
],
"parameters": {
"mode": "insert",
"options": {
"queryName": "match_documents"
},
"tableName": {
"__rl": true,
"mode": "list",
"value": "documents",
"cachedResultName": "documents"
}
},
"credentials": {
"supabaseApi": {
"id": "",
"name": "Supabase account"
}
},
"typeVersion": 1
},
{
"id": "5d235803-705e-4366-b00f-ceef912db642",
"name": "从 Excel 提取",
"type": "n8n-nodes-base.extractFromFile",
"position": [
120,
800
],
"parameters": {
"options": {},
"operation": "xlsx"
},
"typeVersion": 1
},
{
"id": "0f3b9083-0510-4129-9833-215c7189148b",
"name": "嵌入 Ollama",
"type": "@n8n/n8n-nodes-langchain.embeddingsOllama",
"position": [
680,
840
],
"parameters": {
"model": "nomic-embed-text:latest"
},
"credentials": {
"ollamaApi": {
"id": "7CIt42W14b1MCgxQ",
"name": "Ollama account"
}
},
"typeVersion": 1
},
{
"id": "ca178e83-d5c1-475a-b5fa-9e83f840cd19",
"name": "Embeddings Ollama1",
"type": "@n8n/n8n-nodes-langchain.embeddingsOllama",
"position": [
200,
420
],
"parameters": {
"model": "nomic-embed-text:latest"
},
"credentials": {
"ollamaApi": {
"id": "7CIt42W14b1MCgxQ",
"name": "Ollama account"
}
},
"typeVersion": 1
},
{
"id": "5a3c0b2d-1a38-4a5f-b6b9-638ea50cce7d",
"name": "Supabase Vector Store",
"type": "@n8n/n8n-nodes-langchain.vectorStoreSupabase",
"position": [
80,
280
],
"parameters": {
"options": {
"queryName": "match_documents"
},
"tableName": {
"__rl": true,
"mode": "list",
"value": "documents",
"cachedResultName": "documents"
}
},
"credentials": {
"supabaseApi": {
"id": "",
"name": "Supabase account"
}
},
"typeVersion": 1
},
{
"id": "aa18ff0f-e29e-453f-b637-581bbb021594",
"name": "Ollama Model",
"type": "@n8n/n8n-nodes-langchain.lmOllama",
"position": [
420,
320
],
"parameters": {
"model": "llama3.1:latest",
"options": {}
},
"credentials": {
"ollamaApi": {
"id": "7CIt42W14b1MCgxQ",
"name": "Ollama account"
}
},
"typeVersion": 1
},
{
"id": "175164e7-4a84-48b2-a225-dea6afe1e94d",
"name": "Ollama聊天模型",
"type": "@n8n/n8n-nodes-langchain.lmChatOllama",
"position": [
-660,
380
],
"parameters": {
"model": "llama3.1:latest",
"options": {
"temperature": 0.5
}
},
"credentials": {
"ollamaApi": {
"id": "7CIt42W14b1MCgxQ",
"name": "Ollama account"
}
},
"typeVersion": 1
},
{
"id": "8a46d0ff-ceb9-435f-a347-d97e103cd0bc",
"name": "User_documents",
"type": "@n8n/n8n-nodes-langchain.toolVectorStore",
"position": [
200,
120
],
"parameters": {
"name": "user_documents",
"description": "包含用户的所有文档,您可以查阅这些文档以获取上下文来回答用户问题。"
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "5e57d44f-1063-4539-bbeb-d2c65025509a",
"connections": {
"Switch": {
"main": [
[
{
"node": "Extract PDF Text",
"type": "main",
"index": 0
}
],
[
{
"node": "Extract from Excel",
"type": "main",
"index": 0
}
],
[
{
"node": "Extract Document Text",
"type": "main",
"index": 0
}
]
]
},
"Webhook": {
"main": [
[
{
"node": "Edit Fields",
"type": "main",
"index": 0
}
]
]
},
"Aggregate": {
"main": [
[
{
"node": "Summarize",
"type": "main",
"index": 0
}
]
]
},
"Summarize": {
"main": [
[
{
"node": "Insert into Supabase Vectorstore",
"type": "main",
"index": 0
}
]
]
},
"Edit Fields": {
"main": [
[
{
"node": "RAG AI Agent",
"type": "main",
"index": 0
}
]
]
},
"Set File ID": {
"main": [
[
{
"node": "Delete Old Doc Rows",
"type": "main",
"index": 0
}
]
]
},
"File Created": {
"main": [
[
{
"node": "Set File ID",
"type": "main",
"index": 0
}
]
]
},
"File Updated": {
"main": [
[
{
"node": "Set File ID",
"type": "main",
"index": 0
}
]
]
},
"Ollama Model": {
"ai_languageModel": [
[
{
"node": "User_documents",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"RAG AI Agent": {
"main": [
[
{
"node": "Respond to Webhook",
"type": "main",
"index": 0
}
]
]
},
"Download File": {
"main": [
[
{
"node": "Switch",
"type": "main",
"index": 0
}
]
]
},
"User_documents": {
"ai_tool": [
[
{
"node": "RAG AI Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"Extract PDF Text": {
"main": [
[
{
"node": "Insert into Supabase Vectorstore",
"type": "main",
"index": 0
}
]
]
},
"Embeddings Ollama": {
"ai_embedding": [
[
{
"node": "Insert into Supabase Vectorstore",
"type": "ai_embedding",
"index": 0
}
]
]
},
"Ollama Chat Model": {
"ai_languageModel": [
[
{
"node": "RAG AI Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Embeddings Ollama1": {
"ai_embedding": [
[
{
"node": "Supabase Vector Store",
"type": "ai_embedding",
"index": 0
}
]
]
},
"Extract from Excel": {
"main": [
[
{
"node": "Aggregate",
"type": "main",
"index": 0
}
]
]
},
"Default Data Loader": {
"ai_document": [
[
{
"node": "Insert into Supabase Vectorstore",
"type": "ai_document",
"index": 0
}
]
]
},
"Delete Old Doc Rows": {
"main": [
[
{
"node": "Download File",
"type": "main",
"index": 0
}
]
]
},
"Postgres Chat Memory": {
"ai_memory": [
[
{
"node": "RAG AI Agent",
"type": "ai_memory",
"index": 0
}
]
]
},
"Extract Document Text": {
"main": [
[
{
"node": "Insert into Supabase Vectorstore",
"type": "main",
"index": 0
}
]
]
},
"Supabase Vector Store": {
"ai_vectorStore": [
[
{
"node": "User_documents",
"type": "ai_vectorStore",
"index": 0
}
]
]
},
"Character Text Splitter": {
"ai_textSplitter": [
[
{
"node": "Default Data Loader",
"type": "ai_textSplitter",
"index": 0
}
]
]
},
"When chat message received": {
"main": [
[
{
"node": "Edit Fields",
"type": "main",
"index": 0
}
]
]
}
}
}常见问题
如何使用这个工作流?
复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。
这个工作流适合什么场景?
高级 - 内部知识库, AI RAG 检索增强
需要付费吗?
本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。
相关工作流推荐
n8n本地测试
使用Llama3、Postgres、Qdrant和Google Drive创建私有文档问答系统
Set
Google Drive
Agent
+12
20 节点David Olusola
内部知识库
n8n 本地AI代理RAG模板
使用Ollama AI、智能RAG代理和PGVector的本地文档问答系统
Set
Switch
Webhook
+18
41 节点Jadai kongolo
内部知识库
宠物店 4
🐶 宠物店预约 AI 代理
If
Set
Code
+41
187 节点Bruno Dias
人工智能
[模板] AI宠物店 v8
🐶 AI宠物店助手 - 集成GPT-4o、Google日历和WhatsApp/Instagram/Facebook
If
N8n
Set
+38
244 节点Amanda Benks
销售
AI 代理餐厅 [模板]
🤖 WhatsApp、Instagram 和 Messenger 的 AI 餐厅助手
If
N8n
Set
+37
239 节点Amanda Benks
其他
交付汉堡店MVP
🤖 餐厅与配送自动化的 AI 驱动 WhatsApp 助手
If
Set
Code
+37
152 节点Bruno Dias