Mindket

与 Supabase 存储桶里的 PDF 和文本文件聊天

新上架第 1 版 · 更新于

概览

一个 n8n 工作流:读取 Supabase 存储桶里的 PDF 和文本文件,把文字作为 OpenAI 向量存进 Supabase 的表,再给你一个能据此回答的聊天智能体。

与 Supabase 存储桶里的 PDF 和文本文件聊天 是一款 n8n 工作流,属于效率类,由 Mindket 上架。可免费获取。当前为第 1 版,最近更新于 。在本页下载,或复制它的 JSON,再导入 n8n 画布。在 n8n 里启用之前,它不会运行。

速览

用在
  • n8n Cloud:在那里新建一个工作流,把文件导入进去
  • 你自己的 n8n 服务器:同一个文件,同样的步骤
  • Supabase:存储桶、files 表和向量表都在同一个项目里
  • 共享的聊天:在 When chat message received 里打开 Make Chat Publicly Available,并设好它的认证

平台

连接 2 个应用

运行方式

触发

测试按钮和聊天消息

它有两个起点:

  • “Test workflow”按钮,读取存储桶里的新文件
  • n8n 聊天里的一条消息,用来提问

动作

  1. 读取 files 表和存储桶的文件列表,只有还没记录过的文件才继续往下走
  2. 下载每个新文件,PDF 会先提取出文字
  3. 把这个文件记到 files 表里
  4. 文字被切成每段 500 个字符,由 OpenAI 把每一段变成向量
  5. 这些段落连同文件的 id 一起存进 Supabase 的向量表
  6. 在聊天里,智能体找出最接近的 8 段,并据此回答

结果

聊天里的回答来自你存储桶里的 PDF 和文本文件,每个文件只记录一次,文字以向量形式存下来

集成

开始之前要准备好这些。

OpenAI

向量嵌入和聊天

用 text-embedding-3-small 把每一段变成向量,再用两个聊天模型分别给智能体和它的知识工具。

需要OpenAI API 密钥

Supabase

存储、表和向量

存放存储桶,列出并下载其中的文件,在表里记下每个文件,并存放和搜索向量。

需要你项目的 URL 和一个密钥,还要有一个存储桶、两张表和一个匹配函数

工作流检查

由 Mindket 于 2026年11月13日检查

步骤
14 个步骤,手动或由聊天消息启动
AI
2 个步骤调用 AI 模型:Insert into Supabase Vectorstore、AI Agent
登录
需要登录:Supabase、OpenAI
API 密钥
文件里没有留下 API 密钥
步骤类型
Mindket 的检查器能读懂它全部 12 种步骤类型

以上内容读自工作流文件,并非实际运行的结果。

关于

它是什么

这个 n8n 工作流让你和 Supabase 存储桶里的文件聊天。它的前半部分读存储桶:列出文件,跳过 files 表里已经记录的,下载其余的,并从 PDF 和纯文本文件里取出文字。文字被切成每段 500 个字符,OpenAI 把每一段变成向量,存进 Supabase 的一张表。后半部分是一个带知识工具的聊天智能体,它搜索这些段落,并据此回答。二十二个节点负责干活,旁边还有九张便签。

适合谁

把合同、手册或报告放在 Supabase 存储里、想用平常的话去问它们的团队,并且已经在用 Supabase 项目。如果你的文件是 Word 文档或图片,或者没有 n8n 的人也要用这个聊天,就别选它。它的聊天只能在 n8n 编辑器里打开。

谁在用,怎么用
行业谁在用怎么用例子
运营办公室经理问已存的合同对续约是怎么写的一位经理问租约到期前什么时候要发通知。
客户支持支持负责人搜索存在存储桶里的产品手册一位负责人问某张保修说明涵盖哪些型号。
法务律师助理不用逐个打开,就在存好的 PDF 里查一个条款一位律师助理问哪些协议规定了数据保留期限。
教育课程团队让员工向讲义和课堂笔记提问一位协调员问教学大纲在哪里定了考核日期。

