Skip to content

Z06-03 专题-AIAgent-N8N

[TOC]

N8N 介绍

n8n 地址https://github.com/n8n-io/n8n

==n8n==:是一款开源低代码工作流自动化平台,由德国开发者 Jan Oberhauser 于 2019 年创立,总部位于柏林。它通过可视化节点连接方式,让用户无需编写大量代码即可构建复杂的自动化流程,同时保留了代码级灵活性。

部署

本地部署

Node部署

sh
npx n8n

Docker部署

Docker 部署

  1. 创建卷

    sh
    docker volume create n8n_data
  2. docker 部署 n8n

    sh
    docker run -it --rm \
    	--name n8n \
    	-p 5678:5678 \
    	-v n8n_data:/home/node/.n8n \\
    	-v D:/Docker/Download:/home/node/.n8n \
    	docker.n8n.io/n8nio/n8n
    • -it:交互模式
    • --rm:docker 退出运行后自动删除镜像
    • --name n8n:docker 容器名称
    • -p 5678:5678:端口映射(外部端口 : docker内部端口)
    • -v n8n_data:/home/node/.n8n:数据存储映射(外部路径 : docker内部路径)
    • docker.n8n.io/n8nio/n8n:镜像地址

==报错==:端口占用

sh
docker: Error response from daemon: ports are not available: exposing port TCP 0.0.0.0:5678 -> 127.0.0.1:0: listen tcp 0.0.0.0:5678: bind: An attempt was made to access a socket in a way forbidden by its access permissions.

原因分析

这个错误表明 Docker 无法在主机上绑定 5678 端口,因为该端口已被其他程序占用,或者被系统策略/防火墙阻止。

解决:在 CMD 窗口中执行以下命令:

  1. 查看5678是否被占用

    sh
    netstat -ano | findstr :5678
    # 结果显示没有被占用
  2. 查看5678是否在windows系统的保留端口中

    sh
    netsh interface ipv4 show excludedportrange protocol=tcp

    image-20251211174229524

  3. 修改docker中n8n的端口:既然在系统保留端口中,我们可以修改docker中n8n的端口

    sh
    docker run -it --rm \
    	--name n8n \
    	-p 15678:5678 \
    	-v n8n_data:/home/node/.n8n \
    	docker.n8n.io/n8nio/n8n

线上部署【

HuggingFace

官网地址https://huggingface.co/

注册

image-20251209231005454

image-20251209231248526

Supabase

官网地址https://supabase.com/

注册

image-20251209225724227


创建 Group

image-20251209230109938

image-20251209230352190

实战:新闻订阅

新闻订阅:每天早8点,自动抓取国外AI新闻,经过AI翻译整理,自动发送到Telegram的指定频道。

  1. 添加 Schedule Trigger

    image-20251211180808289

  2. 问题:时区不对:默认时区是美国纽约时间,需要修改成北京时间

    image-20251211180854799

    修改成上海时间Settins - Timezone

    image-20251211181053587

实战:RAG

RAG 介绍

==RAG(Retrieval-Augmented Generation,检索增强生成)==:是一种结合信息检索生成式 AI的技术架构,核心目标是解决大语言模型(LLM)的两大痛点:知识时效性不足幻觉问题

RAG 工作流程

RAG 的工作流程可以拆解为 3 个核心阶段,本质是 “先找答案依据,再生成答案”,而非让大模型凭空 “回忆”。

  1. 数据预处理与存储(离线阶段)

    • 文档加载:导入私有数据、最新文档或特定知识库(如 PDF、文档、数据库记录、API 数据等)。
    • 文本分割:将长文档切分为小片段(Chunk),避免超出 LLM 上下文窗口,同时保证片段语义完整。
    • 向量化编码:通过嵌入模型(Embedding Model) 将文本片段转换为高维向量(Embedding),向量的相似度对应文本内容的相似度。
    • 向量存储:将向量数据存入向量数据库(如 Pinecone、Milvus、FAISS),方便后续快速检索。

    image-20251211105730294

  2. 检索阶段(在线查询阶段)

    • 用户输入查询问题后,先将问题同样转换为向量。
    • 向量数据库根据相似度算法(如余弦相似度),从库中检索出与问题最相关的 Top-K 个文本片段(即 “证据”)。
    • 这个过程类似搜索引擎,区别是基于语义而非关键词匹配。
  3. 生成阶段(答案生成阶段)

    • 用户问题 + 检索到的文本片段拼接成一个提示词(Prompt),发送给大语言模型。
    • 大语言模型基于提示词中的 “证据” 生成答案,确保输出内容有依据、不跑偏。

    image-20251211105654219


RAG 的核心优势

  1. 降低幻觉风险

    生成式 AI 容易编造不存在的信息(幻觉),RAG 让模型 “有据可依”,输、出内容的准确性和可信度大幅提升。

  2. 解决知识滞后问题

    大语言模型的训练数据有时间截止点(如 GPT-4 截止到 2023 年),无法回答最新事件或私有数据。RAG 可直接引入实时 / 私有数据,无需重新训练大模型。

  3. 支持私有数据安全使用

    敏感数据(如企业内部文档、客户数据)无需上传到公有大模型平台,可通过本地部署的向量数据库 + 私有化 LLM 实现数据隔离,满足合规要求。

  4. 成本更低,灵活性更高

    相比 微调(Fine-tuning) 大模型,RAG 无需消耗大量计算资源训练模型,只需更新向量数据库中的数据,即可快速迭代知识库。

