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

一个 n8n 工作流:读取 Supabase 存储桶里的 PDF 和文本文件,把文字作为 OpenAI 向量存进 Supabase 的表,再给你一个能据此回答的聊天智能体。
与 Supabase 存储桶里的 PDF 和文本文件聊天 是一款 n8n 工作流,属于效率类,由 Mindket 上架。可免费获取。当前为第 1 版,最近更新于 。在本页下载,或复制它的 JSON,再导入 n8n 画布。在 n8n 里启用之前,它不会运行。
测试按钮和聊天消息
它有两个起点:
聊天里的回答来自你存储桶里的 PDF 和文本文件,每个文件只记录一次,文字以向量形式存下来
开始之前要准备好这些。
向量嵌入和聊天
用 text-embedding-3-small 把每一段变成向量,再用两个聊天模型分别给智能体和它的知识工具。
需要OpenAI API 密钥
存储、表和向量
存放存储桶,列出并下载其中的文件,在表里记下每个文件,并存放和搜索向量。
需要你项目的 URL 和一个密钥,还要有一个存储桶、两张表和一个匹配函数
由 Mindket 于 2026年11月13日检查
这个 n8n 工作流让你和 Supabase 存储桶里的文件聊天。它的前半部分读存储桶:列出文件,跳过 files 表里已经记录的,下载其余的,并从 PDF 和纯文本文件里取出文字。文字被切成每段 500 个字符,OpenAI 把每一段变成向量,存进 Supabase 的一张表。后半部分是一个带知识工具的聊天智能体,它搜索这些段落,并据此回答。二十二个节点负责干活,旁边还有九张便签。
把合同、手册或报告放在 Supabase 存储里、想用平常的话去问它们的团队,并且已经在用 Supabase 项目。如果你的文件是 Word 文档或图片,或者没有 n8n 的人也要用这个聊天,就别选它。它的聊天只能在 n8n 编辑器里打开。
| 行业 | 谁在用 | 怎么用 | 例子 |
|---|---|---|---|
| 运营 | 办公室经理 | 问已存的合同对续约是怎么写的 | 一位经理问租约到期前什么时候要发通知。 |
| 客户支持 | 支持负责人 | 搜索存在存储桶里的产品手册 | 一位负责人问某张保修说明涵盖哪些型号。 |
| 法务 | 律师助理 | 不用逐个打开,就在存好的 PDF 里查一个条款 | 一位律师助理问哪些协议规定了数据保留期限。 |
| 教育 | 课程团队 | 让员工向讲义和课堂笔记提问 | 一位协调员问教学大纲在哪里定了考核日期。 |
这个工作流需要扎实的 n8n 功底:一个有存储桶和两张表的 Supabase 项目、一个向量函数,还要把六个节点指向你的 Supabase 凭据。
任何能访问 Supabase 和 OpenAI 的 n8n 都能运行它。每个文件的文字都会存进你的 Supabase 项目,聊天在 n8n 里回答。
files 表和向量表都在同一个项目里When chat message received 里打开 Make Chat Publicly Available,并设好它的认证点“下载”会把一个压缩包存到你的下载文件夹,里面有 workflow.json 和 Mindket 写的设置说明。先把 Supabase 这一侧搭好。
| 需要 | 说明 |
|---|---|
| n8n | n8n Cloud 或你自己的服务器 |
| Supabase | 一个项目,里面有名为 private 的存储桶、带 name 和 storage_id 两列的 files 表,以及带 match_documents 函数的 documents 表 |
| OpenAI | 一个 API 密钥。向量用 text-embedding-3-small,两个聊天模型用节点自己的默认值 |
| 文件 | 存储桶里的 PDF 或纯文本文件 |
workflow.json。files 表和带 match_documents 函数的 documents 表。向量长 1536 个数,正是 text-embedding-3-small 返回的长度。Get All Files、Create File record2、Insert into Supabase Vectorstore 和 Supabase Vector Store 里选中它。两个 HTTP 节点 Get All files 和 Download 里,选 Supabase 凭据类型和同一个凭据。<YOUR_SUPABASE_PROJECT_REF> 换成你的项目引用,也就是 .supabase.co 前面那一段。如果你的存储桶叫别的名字,把两处的 private 也改掉。Embeddings OpenAI、Embeddings OpenAI2、OpenAI Chat Model1 和 OpenAI Chat Model2 里选中它。When clicking ‘Test workflow’ 运行工作流,看 files 和 documents 是否多了几行。Supabase Vector Store 里,把 <YOUR_FILE_ID> 换成 files 里某一行的 id,让它只据那一个文件回答;或者删掉元数据过滤,搜索所有文件。每次添加文件后运行前半部分。它只读 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 和纯文本文件才是预期会通过的,另外有两个上限会让它记不清文件。
gpt-5-mini。OpenAI 的弃用页面(当天查阅)给 gpt-4o 和 gpt-4o-mini 定的关停日期是 2027 年 1 月 14 日,替代模型是 gpt-6-luna。如果你的 n8n 给的是较老的默认值,就在每个节点里选一个模型Switch 的任何规则,所以没有东西回到循环,运行就此停住,后面的文件没读。只放 PDF 和文本Get All Files 关着 Return All,所以 n8n 只读 files 的 50 行。把那个节点的 Return All 打开files 里的行和它在 documents 里的段落<YOUR_FILE_ID> 换掉后,聊天只看得到一个文件。删掉过滤就能搜索所有文件一个分成两半的 n8n 工作流。前半部分读取 Supabase 存储桶里的 PDF 和文本文件,把文字切成小段,每一段作为 OpenAI 向量存进 Supabase 的一张表。后半部分是一个聊天智能体,它搜索这些段落并据此回答。
workflow.json:n8n 导出的工作流,31 个节点,其中九个是便签。里面没有任何凭据。六张便签提醒你替换凭据,两张给两半命名,Scenario 1 是文件,Scenario 2 是聊天,还有一张写着工作流的标题。README.md:这份设置说明,压缩包里的是英文版。Get All files 和 Download 原来写着作者 Supabase 项目的地址。现在写的是 <YOUR_SUPABASE_PROJECT_REF>.supabase.co。Supabase Vector Store 原来按作者数据库里某一个文件的 id 过滤。现在写的是 <YOUR_FILE_ID>。private 的存储桶,放着 PDF 或纯文本文件。files 表,有文本列 name 和 storage_id。documents 表和一个 match_documents 函数,按 n8n 的 Supabase 向量存储要求的方式搭好。这张表有 content、metadata 和 embedding 三列,embedding 长 1536 个数,正是 text-embedding-3-small 返回的长度。workflow.json。files 表,以及带函数的 documents 表。Get All Files、Create File record2、Insert into Supabase Vectorstore 和 Supabase Vector Store 里选中它。Get All files 和 Download 是 HTTP 请求,要选 Supabase 凭据类型和同一个凭据。Get All files 和 Download 里,把地址中的 <YOUR_SUPABASE_PROJECT_REF> 换成你的项目引用,也就是 .supabase.co 前面那一段。如果你的存储桶叫别的名字,把两处的 private 也改掉。Embeddings OpenAI、Embeddings OpenAI2、OpenAI Chat Model1 和 OpenAI Chat Model2 里选中它。When clicking ‘Test workflow’ 运行工作流,再看 files 和 documents 是否多了几行。Supabase Vector Store 里,把 <YOUR_FILE_ID> 换成 files 里某一行的 id,让它只据那一个文件回答;或者删掉元数据过滤,搜索所有文件。Scenario 1,处理文件:
Get All Files 读 files 表,Aggregate 把它的行合成一个列表。Get All files 向 Supabase Storage 要存储桶的文件列表,最多 100 个,按名字排序。Loop Over Items 一次取一个文件。files 里没有哪一行带它的 storage_id,并且它的名字不是 .emptyFolderPlaceholder 时,If 才放它通过。没通过的文件回到循环。Download 取回文件。Switch 把二进制数据里没有文件扩展名的下载(也就是文本文件)送进 txt 输出,把 PDF 经 Extract Document PDF 送进 pdf 输出。Merge 把两路合在一起。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,聊天:
When chat message received 收你的消息。AI Agent 回答它,模型用 OpenAI Chat Model1。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 里的模型,以及工具的名字和描述。gpt-5-mini。OpenAI 的弃用页面(当天查阅)给 gpt-4o 和 gpt-4o-mini 定的关停日期是 2027 年 1 月 14 日,替代模型是 gpt-6-luna。如果你的 n8n 给的是较老的默认值,就在每个节点里选一个模型。Switch 的任何规则,所以没有东西回到循环,运行就此停住,后面的文件没读。Get All files 只看得到存储桶里的前 100 个文件。Get All Files 关着 Return All,所以 n8n 只读 files 的 50 行。超过 50 行后,较早的文件看起来像新的,会被再加一次。把那个节点的 Return All 打开。files 里的行和它在 documents 里的段落。documents 里的所有文件。NOTICE.md 628 B README.md 6 KB workflow.json 19 KB
lmstudio-community · 工具包
面向 LM Studio 的 27B Bonsai 模型 GGUF 转换版,含 3.80 GB 的 Q1_0 语言文件和 0.93 GB 的 BF16 视觉投影器。已测试文本、视觉和并行工具调用。
LibertAIDAI · 工具包
以每权重 2.9 位的 EXL3 量化运行 DeepSeek-V4.1-Flash-1017,这是一份 196 GiB 的副本,适合在自己硬件上部署大模型的人。困惑度与原模型相差不大。
facebook · 工具包
根据文字描述或音频提示生成短音乐片段,是 facebook MusicGen 的 small 检查点。适合想在自己电脑上试用文字生成音乐的开发者和音乐爱好者。
ACE-Step · 工具包
用 4B 扩散解码器根据文字生成音乐,50 步并带引导控制,音频质量高于基础版。适合拥有 12 GB 或更多显存 GPU 的创作者。
op7418 · 技能
能生成单文件 HTML 幻灯片、幻灯片配图和多平台封面的技能,有两套视觉风格,还带演讲者模式用于排练。适合使用 Claude Code 或 Codex 的演讲者。
zarazhangrui · 技能
从零开始或从 PowerPoint 文件生成 HTML 演示文稿,并展示几种视觉风格预览供你挑选,适合不懂 CSS 和 JavaScript、又想做网页幻灯片的人。