n8n--自动化网站内容抓取与知识库构建工作流

1. 引言

本文档旨在详细阐述一个名为"抓取网站信息"的自动化工作流的技术实现、架构和组件功能。该工作流的核心目标是从指定的网站站点地图(sitemap)出发,系统性地抓取网站内容,利用大型语言模型(LLM)对内容进行深度结构化处理,并最终生成适用于检索增强生成(RAG)知识库的标准化Markdown文件。

2. 工作流架构概览

整个工作流遵循一个清晰的数据处理管道,可分为以下五个核心阶段:

  1. 数据输入与触发 工作流由用户在聊天界面中输入一个URL(通常是站点地图地址)来启动,该URL成为所有后续处理的起点。
  2. 站点地图解析 系统接收到初始URL后,会请求并解析该XML站点地图,从中提取出构成网站的所有独立页面URL列表。
  3. 异步内容抓取 所有提取出的URL被分批提交至一个外部的异步抓取服务。工作流通过一个轮询机制持续监控抓取任务的状态,直至任务完成。
  4. AI内容结构化 一旦内容抓取成功,工作流将调用大型语言模型(LLM),根据预设的指令对抓取到的原始Markdown内容进行格式化、清理和结构化处理。
  5. 文件持久化 最后,经过AI处理和优化的结构化内容被保存为本地Markdown文件,为后续的知识库入库和向量化做好准备。

3. 核心组件详细规格

3.1 数据输入与初始化

工作流的入口点,负责接收初始指令。

  • 节点名称 : When chat message received
  • 节点类型 : @n8n/n8n-nodes-langchain.chatTrigger
  • 核心功能: 作为工作流的触发器,监听并接收用户通过聊天界面输入的初始消息。
  • 关键参数 : 将接收到的聊天输入($json.chatInput)作为后续节点的URL来源。

3.2 站点地图解析与URL提取

此阶段负责从站点地图URL中解析出所有待抓取的页面链接。

  • 节点 1: HTTP Request
    • 节点类型 : n8n-nodes-base.httpRequest
    • 核心功能: 向触发器提供的URL(站点地图的地址)发起GET请求,获取XML站点地图的原始数据。
    • 关键参数 : url: "={``{ $json.chatInput }}"
  • 节点 2: XML转为json
    • 节点类型 : n8n-nodes-base.xml
    • 核心功能: 将上一步获取的原始数据解析为结构化的XML对象,以便提取信息。
  • 节点 3: Split Out
    • 节点类型 : n8n-nodes-base.splitOut
    • 核心功能 : 从解析后的XML数据中,将urlset.url字段下的所有URL条目拆分成独立的数据项,为后续的逐一处理做准备。
    • 关键参数 : fieldToSplitOut: "urlset.url"

3.3 数据批处理与循环

在对大量URL进行抓取前,进行必要的流程控制和准备。

  • 节点 1: Limit
    • 节点类型 : n8n-nodes-base.limit
    • 核心功能: 限制进入后续流程的URL数量。此节点在当前配置中未设置具体限制值,主要作为流程控制的占位符,便于在需要时快速启用进行测试或分批处理。
  • 节点 2: Loop Over Items
    • 节点类型 : n8n-nodes-base.splitInBatches
    • 核心功能: 建立一个循环机制,用于迭代处理每一个从站点地图中提取出的URL。

3.4 异步内容抓取与状态轮询