image-20251211110119596

RAG系统搭建

搭建知识库

方式一:上传本地文件

搭建知识库

思路:将本地的 PDF/MD/CSV 等文件上传后经过大模型解析后保存到 pinecone 向量数据库中

  1. 表单提交节点

    image-20251211112809258

  2. 添加向量数据库节点image-20251211112851767

    1. pinecone 设置

      1. 注册 pinecone 账号,创建并获取 API key

        image-20251211113050693

      2. 创建 indexDatabase - Indexes

        image-20251211113312827

      3. 创建完成

        image-20251211113347206

    2. N8N 节点配置

      image-20251211113829037

  3. 为向量数据库节点配置大模型节点和pinecone 的 index 中使用的大模型保持一致

    1. openai 配置

      1. 注册 openai 账号(卡住:需要干净的IP节点):

      2. 添加支付方式(卡住:需要支付卡):Settings - Billing

        image-20251211114853379

      3. 充值:最少 $5

        image-20251211115021045

      4. 创建 API keyAPI keys - <Create new secret key>

        image-20251211115139307

      5. GPT 模型价格

        image-20251211115437448

        image-20251211115542246

    2. N8N 配置

      image-20251211115643414

      image-20251211115729925

  4. Default Data Loader 节点

    image-20251211115953537

  5. Recursive Character Text Splitter 节点

    image-20251211120025282

  6. 工作流全景

    image-20251211120124042

  7. 重命名工作流并下载到本地

方式二:crawl4ai爬取
安装crawl4ai
  1. 拉取 docker 镜像

    sh
     docker pull unclecode/crawl4ai:all-amd64
  2. 查看当前镜像

    sh
    docker images
  3. 启动 crawl4ai 镜像

    sh
    docker run -it \
      -p 11235:11235 \
      -e CRAWL4AI_API_TOKEN=12345 \
      --name crawl4ai \
      --shm-size=3g \
      unclecode/crawl4ai:all-amd64
  4. 验证启动成功:访问以下网址:

    js
    http://127.0.0.1:11235 // 注意:需要将 0.0.0.0 IP替换成 127.0.0.1
获取网站sitemap
  1. 方式一:访问网站域名后的 /sitemap.xml 页面

    sh
    https://docs.crawl4ai.com/sitemap.xml
  2. 方式二:对于不支持 sitemap 的网站,可以通过 xml-sitemaps 网站生成 sitemap

    image-20251212111640150

N8N工作流
  1. 添加触发节点on chat message

  2. 添加节点HTTP Request

    image-20251212112358859

  3. 添加 XML 节点:将XML格式内容转成JSON格式

    image-20251212112512575

  4. 添加 Split Out 节点:将JSON格式的内容切分成一个个URL

    image-20251212112729338

  5. 添加 Limit 节点:限制一次抓取的个数

    image-20251212112911389

  6. 添加 Loop Over Items 节点:循环处理每个URL

    image-20251212113043963

  7. 替换 Repeat Me 节点为 HTTP Request 节点

    1. 每循环一次抓取一次网页

      image-20251212113652468

    2. 设置 crawl4ai 的 token 凭证(token是在docker安装 crawl4ai 镜像时设置的)

      image-20251212114250485

    3. 设置 HTTP Request 节点,执行 Test,会返回一个 task_id 用于之后的 HTTP 抓取

      image-20251212114629069

  8. 添加 Wait 节点:每次抓取中间等待几秒,防止引发网站反扒策略

    image-20251212114914517

  9. 添加 HTTP Request 节点:使用以下 crawl4ai API 执行抓取任务:

    sh
    # http://host.docker.internal:11235/crawl # 1. 获取 task_id
    
    http://host.docker.internal:11235/task/<task_id> # 2. 根据 task_id 执行实际抓取任务

    image-20251212115556461

  10. 添加 If 节点:根据 stauts 属性值判断抓取是否成功

    image-20251212120256871

    1. 成功:添加AI Agent 节点:自定义 AI 提示词

      text
      角色设定:
      你是一名信息结构化和知识库开发的专家,请始终保持专业态度。你的任务是将 markdown 数据整理为适合 LLM 驱动的 RAG 知识库的结构化、易读格式。
      
      任务要求:
      
      1. 内容解析
         - 识别 markdown 数据中的关键内容和主要结构。
      
      2. 结构化整理
         - 以清晰的标题和分层逻辑组织信息,使其易于检索和理解。
         - 保留所有可能对回答用户查询有价值的细节。
      
      3. 创建 FAQ(如适用)
         - 根据内容提炼出常见问题,并提供清晰、直接的解答。
      
      
      4. 提升可读性
         - 采用项目符号、编号列表、段落分隔等格式优化排版,使内容更直观。
      
      5. 优化输出
         - 严格去除 AI 生成的附加说明,仅保留清理后的核心数据
      
      响应规则:
      
      1. 完整性: 确保所有相关信息完整保留,避免丢失对搜索和理解有价值的内容。
      2. 精准性: FAQ 需紧密围绕内容,确保清晰、简洁且符合用户需求。
      3. 结构优化: 确保最终输出便于分块存储、向量化处理,并支持高效检索。
      
      数据输入:
      <markdown>XXX</markdown>

      image-20251212132409553

    2. 失败:添加 Edit Fields 节点:自定义 task_id 属性,用于重新抓取网页

      image-20251212132318902

  11. 添加 Convert to File 节点:保存抓取的数据到本地文件中

    image-20251212132752373

  12. 添加 Read/Write Files from Disk 节点:保存生成的文件到本地

    image-20251212133514047