这个工作流需要扎实的 n8n 功底:一个有存储桶和两张表的 Supabase 项目、一个向量函数,还要把六个节点指向你的 Supabase 凭据。

用在哪里

任何能访问 Supabase 和 OpenAI 的 n8n 都能运行它。每个文件的文字都会存进你的 Supabase 项目,聊天在 n8n 里回答。

  • n8n Cloud:在那里新建一个工作流,把文件导入进去
  • 你自己的 n8n 服务器:同一个文件,同样的步骤
  • Supabase:存储桶、files 表和向量表都在同一个项目里
  • 共享的聊天:在 When chat message received 里打开 Make Chat Publicly Available,并设好它的认证

设置

点“下载”会把一个压缩包存到你的下载文件夹,里面有 workflow.json 和 Mindket 写的设置说明。先把 Supabase 这一侧搭好。

先准备好这些
需要说明
n8nn8n Cloud 或你自己的服务器
Supabase一个项目,里面有名为 private 的存储桶、带 name 和 storage_id 两列的 files 表,以及带 match_documents 函数的 documents 表
OpenAI一个 API 密钥。向量用 text-embedding-3-small,两个聊天模型用节点自己的默认值
文件存储桶里的 PDF 或纯文本文件
  1. 在 n8n 里新建一个工作流,打开它的菜单,选 Import from File,选中 workflow.json。
  2. 在 Supabase 里建好存储桶、files 表和带 match_documents 函数的 documents 表。向量长 1536 个数,正是 text-embedding-3-small 返回的长度。
  3. 添加一个 Supabase API 凭据,填上项目的 URL 和一个密钥。在 Get All Files、Create File record2、Insert into Supabase Vectorstore 和 Supabase Vector Store 里选中它。两个 HTTP 节点 Get All files 和 Download 里,选 Supabase 凭据类型和同一个凭据。
  4. 在这两个 HTTP 节点里,把地址中的 <YOUR_SUPABASE_PROJECT_REF> 换成你的项目引用,也就是 .supabase.co 前面那一段。如果你的存储桶叫别的名字,把两处的 private 也改掉。
  5. 添加一个 OpenAI 凭据,在 Embeddings OpenAI、Embeddings OpenAI2、OpenAI Chat Model1 和 OpenAI Chat Model2 里选中它。
  6. 往存储桶里放一个 PDF 和一个文本文件,从 When clicking ‘Test workflow’ 运行工作流,看 files 和 documents 是否多了几行。
  7. 在 Supabase Vector Store 里,把 <YOUR_FILE_ID> 换成 files 里某一行的 id,让它只据那一个文件回答;或者删掉元数据过滤,搜索所有文件。
  8. 保存,在画布上点 Chat,问一个关于文件的问题。

如何使用

每次添加文件后运行前半部分。它只读 files 里还没有的文件。然后向聊天提问。智能体调用它的知识工具,拿到最接近的 8 段,并据此回答。

想要不同的结果,改哪里
要改的在哪里改
读哪些文件Switch 里的两条规则
段落大小Recursive Character Text Splitter 里的 chunkSize 500 和 chunkOverlap 200
每个问题取几段Vector Store Tool1 里的 topK,现在是 8
向量模型两个向量节点里的 text-embedding-3-small,两处必须一致
聊天智能体OpenAI Chat Model1 和 OpenAI Chat Model2 里的模型,以及工具的名字和描述

示例

一位办公室经理把两份租约 PDF 和一个写着楼内规定的文本文件放进存储桶。她把前半部分运行一次,然后问聊天:租约结束前什么时候要发通知。

每个文件在 files 里有一行,它的文字段落进入 documents,并以这一行的 id 作为 file_id。智能体搜索最接近的 8 段并据此回答。依据任何日期或数字行动之前,先对照文件本身核对。

