2026-09-09 · 原文发布日
Google Drive文件夹自动建成可检索的向量知识库
手动、每日定时或新文件触发,流程扫描指定Drive文件夹,用Data Table记录跳过未改动的文件;按文件类型分别处理:导出Google文档表格、PDF提文本(扫描件先OCR)、解析Excel、用OpenAI视觉描述图片、转换Office文档,分块后生成OpenAI嵌入写入Pinecone并带文件元数据;Drive里删除的文件会同步清掉向量,不支持的格式邮件通知管理员。
原文要点
这是n8n.io上的免费工作流模板(编号19424,Stanislaw Chalupczak发布)。流程可手动、每天凌晨3点定时、或Drive文件夹有新文件时触发;扫描指定Google Drive文件夹,用n8n Data Table记录fileId/indexedAt/modifiedTime以跳过未改动文件;按MIME类型分流处理:导出Google文档/表格、PDF提取文本(扫描件先OCR转换)、解析Excel、用OpenAI Vision描述图片、把DOCX/PPTX转成Google格式再导出;文本分块后生成OpenAI嵌入(text-embedding-3-small,索引维度1536)写入Pinecone并带title/source/fileId元数据;Drive中已删除的文件会同步删除对应向量和表记录;不支持的格式通过Gmail通知管理员并记录避免重复告警。
这次做成什么
在n8n中搭一条Drive文件夹到Pinecone向量库的自动同步索引流程:增量索引、按类型提取、删除同步、异常通知。模板无工作流文件可下载,以下为按原文说明独立设计的搭建方案,节点名称以你所用n8n版本为准。
准备什么
- n8n实例(需支持Data Table功能,社区版较新版本可用)
- Google Drive OAuth2凭据及一个待索引的测试文件夹ID
- OpenAI API Key(嵌入与Vision描述图片都要用)
- Pinecone账号,已建维度1536的索引,拿到index name、host、namespace
- Gmail OAuth2凭据和管理员邮箱地址
- 两三个不同类型的测试文件(如一份Google文档、一份PDF、一张图片)
具体怎么做
建Data Table并配置Settings
在n8n的Data Tables里新建表gdrive_indexed_files,三列:fileId(文本)、indexedAt(日期)、modifiedTime(文本)。工作流第一个节点放Edit Fields命名为Settings,写入folder_id、admin_email、pinecone_index、pinecone_host、namespace、chunkSize(如1000)、chunkOverlap(如200)。配好Google Drive、OpenAI、Pinecone、Gmail四条凭据。
加三种触发器并列出文件夹文件
加三个触发节点汇入同一流程:Manual Trigger(手动跑首次建索引)、Schedule Trigger(每天凌晨3:00)、Google Drive Trigger(监听指定文件夹新建文件)。后接Google Drive节点的List Files操作,读取Settings里的folder_id,过滤掉名称带ocr_tmp/converted前缀的中间转换文件,逐文件循环处理。
增量判断:跳过未改动文件
循环内先用Data Table的Get操作按fileId查记录,接IF节点比较:若表中modifiedTime与Drive返回的modifiedTime相同,直接跳过该文件;不同或不存在才继续。这是避免每次全量重建嵌入、控制OpenAI费用的关键一步。
按MIME类型分流提取内容
接Switch节点按文件的mimeType分六路:Google文档/表格用Drive的Export操作导出为纯文本或CSV;PDF用Extract from File节点提文本,提取为空的扫描件走OCR分支(先转换再提取);Excel用电子表格解析节点读出全部行;图片调OpenAI的Vision能力生成文字描述;DOCX/PPTX先用Drive转换为Google格式再导出文本。六路最终都汇成统一字段:fileId、title、content。
分块、嵌入并写入Pinecone
汇入Text Splitter(Recursive Character),chunkSize和chunkOverlap取Settings值;每个分块调OpenAI Embeddings(text-embedding-3-small)生成向量。写Pinecone前先按fileId删除该文件旧向量,再批量upsert新向量,metadata带title、source(Drive链接)、fileId。全部块写完后,向Data Table upsert该文件的fileId/indexedAt/modifiedTime记录。
删除同步与不支持的格式通知
循环结束后加一个收尾段:读取Data Table全部fileId,与本次Drive列出的文件清单比对,表里有而Drive没有的fileId,删其Pinecone向量并删表记录。Switch节点加default分支:不支持的MIME类型走Gmail节点给admin_email发通知(含文件名和类型),同时在表里记一条skip标记,防止每天重复告警。
先手动建初始索引再开触发器
用下方测试文件清单放进测试文件夹,点Manual Trigger跑一遍"首次建索引":确认Data Table出现记录、Pinecone里能按fileId查到向量。通过后再激活Schedule和Drive两个触发器进入日常同步。
可直接复制的材料
Settings节点配置示例
本站示例配置;folder_id、host、邮箱需换成你自己的,host以Pinecone控制台为准。
{
"folder_id": "1AbCdEfGhIjKlMnOpQrStUvWxYz",
"admin_email": "admin@example.com",
"pinecone_index": "drive-kb",
"pinecone_host": "drive-kb-xxxx.svc.aped-4627-b74a.pinecone.io",
"namespace": "default",
"chunkSize": 1000,
"chunkOverlap": 200,
"embedding_model": "text-embedding-3-small",
"embedding_dimension": 1536
}分块后元数据组装代码(Code节点)
本站独立编写示例;vector_id用fileId+块序号保证重索引时可覆盖。
// 输入:当前文件信息 + 分块数组 chunks
const file = $('Loop Files').item.json;
const chunks = $input.all().map(i => i.json.chunk);
return chunks.map((chunk, idx) => ({json:{
vector_id: `${file.id}_chunk_${idx}`,
text: chunk,
metadata: {
fileId: file.id,
title: file.name,
source: `https://drive.google.com/file/d/${file.id}/view`,
chunk_index: idx
}
}}));测试文件夹内容清单
本站设计的练习清单,按此准备文件可覆盖全部六条分支。
文件名,类型,预期路径
产品FAQ(Google文档),application/vnd.google-apps.document,Export导出文本→分块→嵌入
报价单扫描件.pdf,application/pdf,提取为空→OCR转换→再提取
功能清单.xlsx,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,解析全部行→文本化→嵌入
界面截图.png,image/png,OpenAI Vision生成描述→嵌入
旧版演示.pptx,application/vnd.openxmlformats-officedocument.presentationml.presentation,转为Google幻灯片→导出文本
字体文件.woff2,font/woff2,不支持→Gmail通知+表内记skip输入与输出示例
本站虚构演示,未真实运行,块数按3200字/1000字每块估算。
输入
测试文件夹含上表6个文件;首次手动运行时Data Table为空,chunkSize=1000、chunkOverlap=200。其中"产品FAQ"导出文本约3200字,被切成4块。对应输出
运行后关键结果:Data Table新增5条索引记录(fileId、indexedAt=2026-09-14T03:00:00Z、modifiedTime)加1条skip记录;Pinecone中fileId=1FaQ...的向量按1FaQ..._chunk_0至_chunk_3共4条upsert,metadata含title='产品FAQ'与source链接;admin@example.com收到一封Gmail:"不支持的文件:字体文件.woff2(font/woff2),已跳过"。第二次运行因modifiedTime未变,6个文件全部跳过,OpenAI零调用。做完检查这些
- 首次运行后Data Table中每个支持文件各有一条记录,且modifiedTime与Drive一致
- 不改动任何文件再次运行,所有文件被跳过、不产生新的OpenAI嵌入调用
- 在Pinecone按metadata.fileId过滤能查到对应向量,且vector_id含chunk序号
- 从Drive删除一个文件后再次运行,其向量和表记录均被清除
- 放入woff2等不支持格式只收到一封通知,重复运行不再告警
容易卡住的地方
- Pinecone索引维度必须是1536,与text-embedding-3-small匹配,建错维度upsert会报错
- 扫描版PDF直接提取文本为空,必须保留OCR分支,否则该文件索引出空内容
- DOCX/PPTX要先转换成Google格式再导出,直接Export会失败
- 重索引前必须先按fileId删旧向量,否则新旧分块并存导致检索重复
- OpenAI嵌入、Vision和Pinecone存储都计费,大文件夹首次建索引前先小样本试跑
- Google Drive Trigger有轮询延迟,急用的文件可手动触发补跑
本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。
- 原文标题
- Index Google Drive documents with OpenAI embeddings and Pinecone
- 原作者
- Stanislaw Chalupczak
- 原始发布日期
- 2026-09-09T11:48:42.711Z
- 来源
- https://n8n.io/workflows/19424