大模型搭配知识库

大模型搭配知识库

思路

  1. On Chat Message 节点:保持默认表单填写

  2. AI Agent 节点

    image-20251211120833866

  3. 添加 AI 模型节点

    image-20251211120948718

  4. 添加 Simple Memory 节点

    image-20251211121037813

  5. 添加 Answer questions with a vector store 节点

    注意:Data Name:不能有空格,可以改成Python

    image-20251211121233310

  6. 添加 Pinecone Vector Store 节点

    image-20251211121356544

  7. 添加 Embeddings OpenAI 节点:和之前的AI 模型保持一致

    image-20251211121457633

  8. 给 Tool 节点添加 AI 模型

    image-20251211121545969

  9. 工作流全景图

    image-20251211121757150

网站嵌入RAG

网站嵌入RAG

思路:RAG系统会对外生成一个 API 接口(聊天框),通过依赖包 @n8n/chat 可以将该接口放在网页的指定位置,页面发生对话后 N8N 会启动工作流,调用 RAG 系统回答用户的问题。

N8N 设置

  1. Public 访问:点击初始的 chat 节点,开启 Public 访问,复制 URL 访问,点击 Active 启动工作流后就可以访问了

    注意:此处的 URL 是本地地址,只能本机访问,如果要在线访问,需要设置隧道

    image-20251211122340833

搭建隧道

方式一:ngrok

ngrok 地址https://ngrok.com/

原理图

image-20251211122840760


安装 ngrok CLI

  1. 执行安装命令

    sh
    # Mac
    brew install ngrok
    
    # Debian Linux
    curl -sSL https://ngrok-agent.s3.amazonaws.com/ngrok.asc \
      | sudo tee /etc/apt/trusted.gpg.d/ngrok.asc >/dev/null \
      && echo "deb https://ngrok-agent.s3.amazonaws.com buster main" \
      | sudo tee /etc/apt/sources.list.d/ngrok.list \
      && sudo apt update \
      && sudo apt install ngrok
  2. 配置 ngrok token

    sh
    # $YOUR_TOKEN:注册 ngrok 后获取的
    ngrok config add-authtoken $YOUR_TOKEN
  3. 部署 N8N 项目上线

    sh
    ngrok http http://localhost:5678 # 5678端口是 N8N 服务的端口

    image-20251211124112050

  4. 重启 N8N,设置 webhook 网址

    image-20251211124254597

  5. 此时设置 N8N 为 Public 访问时,给出的 URL 就是一个在线网址

    注意:ngrok 服务不能停止,否则该 URL 会失效

方式二:CloudFlare【

工作流嵌入网站

依赖包@n8n/chat

在网站指定的位置嵌入以下脚本:(此处为 CDN 嵌入,其他方式访问依赖包查看)

html
<link href="https://cdn.jsdelivr.net/npm/@n8n/chat/dist/style.css" rel="stylesheet" />
<script type="module">
	import { createChat } from 'https://cdn.jsdelivr.net/npm/@n8n/chat/dist/chat.bundle.es.js';

	createChat({
		webhookUrl: 'YOUR_PRODUCTION_WEBHOOK_URL' // webhookUrl 就是上面给出的 URL 在线网址
	});
</script>

Telegram嵌入RAG

Telegram嵌入RAG

思路

  1. 替换初始 Chat 节点为 Telegram 节点:选择 on message 事件

    1. 添加 Telegram 凭证

      1. 通过 BotFather 机器人新建机器人

        1、点击 /newbot 命令新建机器人,输入机器人名称

        image-20251211130418129

        2、输入 username(必须以bot结尾),此时就生成了需要的 token

        image-20251211130634015

        3、添加 token 到 Telegram 节点

        image-20251211130801555

    2. 选择添加的凭证

      image-20251211130920268

  2. 修改 AI Agent 节点的 Simple Memeory 节点的触发方式

    image-20251211131320180

  3. 添加发生 Telegram 消息的节点:选择 Send a text message 事件

    1. 获取 chat_id:搜索 get_bot_id 机器人并启用,输入 /my_id 命令

      image-20251211131710945

    2. 填写表单

      image-20251211131829890

  4. 工作流全景图

    image-20251211131915563

  5. 测试:在 Telegram 中创建的机器人中发送消息,就会触发该工作流

    image-20251211131848616

邮箱嵌入RAG【