新手与专家

新手:n8n 把工作流画成用线连起来的方框,每个方框叫节点,只做一件事。上面那一带叫 Scenario 1,用来填充知识库;下面那一带叫 Scenario 2,是聊天。先用一个小文件试,确认它的文字落进了 documents,再去提问。

专家:一个循环一次处理一个文件,If 在 Aggregate 收集的行里找它的 storage_id,据此判断这个文件是不是新的。

值得细看的地方
节点它做什么要知道什么
Get All files向存储桶的列表接口发 POST,limit 为 100,offset 为 0,按名字排序只看得到前 100 个文件
Get All Files用 n8n 默认的 50 行上限读 files 表超过 50 行后,较早的文件看起来像新的,会被再加一次
If文件不在 files 里,并且不是 .emptyFolderPlaceholder 时放行其他文件回到循环
Switch二进制数据里没有文件扩展名的下载走 txt,PDF 走 pdf其他类型两条规则都不匹配,循环就停在那里
Default Data Loader读 data 或 text,给每一段打上这一行的 id,作为 file_id聊天的元数据过滤用的就是这个字段

注意事项

只有 PDF 和纯文本文件才是预期会通过的,另外有两个上限会让它记不清文件。

  • 模型:两个聊天模型节点没有设模型,所以用节点自己的默认值,n8n 代码库在 2026 年 11 月 12 日是 gpt-5-mini。OpenAI 的弃用页面(当天查阅)给 gpt-4o 和 gpt-4o-mini 定的关停日期是 2027 年 1 月 14 日,替代模型是 gpt-6-luna。如果你的 n8n 给的是较老的默认值,就在每个节点里选一个模型
  • 文件类型:Word 文件或图片不匹配 Switch 的任何规则,所以没有东西回到循环,运行就此停住,后面的文件没读。只放 PDF 和文本
  • 上限:只看得到存储桶里的前 100 个文件,而且 Get All Files 关着 Return All,所以 n8n 只读 files 的 50 行。把那个节点的 Return All 打开
  • 重复:每个文件只会进去一次。要重新读某个文件,先删掉它在 files 里的行和它在 documents 里的段落
  • 过滤:把 <YOUR_FILE_ID> 换掉后,聊天只看得到一个文件。删掉过滤就能搜索所有文件
  • 费用:OpenAI 对每个新文件的每一段向量收费,每个问题还要一次智能体调用,外加一次知识工具的调用
  • 你的数据:每个文件的文字会发给 OpenAI,也会存进你的 Supabase 项目。你的问题会发给 OpenAI
  • 密钥:Supabase 凭据里放着一个密钥,所以请用专为这个准备的项目
  • 凭据:JSON 里没有任何凭据,也没有留下作者的项目信息

README 和文件

README

与 Supabase 存储桶里的 PDF 和文本文件聊天

一个分成两半的 n8n 工作流。前半部分读取 Supabase 存储桶里的 PDF 和文本文件,把文字切成小段,每一段作为 OpenAI 向量存进 Supabase 的一张表。后半部分是一个聊天智能体,它搜索这些段落并据此回答。

包里有什么

  • workflow.json:n8n 导出的工作流,31 个节点,其中九个是便签。里面没有任何凭据。六张便签提醒你替换凭据,两张给两半命名,Scenario 1 是文件,Scenario 2 是聊天,还有一张写着工作流的标题。
  • README.md:这份设置说明,压缩包里的是英文版。

我们相对原来的副本改了什么

  • 每个节点原来都关联着作者 n8n 里的凭据。这些关联已删掉,请选你自己的。
  • Get All files 和 Download 原来写着作者 Supabase 项目的地址。现在写的是 <YOUR_SUPABASE_PROJECT_REF>.supabase.co。
  • Supabase Vector Store 原来按作者数据库里某一个文件的 id 过滤。现在写的是 <YOUR_FILE_ID>。
  • 有三张便签放着作者的推广、一个视频链接和设置步骤。现在一张改成了简短的标题,另外两张删掉了。
  • 原来的副本没有 settings 块。Mindket 的版本把执行顺序设成 v1。
  • 别的都没改。文件里没有 Code 节点,表达式也不用修。

