2026-10-07 · 原文发布日
把商店、博客和云盘文件同步进 Pinecone 知识库
把 WooCommerce 商品/评价、WordPress 页面文章与 Google Drive 文件汇入同一 Pinecone 知识库:手动、每日定时、Drive 新文件或商品 webhook 触发后先校验配置,再抽取内容并按变更清理旧向量,分块生成 OpenAI embedding 写入 Pinecone,同步状态记入 n8n Data Table,异常格式可发 Gmail。付费模板。
原文要点
原工作流把 WooCommerce 商品与评价、WordPress 页面文章、Google Drive 文件夹汇入同一 Pinecone 索引。触发方式有手动、每日两个定时(博客凌晨4点、商品5点)、Drive 新文件和 WooCommerce webhook。运行先校验配置再分道处理:按 pinecone_sync_state 数据表挑出新增或变更项、清理已删除内容的旧向量,文本分块后用 OpenAI embedding(默认 text-embedding-3-small、1536 维)写入 Pinecone,并回写同步时间;webhook 会校验 HMAC 签名。模板需付费购买。
这次做成什么
在本站隔离环境里搭一条同构的同步练习流:手动触发一批合成商品和文档,校验配置→比对状态表→删除旧向量→分块生成向量→写入索引→更新状态表,跑通后能照搬到四种触发器。
准备什么
- n8n 云端或自托管实例,并已购买原模板或准备按本站方案自建
- Pinecone 账号及一个 1536 维索引,拿到 index 名称、host、namespace
- OpenAI API Key,可使用 text-embedding-3-small
- 测试用 WooCommerce 店铺、WordPress 站点、Google Drive OAuth2 凭据,全部用隔离测试账号
- Gmail 凭据(仅用于不支持格式的通知,可选)
具体怎么做
建状态表与配置节点
在 n8n Data Tables 新建表 pinecone_sync_state,列固定为 itemId(文本)、indexedAt(日期时间)、dateModified(日期时间)。再建一个 Settings 节点,填入 WooCommerce 站点 URL 与币种、Pinecone index 名称/host/namespace、embedding 模型与 1536 维度、分块大小上限、每轮处理条数上限、Drive 文件夹 ID、管理员邮箱和 webhook 密钥。模板需付费,未购买时按本站方案自建这些字段,具体节点名以原模板为准。
加校验与分道
第一个 Function/Code 节点读取 Settings,逐项检查 store URL、index、维度、分块参数及当前触发器必需的值(Drive 触发要文件夹 ID,webhook 要密钥)。任一缺失就把执行路由到 Error 分支并发 Gmail 通知;齐全则按触发来源路由到商品批量、商品 webhook、博客、Drive 四条道之一。
商品批量道:取数与比对
WooCommerce 节点拉全部已发布商品,与 pinecone_sync_state 按 itemId 比对:dateModified 晚于 indexedAt 或表里没有的才进入处理;店里已无但在表里的 itemId 说明已删除,先调用 Pinecone 按 fileId 删除其全部向量,再删状态行。每个入选商品再拉变体和最新评价拼进正文。
博客与 Drive 道
博客道用 WordPress REST API 分页盘点已发布页面和文章,变更项再拉全文,消失的条目删向量。Drive 道列目标文件夹,跳过临时文件和未变更文件,按类型抽文本(Docs/Sheets 直接导出,PDF 失败走 OCR,图片走 OpenAI Vision,DOCX/PPTX/TXT 解析),文件夹里消失的文件同样删向量。字段映射:文档 ID→fileId,标题→metadata.title,来源类型→metadata.source。
分块、向量与回写
每条内容格式化成干净正文加 metadata,先删除 Pinecone 中同 fileId 的旧向量,再按 Settings 的分块上限切分,调 OpenAI embeddings 生成 1536 维向量,批量 upsert 到指定 namespace,最后把该 itemId 的 dateModified 和当前时间 upsert 进 pinecone_sync_state。手动触发跑一轮合成数据验证全链路。
可直接复制的材料
pinecone_sync_state 表结构配置
本站独立编写的建表与配置清单;列名来自原文,键名是本示例约定,需与你在 Settings 节点的实际命名对齐。
{
"tableName": "pinecone_sync_state",
"columns": [
{"name": "itemId", "type": "string", "comment": "商品ID/文章ID/Drive文件ID,与 Pinecone metadata.fileId 一致"},
{"name": "indexedAt", "type": "datetime", "comment": "最近一次成功写入向量的时间"},
{"name": "dateModified", "type": "datetime", "comment": "来源系统记录的最后修改时间"}
],
"settingsNodeRequiredKeys": ["wooBaseUrl", "currency", "pineconeIndex", "pineconeHost", "pineconeNamespace", "embeddingModel", "embeddingDimensions", "chunkMaxChars", "perRunCap", "driveFolderId", "adminEmail", "wooWebhookSecret"]
}校验节点的检查提示词(供 Code 节点内注释或 AI 辅助生成用)
本站编写的校验提示词,可放入 Code 节点旁的 AI 辅助或改写成纯 JS 判断,非原模板内容。
你是 n8n 配置校验器。输入是 Settings 节点的 JSON 和触发器类型 triggerType(manual/drive/webhook/schedule)。规则:1) wooBaseUrl、pineconeIndex、pineconeHost、pineconeNamespace、embeddingModel、embeddingDimensions、chunkMaxChars、perRunCap 必须有非空值;2) embeddingDimensions 必须等于 Pinecone 索引创建时的维度,默认 1536;3) triggerType 为 drive 时 driveFolderId 必填,为 webhook 时 wooWebhookSecret 必填;4) chunkMaxChars 建议在 500-2000 之间。输出 JSON:{"ok": true/false, "missing": [字段名], "route": "商品批量|商品webhook|博客|Drive|error"}。只输出 JSON。合成商品测试数据
本站虚构的测试 CSV;woo-1003 状态为 draft,用于验证下架商品向量被删除。
itemId,title,description,dateModified,status
woo-1001,极简帆布托特包,"14安帆布,内袋拉链,承重8kg",2026-10-05T09:00:00Z,publish
woo-1002,冷萃咖啡玻璃瓶,"500ml 高硼硅,附不锈钢滤网",2026-10-06T14:30:00Z,publish
woo-1003,旧款手机壳,"已下架商品,用于测试删除向量",2026-09-01T08:00:00Z,draft输入与输出示例
本站虚构演示,未实际运行,非原作者结果。
输入
触发方式选手动,pinecone_sync_state 中已有 woo-1001(indexedAt=2026-10-06T00:00:00Z, dateModified=2026-10-05T09:00:00Z)和 woo-1003 的记录,商店里 woo-1003 已改 draft,woo-1002 是新商品。对应输出
校验通过→路由商品批量。比对结果:woo-1001 未变更跳过;woo-1003 已下架,删除 Pinecone 中 fileId=woo-1003 的全部向量并删状态行;woo-1002 新增,正文分 2 块生成 1536 维向量写入 namespace,状态表新增一行 {itemId: woo-1002, dateModified: 2026-10-06T14:30:00Z, indexedAt: 2026-10-07T05:00:11Z}。做完检查这些
- pinecone_sync_state 建好后能看到 itemId、indexedAt、dateModified 三列且类型正确
- 缺少任一必填配置时执行走 error 分支并发出 Gmail 通知,不会写向量
- woo-1003 这类下架项的向量被删除且状态行同步删除
- woo-1002 这类新商品写入后,用 Pinecone 控制台按 fileId 过滤能查到对应分块
- 第二轮手动运行时未变更项被跳过,没有重复写入
容易卡住的地方
- 索引维度必须与 embeddingDimensions 一致,默认 1536,建错维度只能重建索引
- Drive 触发器监听的文件夹 ID 要与 Settings 里的一致,否则两条逻辑各看各的
- WooCommerce webhook 需指向生产 webhook 地址(以 /webhook/woo-product-events 结尾)且校验 HMAC,测试地址收不到签名事件
- 原模板为付费模板,本站步骤是自建方案,节点命名与默认值以购买后的原模板为准
- OpenAI embedding 与 Pinecone 存储均按用量计费,先用合成小数据跑通
本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。
- 原文标题
- Sync WooCommerce products, blog, and Google Drive files to Pinecone with OpenAI
- 原作者
- Stanislaw Chalupczak
- 原始发布日期
- 2026-10-07T06:46:19.628Z
- 来源
- https://n8n.io/workflows/20604