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,可换)
具体怎么做
配环境变量与Apify触发器
在n8n部署中设置QDRANT_API_KEY与OPENAI_API_KEY,若节点读不到env则按部署文档设N8N_BLOCK_ENV_ACCESS_IN_NODE=false。工作流起点加Apify Trigger,绑定你的Website Content Crawler,在actor运行完成时触发,并确认后续节点能拿到本次运行信息。
读同步前基线
加HTTP Request节点,GET https://你的集群:6333/collections/docs,Header带QDRANT_API_KEY,从响应中取points_count存为vectorsBefore。
启动Qdrant集成actor
加HTTP Request POST到Apify启动actor运行的接口(以Apify凭证鉴权),请求体中传入本次爬虫的datasetId、Qdrant端点与集合名docs、OpenAI embedding配置,并启用增量更新与过期分块删除;具体body字段以原模板节点为准。
等待后读同步后计数
加Wait节点等待30秒让同步落稳,再复制步骤2的请求读取points_count存为vectorsAfter。
解析日志出报告
加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