开始之前

  • 一个 n8n 实例,n8n Cloud 或自己的服务器都行。
  • 一个 Supabase 项目,里面有名为 private 的存储桶,放着 PDF 或纯文本文件。
  • 一张 files 表,有文本列 name 和 storage_id。
  • 一张 documents 表和一个 match_documents 函数,按 n8n 的 Supabase 向量存储要求的方式搭好。这张表有 content、metadata 和 embedding 三列,embedding 长 1536 个数,正是 text-embedding-3-small 返回的长度。
  • 一个 OpenAI API 密钥。

设置

  1. 在 n8n 里新建一个工作流,打开它的菜单,选 Import from File,选中 workflow.json。
  2. 在 Supabase 里建好存储桶、files 表,以及带函数的 documents 表。
  3. 添加一个 Supabase API 凭据,填上项目的 URL 和一个密钥。在 Get All Files、Create File record2、Insert into Supabase Vectorstore 和 Supabase Vector Store 里选中它。Get All files 和 Download 是 HTTP 请求,要选 Supabase 凭据类型和同一个凭据。
  4. 在 Get All files 和 Download 里,把地址中的 <YOUR_SUPABASE_PROJECT_REF> 换成你的项目引用,也就是 .supabase.co 前面那一段。如果你的存储桶叫别的名字,把两处的 private 也改掉。
  5. 添加一个 OpenAI 凭据,在 Embeddings OpenAI、Embeddings OpenAI2、OpenAI Chat Model1 和 OpenAI Chat Model2 里选中它。
  6. 往存储桶里放一个 PDF 和一个文本文件。从 When clicking ‘Test workflow’ 运行工作流,再看 files 和 documents 是否多了几行。
  7. 在 Supabase Vector Store 里,把 <YOUR_FILE_ID> 换成 files 里某一行的 id,让它只据那一个文件回答;或者删掉元数据过滤,搜索所有文件。
  8. 保存,在画布上点 Chat,问一个关于文件的问题。

一次运行的过程

Scenario 1,处理文件:

  1. Get All Files 读 files 表,Aggregate 把它的行合成一个列表。
  2. Get All files 向 Supabase Storage 要存储桶的文件列表,最多 100 个,按名字排序。
  3. Loop Over Items 一次取一个文件。files 里没有哪一行带它的 storage_id,并且它的名字不是 .emptyFolderPlaceholder 时,If 才放它通过。没通过的文件回到循环。
  4. Download 取回文件。Switch 把二进制数据里没有文件扩展名的下载(也就是文本文件)送进 txt 输出,把 PDF 经 Extract Document PDF 送进 pdf 输出。Merge 把两路合在一起。
  5. Create File record2 把文件加进 files。Insert into Supabase Vectorstore 接着存它的文字。Default Data Loader 读文本文件的 data 或 PDF 的 text,给每一段打上这一行的 id,作为 file_id。Recursive Character Text Splitter 把文字切成每段 500 个字符、相邻段重叠 200 个字符,Embeddings OpenAI 把每一段变成向量。循环再接着处理下一个。

Scenario 2,聊天:

  1. When chat message received 收你的消息。AI Agent 回答它,模型用 OpenAI Chat Model1。
  2. 它唯一的工具 Vector Store Tool1 叫 knowledge_base。它通过 Embeddings OpenAI2 搜索 Supabase Vector Store,返回最接近的 8 段,再由 OpenAI Chat Model2 替工具读这些内容。

