为文件检索RAG创建OpenAI引用
高级
这是一个AI领域的自动化工作流,包含 19 个节点。主要使用 Set, Code, Markdown, SplitOut, Aggregate 等节点,结合人工智能技术实现智能自动化。 为文件检索RAG创建OpenAI引用
前置要求
- •可能需要目标 API 的认证凭证
- •OpenAI API Key
分类
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
"id": "5NAbfX550LJsfz6f",
"meta": {
"instanceId": "00493e38fecfc163cb182114bc2fab90114038eb9aad665a7a752d076920d3d5",
"templateCredsSetupCompleted": true
},
"name": "为文件检索 RAG 创建 OpenAI 引用",
"tags": [
{
"id": "urxRtGxxLObZWPvX",
"name": "sample",
"createdAt": "2024-09-13T02:43:13.014Z",
"updatedAt": "2024-09-13T02:43:13.014Z"
},
{
"id": "nMXS3c9l1WqDwWF5",
"name": "assist",
"createdAt": "2024-12-23T16:09:38.737Z",
"updatedAt": "2024-12-23T16:09:38.737Z"
}
],
"nodes": [
{
"id": "b9033511-3421-467a-9bfa-73af01b99c4f",
"name": "Aggregate",
"type": "n8n-nodes-base.aggregate",
"position": [
740,
120
],
"parameters": {
"options": {},
"aggregate": "aggregateAllItemData"
},
"typeVersion": 1,
"alwaysOutputData": true
},
{
"id": "a61dd9d3-4faa-4878-a6f3-ba8277279002",
"name": "窗口缓冲内存",
"type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
"position": [
980,
-320
],
"parameters": {},
"typeVersion": 1.3
},
{
"id": "2daabca5-37ec-4cad-9157-29926367e1a7",
"name": "便签4",
"type": "n8n-nodes-base.stickyNote",
"position": [
220,
320
],
"parameters": {
"color": 3,
"width": 840,
"height": 80,
"content": "## 在 N8N 中,将有一个聊天按钮用于测试"
},
"typeVersion": 1
},
{
"id": "bf4485b1-cd94-41c8-a183-bf1b785f2761",
"name": "便签",
"type": "n8n-nodes-base.stickyNote",
"position": [
-440,
-520
],
"parameters": {
"color": 5,
"width": 500,
"height": 720,
"content": "## 为文件检索 RAG 创建 OpenAI 引用"
},
"typeVersion": 1
},
{
"id": "539a4e40-9745-4a26-aba8-2cc2b0dd6364",
"name": "创建简单触发器以在 N8N 内拥有聊天按钮",
"type": "@n8n/n8n-nodes-langchain.chatTrigger",
"notes": "https://www.npmjs.com/package/@n8n/chat",
"position": [
260,
-520
],
"webhookId": "8ccaa299-6f99-427b-9356-e783893a3d0c",
"parameters": {
"options": {}
},
"notesInFlow": true,
"typeVersion": 1.1
},
{
"id": "aa5b2951-df32-43ac-9939-83b02d818e73",
"name": "带向量存储的 OpenAI 助手",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
580,
-520
],
"parameters": {
"options": {
"preserveOriginalTools": false
},
"resource": "assistant",
"assistantId": {
"__rl": true,
"mode": "list",
"value": "asst_QAfdobVCVCMJz8LmaEC7nlId",
"cachedResultName": "Teste"
}
},
"credentials": {
"openAiApi": {
"id": "UfNrqPCRlD8FD9mk",
"name": "OpenAi Lourival"
}
},
"typeVersion": 1.7
},
{
"id": "1817b673-6cb3-49aa-9f38-a5876eb0e6fa",
"name": "便签1",
"type": "n8n-nodes-base.stickyNote",
"position": [
560,
-680
],
"parameters": {
"width": 300,
"content": "## 设置"
},
"typeVersion": 1
},
{
"id": "16429226-e850-4698-b419-fd9805a03fb7",
"name": "获取所有线程内容",
"type": "n8n-nodes-base.httpRequest",
"position": [
1260,
-520
],
"parameters": {
"url": "=https://api.openai.com/v1/threads/{{ $json.threadId }}/messages",
"options": {},
"sendHeaders": true,
"authentication": "predefinedCredentialType",
"headerParameters": {
"parameters": [
{
"name": "OpenAI-Beta",
"value": "assistants=v2"
}
]
},
"nodeCredentialType": "openAiApi"
},
"credentials": {
"openAiApi": {
"id": "UfNrqPCRlD8FD9mk",
"name": "OpenAi Lourival"
}
},
"typeVersion": 4.2,
"alwaysOutputData": true
},
{
"id": "e8c88b08-5be2-4f7e-8b17-8cf804b3fe9f",
"name": "便签2",
"type": "n8n-nodes-base.stickyNote",
"position": [
1160,
-620
],
"parameters": {
"content": "### 检索所有线程内容是必要的,因为 OpenAI 工具不会按请求检索所有引用。"
},
"typeVersion": 1
},
{
"id": "0f51e09f-2782-4e2d-b797-d4d58fcabdaf",
"name": "从线程中拆分所有消息迭代",
"type": "n8n-nodes-base.splitOut",
"position": [
220,
-300
],
"parameters": {
"options": {},
"fieldToSplitOut": "data"
},
"typeVersion": 1,
"alwaysOutputData": true
},
{
"id": "4d569993-1ce3-4b32-beaf-382feac25da9",
"name": "从单个消息中拆分所有内容",
"type": "n8n-nodes-base.splitOut",
"position": [
460,
-300
],
"parameters": {
"options": {},
"fieldToSplitOut": "content"
},
"typeVersion": 1,
"alwaysOutputData": true
},
{
"id": "999e1c2b-1927-4483-aac1-6e8903f7ed25",
"name": "从单个消息中拆分所有引用",
"type": "n8n-nodes-base.splitOut",
"position": [
700,
-300
],
"parameters": {
"options": {},
"fieldToSplitOut": "text.annotations"
},
"typeVersion": 1,
"alwaysOutputData": true
},
{
"id": "98af62f5-adb0-4e07-a146-fc2f13b851ce",
"name": "从文件 ID 检索文件名",
"type": "n8n-nodes-base.httpRequest",
"onError": "continueRegularOutput",
"position": [
220,
120
],
"parameters": {
"url": "=https://api.openai.com/v1/files/{{ $json.file_citation.file_id }}",
"options": {},
"sendQuery": true,
"authentication": "predefinedCredentialType",
"queryParameters": {
"parameters": [
{
"name": "limit",
"value": "1"
}
]
},
"nodeCredentialType": "openAiApi"
},
"credentials": {
"openAiApi": {
"id": "UfNrqPCRlD8FD9mk",
"name": "OpenAi Lourival"
}
},
"typeVersion": 4.2,
"alwaysOutputData": true
},
{
"id": "b11f0d3d-bdc4-4845-b14b-d0b0de214f01",
"name": "规范化输出",
"type": "n8n-nodes-base.set",
"position": [
480,
120
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "2dcaafee-5037-4a97-942a-bcdd02bc2ad9",
"name": "id",
"type": "string",
"value": "={{ $json.id }}"
},
{
"id": "b63f967d-ceea-4aa8-98b9-91f5ab21bfe8",
"name": "filename",
"type": "string",
"value": "={{ $json.filename }}"
},
{
"id": "f611e749-054a-441d-8610-df8ba42de2e1",
"name": "text",
"type": "string",
"value": "={{ $('Split all citations from a single message').item.json.text }}"
}
]
}
},
"typeVersion": 3.4,
"alwaysOutputData": true
},
{
"id": "0e999a0e-76ed-4897-989b-228f075e9bfb",
"name": "便签3",
"type": "n8n-nodes-base.stickyNote",
"position": [
440,
-60
],
"parameters": {
"width": 200,
"height": 220,
"content": "### 文件检索请求包含大量信息,而我们只需要将被替换的文本和文件名。"
},
"typeVersion": 1
},
{
"id": "53c79a6c-7543-435f-b40e-966dff0904d4",
"name": "便签5",
"type": "n8n-nodes-base.stickyNote",
"position": [
700,
-60
],
"parameters": {
"width": 200,
"height": 220,
"content": "### 通过最后三个拆分,我们可能有许多引用和文本需要替换。通过进行聚合,将可以处理所有内容作为单个请求。"
},
"typeVersion": 1
},
{
"id": "381fb6d6-64fc-4668-9d3c-98aaa43a45ca",
"name": "### 需要帮助?",
"type": "n8n-nodes-base.stickyNote",
"position": [
960,
-60
],
"parameters": {
"height": 220,
"content": "### 这个简单的代码将获取所有先前的文件和引用,并修改原始文本,格式化输出。这样,我们可以使用 Markdown 标签创建链接,或者如果您愿意,我们可以添加 HTML 转换节点。"
},
"typeVersion": 1
},
{
"id": "d0cbb943-57ab-4850-8370-1625610a852a",
"name": "可选的 Markdown 转 HTML",
"type": "n8n-nodes-base.markdown",
"disabled": true,
"position": [
1220,
120
],
"parameters": {
"html": "={{ $json.output }}",
"options": {},
"destinationKey": "output"
},
"typeVersion": 1
},
{
"id": "589e2418-5dec-47d0-ba08-420d84f09da7",
"name": "最终格式化输出",
"type": "n8n-nodes-base.code",
"position": [
980,
120
],
"parameters": {
"mode": "runOnceForEachItem",
"jsCode": "let saida = $('OpenAI Assistant with Vector Store').item.json.output;\n\nfor (let i of $input.item.json.data) {\n saida = saida.replaceAll(i.text, \" _(\"+ i.filename+\")_ \");\n}\n\n$input.item.json.output = saida;\nreturn $input.item;"
},
"typeVersion": 2
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "0e621a5a-d99d-4db3-9ae4-ea98c31467e9",
"connections": {
"Aggregate": {
"main": [
[
{
"node": "Finnaly format the output",
"type": "main",
"index": 0
}
]
]
},
"Regularize output": {
"main": [
[
{
"node": "Aggregate",
"type": "main",
"index": 0
}
]
]
},
"Window Buffer Memory": {
"ai_memory": [
[
{
"node": "OpenAI Assistant with Vector Store",
"type": "ai_memory",
"index": 0
}
]
]
},
"Get ALL Thread Content": {
"main": [
[
{
"node": "Split all message iterations from a thread",
"type": "main",
"index": 0
}
]
]
},
"Finnaly format the output": {
"main": [
[
{
"node": "Optional Markdown to HTML",
"type": "main",
"index": 0
}
]
]
},
"Retrieve file name from a file ID": {
"main": [
[
{
"node": "Regularize output",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Assistant with Vector Store": {
"main": [
[
{
"node": "Get ALL Thread Content",
"type": "main",
"index": 0
}
]
]
},
"Split all content from a single message": {
"main": [
[
{
"node": "Split all citations from a single message",
"type": "main",
"index": 0
}
]
]
},
"Split all citations from a single message": {
"main": [
[
{
"node": "Retrieve file name from a file ID",
"type": "main",
"index": 0
}
]
]
},
"Split all message iterations from a thread": {
"main": [
[
{
"node": "Split all content from a single message",
"type": "main",
"index": 0
}
]
]
},
"Create a simple Trigger to have the Chat button within N8N": {
"main": [
[
{
"node": "OpenAI Assistant with Vector Store",
"type": "main",
"index": 0
}
]
]
}
}
}常见问题
如何使用这个工作流?
复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。
这个工作流适合什么场景?
高级 - 人工智能
需要付费吗?
本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。
相关工作流推荐
在可视化参考库中探索n8n节点
在可视化参考库中探索n8n节点
If
Ftp
Set
+93
113 节点I versus AI
其他
AI智能体:数秒内精准匹配LinkedIn人脉
AI智能体:数秒内精准匹配LinkedIn人脉
Set
Code
Split Out
+10
15 节点Badr
人工智能
自动化博客撰写与社交媒体推广代理
使用GPT-4、Perplexity和WordPress自动化SEO博客创建+社交媒体
Set
Code
Gmail
+21
79 节点LukaszB
设计
LinkedIn人才管道:AI驱动的候选人搜索与排名(GPT-4o)
LinkedIn人才管道:AI驱动的候选人搜索与排名(GPT-4o)
If
Set
Code
+14
24 节点Badr
人力资源
WordPress博客自动化专业版(SEO主题)v2
WordPress自动博客专业版 - SEO主题内容自动化机器
If
Set
Xml
+21
63 节点Daniel Ng
人工智能
WordPress博客自动化专业版(深度研究)v1
WordPress自动博客专业版 - 含深度研究的内容自动化机器
If
Set
Xml
+24
77 节点Daniel Ng
人工智能