AI PLAY玩法更新持续收录
← 回到更新流

2026-09-24 · 原文发布日

n8n 工作流:网站爬取增量同步进 Qdrant

该 n8n 模板在 Apify 网站爬虫运行完成时触发:先读 Qdrant 集合当前向量数作基线,再启动 Apify 的 Qdrant 集成 actor,用 OpenAI embedding 把爬取数据集 upsert 进 Qdrant,做增量更新并删除过期分块。等待后再次读取向量数,并解析 Apify 运行日志,输出新增、刷新、删除分块数量的新鲜度报告。适合维护 RAG 知识库内容同步的人。需要 Apify、Qdrant、OpenAI 三处凭证。

原文要点

该免费模板在Apify Website Content Crawler actor运行完成时触发;先调Qdrant Collections API读目标集合当前向量数作为同步前基线;再启动Apify的Qdrant集成actor,把爬取数据集用OpenAI embedding upsert进Qdrant,做增量更新并删除过期分块;等待30秒让同步稳定;再次读Qdrant向量数;最后拉取Apify运行日志,输出含同步前后向量数与新增、刷新、删除分块数量的新鲜度报告。需要Apify API凭证(触发器、同步请求、日志请求三处)、QDRANT_API_KEY与OPENAI_API_KEY环境变量(必要时设N8N_BLOCK_ENV_ACCESS_IN_NODE=false),并把示例中的Qdrant集群地址与docs集合名换成自己的。

这次做成什么

按模板说明搭建这条RAG知识库增量同步链路:爬虫完成→读基线向量数→跑Qdrant集成actor→等待→再读向量数→解析日志出新鲜度报告,并用合成数据集验证计数变化。

准备什么

  • Apify账号与API凭证,账户中已有Website Content Crawler actor且至少跑过一次
  • Qdrant集群(云或自建)及API密钥,已确认端点地址
  • OpenAI API密钥,用于生成embedding
  • n8n实例,允许节点读取环境变量
  • 一个用于练习的文档集合名(本页用docs,可换)

具体怎么做

  1. 配环境变量与Apify触发器

    在n8n部署中设置QDRANT_API_KEY与OPENAI_API_KEY,若节点读不到env则按部署文档设N8N_BLOCK_ENV_ACCESS_IN_NODE=false。工作流起点加Apify Trigger,绑定你的Website Content Crawler,在actor运行完成时触发,并确认后续节点能拿到本次运行信息。

  2. 读同步前基线

    加HTTP Request节点,GET https://你的集群:6333/collections/docs,Header带QDRANT_API_KEY,从响应中取points_count存为vectorsBefore。

  3. 启动Qdrant集成actor

    加HTTP Request POST到Apify启动actor运行的接口(以Apify凭证鉴权),请求体中传入本次爬虫的datasetId、Qdrant端点与集合名docs、OpenAI embedding配置,并启用增量更新与过期分块删除;具体body字段以原模板节点为准。

  4. 等待后读同步后计数

    加Wait节点等待30秒让同步落稳,再复制步骤2的请求读取points_count存为vectorsAfter。

  5. 解析日志出报告

    加HTTP Request拉取该次Apify actor运行日志,从日志行中解析新增、刷新、删除的分块数,汇总成一份新鲜度报告(可发邮件或写入日志表),包含vectorsBefore、vectorsAfter与三项分块计数。

可直接复制的材料

环境变量与端点配置(本站示例)

本站按模板说明整理,地址与集合名必须替换;密钥请用隔离练习凭据。

QDRANT_API_KEY=替换为你的Qdrant密钥
OPENAI_API_KEY=替换为你的OpenAI密钥
QDRANT_ENDPOINT=https://your-cluster.example.qdrant.io:6333
QDRANT_COLLECTION=docs
# 若节点读不到环境变量:
N8N_BLOCK_ENV_ACCESS_IN_NODE=false

新鲜度报告JSON结构

合成测试数据;三项分块计数来自Apify运行日志解析,向量差值不要求与之严格相等(含刷新不产生净增)。

{
  "actorRunId": "合成示例run-abc123",
  "collection": "docs",
  "vectorsBefore": 1280,
  "vectorsAfter": 1307,
  "chunksAdded": 34,
  "chunksRefreshed": 12,
  "chunksDeleted": 7,
  "syncedAt": "2026-09-24T10:00:00Z"
}

输入与输出示例

本站虚构演示,数字为说明净增逻辑而设计,非实际运行结果。

输入

爬虫重跑了公司文档站,数据集含512个页面分块;同步前docs集合有1280个向量,本次有34个新页面、12个页面内容变更、7个旧页面已下线。

对应输出

新鲜度报告:vectorsBefore=1280,vectorsAfter=1307(净增27=新增34-删除7),chunksAdded=34、chunksRefreshed=12、chunksDeleted=7;报告标注同步完成时间2026-09-24T10:00:00Z。

做完检查这些

  • 触发器能接收一次已完成的爬虫运行,并把本次运行信息传给后续同步请求
  • 同步前后两次读取的是同一个集合的points_count且都成功返回
  • 集成actor请求体中的datasetId来自本次触发的爬虫运行,不是写死的旧值
  • 报告中的净增数(vectorsAfter-vectorsBefore)能用新增减删除解释
  • 三个使用Apify凭证的节点(触发、同步、日志)都换了你自己的凭证

容易卡住的地方

  • 本页步骤是按模板说明整理的复刻方案,集成actor请求体的确切字段需回原模板核对,本页不伪造API字段。
  • 30秒等待是模板设定值,大数据集可能未同步完,必要时自行加长,模板未给边界依据
  • 节点默认可能被禁止读环境变量,需按部署开启env访问,否则密钥取不到
  • Qdrant端点与集合名在同步请求体和所有Qdrant URL里要保持一致,集合不存在时依赖自动创建行为
  • 删除过期分块不可逆,练习请用测试集合而非生产知识库

原文与作者资料 ↗

本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。

原文标题
Sync website crawl deltas into Qdrant with Apify and OpenAI embeddings
原作者
Apify
原始发布日期
2026-09-24T14:26:30.721Z
来源
https://n8n.io/workflows/19911