改变风格

  • 读哪些文件:Switch 里的两条规则。
  • 段落大小:Recursive Character Text Splitter 里的 chunkSize 和 chunkOverlap。
  • 每个问题取几段:Vector Store Tool1 里的 topK。
  • 向量模型:两个向量节点里的 text-embedding-3-small。两处要保持一致,表里向量的长度也要对得上。
  • 聊天:OpenAI Chat Model1 和 OpenAI Chat Model2 里的模型,以及工具的名字和描述。

注意事项

  • 模型:两个聊天模型节点没有设模型,所以用节点自己的默认值,n8n 代码库在 2026 年 11 月 12 日是 gpt-5-mini。OpenAI 的弃用页面(当天查阅)给 gpt-4o 和 gpt-4o-mini 定的关停日期是 2027 年 1 月 14 日,替代模型是 gpt-6-luna。如果你的 n8n 给的是较老的默认值,就在每个节点里选一个模型。
  • 文件类型:只有 PDF 和纯文本文件才是预期会通过的。Word 文件之类的其他类型不匹配 Switch 的任何规则,所以没有东西回到循环,运行就此停住,后面的文件没读。
  • 上限:Get All files 只看得到存储桶里的前 100 个文件。Get All Files 关着 Return All,所以 n8n 只读 files 的 50 行。超过 50 行后,较早的文件看起来像新的,会被再加一次。把那个节点的 Return All 打开。
  • 每个文件只会进去一次。要重新读某个文件,先删掉它在 files 里的行和它在 documents 里的段落。
  • 元数据过滤让聊天只看一个文件。没有它,智能体会搜索 documents 里的所有文件。
  • 费用:OpenAI 对每个新文件的每一段向量收费,每个问题还要一次智能体调用,外加一次知识工具的调用。
  • 你的数据:每个文件的文字会发给 OpenAI,也会存进你的 Supabase 项目。你的问题会发给 OpenAI。
  • Supabase 凭据里放着一个密钥,所以请用专为这个准备的项目。
文件
NOTICE.md  628 B
README.md  6 KB
workflow.json  19 KB

3 个文件,共 26 KB,以 zip 压缩包下载。

更新内容

  • 第 1 版 · 2026-11-12

评价

还没有评分

写评价

还没有评价。

Mindket 的更多商品

查看 Mindket 的全部商品

Bonsai-27B-GGUF

lmstudio-community · 工具包

面向 LM Studio 的 27B Bonsai 模型 GGUF 转换版,含 3.80 GB 的 Q1_0 语言文件和 0.93 GB 的 BF16 视觉投影器。已测试文本、视觉和并行工具调用。

新上架

以每权重 2.9 位的 EXL3 量化运行 DeepSeek-V4.1-Flash-1017,这是一份 196 GiB 的副本,适合在自己硬件上部署大模型的人。困惑度与原模型相差不大。

新上架

MusicGen Small

facebook · 工具包

根据文字描述或音频提示生成短音乐片段,是 facebook MusicGen 的 small 检查点。适合想在自己电脑上试用文字生成音乐的开发者和音乐爱好者。

新上架

效率类的相似商品

查看效率类的全部商品

ACE-Step 1.5 XL SFT

ACE-Step · 工具包

用 4B 扩散解码器根据文字生成音乐,50 步并带引导控制,音频质量高于基础版。适合拥有 12 GB 或更多显存 GPU 的创作者。

新上架

Guizang PPT Skill

op7418 · 技能

能生成单文件 HTML 幻灯片、幻灯片配图和多平台封面的技能,有两套视觉风格,还带演讲者模式用于排练。适合使用 Claude Code 或 Codex 的演讲者。

新上架29.8k

Frontend Slides

zarazhangrui · 技能

从零开始或从 PowerPoint 文件生成 HTML 演示文稿,并展示几种视觉风格预览供你挑选,适合不懂 CSS 和 JavaScript、又想做网页幻灯片的人。

新上架32.3k