此部分实现了一个异步任务提交和状态检查的轮询(polling)循环。工作流首先向外部服务提交一个抓取任务,然后定期查询该任务的状态,直到任务完成后才进入下一阶段。

  • 节点 1: HTTP Request1**(任务提交)**
    • 节点类型 : n8n-nodes-base.httpRequest
    • 核心功能 : 向本地的抓取服务 (http://host.docker.internal:11235/crawl) 发起一个POST请求,提交一个抓取任务。
    • 关键参数 :
      • method: "POST"
      • url: http://host.docker.internal:11235/crawl
      • bodyParameters: 发送包含urlspriority(值为10)的请求体。
      • authentication: 使用httpHeaderAuth进行认证。
    • 输出 : 该请求返回一个 task_id,用于后续的状态查询。
  • 节点 2: Wait
    • 节点类型 : n8n-nodes-base.wait
    • 核心功能: 暂停工作流执行,以避免过于频繁地查询任务状态,减轻服务器压力。
    • 关键参数 : amount 参数设置为 7,在此节点上下文中代表7秒。
  • 节点 3: HTTP Request2**(状态查询)**
    • 节点类型 : n8n-nodes-base.httpRequest
    • 核心功能 : 使用上一步提交任务时获取的task_id,向抓取服务的任务查询端点发起GET请求,获取任务的当前状态。
    • 关键参数 : url: "=http://host.docker.internal:11235/task/{``{ $json.task_id }}"
  • 节点 4: If**(条件判断)**
    • 节点类型 : n8n-nodes-base.if
    • 核心功能 : 检查任务状态查询返回的status字段。
    • 关键参数 : 如果$json.status的值等于"completed",则流程进入数据处理分支;否则,进入轮询等待分支。
  • 节点 5: Edit Fields**(循环变量设置)**
    • 节点类型 : n8n-nodes-base.set
    • 核心功能 : 此节点位于If节点的"失败"(即任务未完成)分支,其核心作用是维持轮询循环的状态。它通过表达式 {``{ $('HTTP Request1').item.json.task_id }} 捕获并保留初始任务提交时返回的task_id,并将其传递回Wait节点。这确保了在每一次循环迭代中,状态查询节点都能正确地指向最初提交的同一个任务,避免了因循环导致的状态丢失。

3.5 AI驱动的内容结构化

当抓取任务完成后,系统利用大型语言模型对抓取到的内容进行高级处理。

  • 节点 1: AI Agent
    • 节点类型 : @n8n/n8n-nodes-langchain.agent
    • 核心功能 : 调用一个大型语言模型(LLM),根据预设的提示词(Prompt),对抓取到的Markdown内容 ($json.result.markdown) 进行结构化、清理和格式优化。
    • 关键参数: 使用以下提示词对LLM的行为进行精确控制,核心指令包括角色设定、任务要求(内容解析、结构化整理、创建FAQ、提升可读性)和响应规则。
bash 复制代码
角色设定:
你是一名信息结构化和知识库开发的专家,请始终保持专业态度。你的任务是将 markdown 数据整理为适合 LLM 驱动的 RAG 知识库的结构化、易读格式。

任务要求:
1. 内容解析
   - 识别 markdown 数据中的关键内容和主要结构。

2. 结构化整理
   - 以清晰的标题和分层逻辑组织信息,使其易于检索和理解。
   - 保留所有可能对回答用户查询有价值的细节。

3. 创建 FAQ (如适用)
   - 根据内容提炼出常见问题,并提供清晰、直接的解答。

4. 提升可读性
   - 采用项目符号、编号列表、段落分隔等格式优化排版,使内容更直观。

5. 优化输出
   - 严格去除 AI 生成的附加说明,仅保留清理后的核心数据。

响应规则:
1. 完整性:确保所有相关信息完整保留,避免丢失对搜索和理解有价值的内容。
2. 精准性:FAQ 需紧密围绕内容,确保清晰、简洁且符合用户需求。
3. 结构优化:确保最终输出便于分块存储、向量化处理,并支持高效检索。

数据输入:
<markdown>XXX</markdown>
  • 节点 2: DeepSeek Chat Model
    • 节点类型 : @n8n/n8n-nodes-langchain.lmChatDeepSeek
    • 核心功能 : 作为AI Agent节点的后端语言模型,负责具体执行提示词中定义的复杂指令。

3.6 数据持久化:文件输出

工作流将AI处理后的最终内容保存到磁盘,并提供了两种并行的实现方式。

  • 方式一:直接文件写入
    • 节点 1: Convert to File: 将AI Agent输出的文本内容转换为文件对象。文件名由输出内容的第一行决定 ({``{ $json.output.split('\\n')[0] }}.md),以生成一个简洁且相关的文件名。
    • 节点 2: Read/Write Files from Disk: 将上一步生成的文件对象实际写入到服务器的磁盘。值得注意的是,此节点的fileName参数配置为 =/home/node/{``{ $('AI Agent').item.json.output }}.md,它会尝试使用AI Agent节点的全部文本输出作为文件名。
  • 方式二:通过AI Agent工具写入
    • 节点 1: AI Agent1: 这是第二个AI Agent,其任务非常专一:根据一个简单的自然语言指令 ("把{``{$json.output}}写入/home/node/{``{new Date().toISOString()}}.md文件中") 来执行文件写入操作。
    • 节点 2 & 3: MCP Client**&** MCP Client1: 为AI Agent1提供外部工具。此Agent连接了两个mcpClientTool节点。其中,MCP Client1被明确配置为执行executeTool操作,提供了一个名为write_file的工具,使Agent具备了执行文件写入的实际能力。
    • 说明: 这种方式展示了通过自然语言指令驱动AI调用外部工具来完成任务的能力,与传统的直接节点操作形成了对比,提供了更高的灵活性。

4. 总结

该工作流通过将自动化流程编排与先进的AI技术相结合,实现了一个高效、端到端的解决方案。它能够自动地将海量、非结构化的网站内容转化为高度结构化的、可直接用于高级检索应用(如RAG)的知识资产,极大地提升了知识库构建的效率和质量。

相关推荐
北京耐用通信2 小时前
告别“蜘蛛网”布线!耐达讯自动化Profibus六路集线器:电力控制更简单
人工智能·科技·网络协议·自动化·信息与通信
切糕师学AI2 小时前
钉钉Webhook机器人如何发送群消息?
机器人·自动化·钉钉
一周困⁸天.2 小时前
Jenkins 自动化部署 PHP 项目
自动化·jenkins·php
原神启动12 小时前
Ansible(三)—— 使用Ansible自动化部署LNMP环境
android·自动化·ansible
守城小轩2 小时前
基于Chrome140的Quora账号自动化(关键词浏览)——脚本撰写(二)
运维·自动化·chrome devtools·浏览器自动化·浏览器开发
weixin_307779132 小时前
Jenkins Pipeline: Input Step插件详解与实践指南
运维·开发语言·自动化·jenkins·etl
Bruce_Liuxiaowei3 小时前
Python 跨平台 Nmap 自动化扫描工具:从手动到一键批量扫描
开发语言·python·网络安全·自动化
长不大的蜡笔小新3 小时前
n8n--智能新闻简报自动化工作流
自动化·n8n
凯子坚持 c3 小时前
CodeRider-Kilo 驱动下的 Python Excel 自动化开发全流程深度解析
python·自动化·excel