n8n + AI API 实战:搭一个定时抓取 -> AI 处理 -> 自动通知的工作流

很多信息源(新闻、博客、技术更新)每天都在固定时间段更新,靠手动刷 RSS 太累,让 AI 帮忙看完再把核心要点推给你,省下大量时间。本文用 n8n 搭一条完全本地可控的自动化流水线:定时触发 → 抓 RSS 订阅源 → 调用 AI 模型做摘要 → 通过邮件或 IM 把摘要推给你。

整个流程跑在你自己机器上,不需要长期开着的云服务。如果你对 n8n 还不太熟,下面会从部署部分也写完整,跟着做一遍就能跑起来。

n8n 编辑器中工作流的整体视觉画布截图-1

这个工作流要做什么

完整链路分四段:

  1. 定时触发:每天早上 9 点启动一次,按需可改为每小时、每周。
  2. 抓取内容:从一份 RSS 订阅源(新闻站、技术博客都行)拉取最新条目。
  3. AI 处理:把每条条目的标题和摘要喂给 AI,让它生成中文要点。
  4. 推送通知:把要点整理成段落,通过邮件、Telegram 或钉钉 Webhook 发出去。

可以先选一个简单的通知渠道跑通,再逐步替换成自己习惯的 IM。整个工作流的输入只有订阅源 URL 和 AI API Key 两个东西,输出是一段可读的中文摘要。

环境准备:先部署一份 n8n

n8n 提供官方镜像,最简洁的方式是 Docker。下面的命令来自仓库 README 的 Quick Start:

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

逐项说明:

  • docker volume create n8n_data:创建一个名为 n8n_data 的命名卷,用于持久化 n8n 的配置、数据库和工作流。不预先创建的话,Docker 会在第一次挂载时自动生成一个匿名卷,迁移时要重新挂载数据,先建好更稳妥。
  • -p 5678:5678:把容器内的 5678 端口映射到宿主机的 5678,访问 http://localhost:5678 就能进编辑器。
  • -v n8n_data:/home/node/.n8n:把数据卷挂到容器内的 /home/node/.n8n,这是 n8n 默认的数据目录。
  • docker.n8n.io/n8nio/n8n:n8n 官方镜像地址。

第一次启动会因 -it 交互方式把日志打到终端。用浏览器打开 http://localhost:5678,按提示建立第一个管理员账号。账号建好后回到终端按 Ctrl+C 停掉,再用 docker start n8n 把容器以后台方式拉起来——日常使用建议改成 -d 后台运行并加上 --restart unless-stopped 做开机自启。

如果你没装 Docker,也可以直接用 npx 的方式(来自 README 的另一条 Quick Start),前提是先装好 Node.js:

npx n8n

访问地址同样是 http://localhost:5678。这种方式的优点是零依赖、易清理;缺点是关了终端 n8n 就停了。

### 凭据:把 AI API Key 安全存进去

下一步是配置 AI 模型。n8n 把所有第三方服务的登录信息统一放在 Credentials 模块里,避免在节点中明文写 Key。具体路径:左下角 CredentialsNew → 选择对应的服务(OpenAI、Anthropic、自定义 HTTP 头等)。

以 OpenAI 为例:

  • API Key:填你从厂商控制台拿到的 Key。
  • Base URL:默认即可,如果不是用官方网关或走代理,按需改成对应地址。
  • Organization(可选):按账号实际值填。

保存后这个凭据不会再次以明文出现在节点配置里——节点里只会显示一个”引用凭据”的下拉框。这也是 n8n 在面向团队/生产环境时强调凭据管理的原因。

如果你用的服务没有官方节点(例如兼容 OpenAI 协议的国产模型),后文会给出用 HTTP Request 节点的兜底方案。

搭工作流:四步连线

回到编辑器主界面,点击 New Workflow 进入画布。先给工作流起个名字,比如 daily-rss-summary

#### 1. Schedule Trigger 节点

左上角搜索 Schedule Trigger,加进来。常见配置:

  • Trigger Times:选 Days
  • Hour:填 9(代表每天 9 点)。想要每小时一次,就选 Hours 并填 1
  • Minute:填 0

按需还可以指定具体星期几、加上 cron 表达式等更灵活的触发条件,详细说明请参考官方文档。

2. RSS Feed Read 节点

把 Schedule Trigger 的输出连到 RSS Feed Read 节点。配置:

  • URL:填你关注的 RSS 订阅地址,例 https://hnrss.org/newest 或博客的 RSS 地址。
  • 其他字段按需勾选,例如是否包含完整正文(很多技术站 RSS 里带 content:encoded)。勾上后下游 AI 就能拿到更完整的内容做摘要。

完成配置后先点节点上的 Execute Node,确认它能拉回数据。下游所有的表达式都依赖这些字段。

3. AI 摘要:AI Agent / OpenAI 节点 / HTTP Request 节点

这部分是 n8n 版本差异较大的地方。n8n 较新版本提供一组 AI 节点(来自 @n8n/n8n-nodes-langchain 包),包括:

  • AI Agent:把 LLM、记忆、工具整合在一起的”代理”节点。
  • Chat Model 子节点:挂接具体的模型(OpenAI、Anthropic、Gemini、Ollama 等)。
  • Output Parser:让模型按指定格式输出(JSON / 列表等)。

如果你用的是较新版本,建议这样搭:

  1. 拖一个 Basic LLM ChainAI Agent 节点,连到 RSS Feed Read 之后。
  2. 在节点里点 Add Chat Model,选择 OpenAI Chat Model,关联前面存好的凭据。
  3. Prompt 字段写一句中文系统提示,例如:
    > 你是一个信息助理。请根据下面 RSS 条目的标题和摘要,用中文输出 3 条不超过 30 字的要点。
  4. 用表达式把 RSS 节点输出的字段插进来,例如:
标题:{{ $json.title }}
摘要:{{ $json.contentSnippet }}

> n8n 不同版本对应的 AI 节点名和字段差异较大(AI 相关节点迭代很快),请以你当前版本官方文档为准。

如果你的 n8n 是较旧版本,或者你不想用 AI 节点,也可以走 HTTP Request 节点 这条通用路:

  • MethodPOST
  • URL:你的模型网关地址,例如 https://api.openai.com/v1/chat/completions
  • Authentication:选 Generic Credential TypeHeader Auth,凭据里填 Authorization: Bearer,或直接复用 Predefined Credential Type 里的 OpenAI 凭据。
  • Body:JSON,写出 messages 数组,把 user content 从 RSS 节点拉过来。

这种方式最稳,能适配所有 OpenAI 兼容接口。

#### 4. 通知:邮件 / Telegram / 钉钉 Webhook

最后一段是通知。三个常见渠道任选其一:

  • Email Send 节点:选 SMTP 凭据,配好发件服务器、端口、用户名密码、收件人地址。SMTP 内容用表达式拼 AI 节点的输出:
{{ $json.output }}
  • Telegram 节点:先在 Telegram 里通过 @BotFather 建一个 Bot、拿到 Bot Token;在 Telegram 中和 Bot 发起一次对话后,把 chat_id 填入。配好凭证后可以发纯文本、HTML 或 Markdown。
  • 钉钉 / 飞书 / Slack Webhook:用 HTTP Request 节点 POST 到对应机器人的 Webhook URL,把 AI 输出放在 JSON 的 text / message 字段里即可。

通知节点的输入就是 AI 节点的输出,所以只要 AI 节点调通,这一段发出去的不是空字符串就基本没问题。

### 调试:逐节点执行看输出

n8n 调试很直观。右上有两个关键按钮:

  • Execute Node:只跑当前节点。
  • Execute Workflow:从头到尾跑整条链路,每步之间的数据可以悬浮查看。

调试顺序建议按数据流方向:一个一个 Execute Node,每个节点确认输出非空且结构正确后再走下一步。最容易卡住的两处:

  1. RSS Feed Read 节点返回空:通常是 URL 写错,或者服务端 RSS 没有更新内容。先在浏览器里直接打开 URL 看有没有 XML 返回。
  2. AI 节点 401/403:凭据没生效或 Key 失效。先把节点切到 Expression 模式检查表达式,用一个静态字符串先测试凭据是否正确,再去接表达式。

激活:让工作流真正自动跑起来

所有节点都正常出数据后,把画布右上角的开关从 Inactive 切到 Active。状态条会显示当前激活的工作流数量。

第一次到达你设定的触发时间(例如第二天 9 点),工作流会自动跑。如果想立刻验证一次,把 Schedule Trigger 节点的 Trigger Times 改成 Minutes 并填一个频繁的值(比如每 1 分钟一次),确认收到通知后再调回每天 9 点。

### 常见坑和应对

  • AI 节点找不到:你装的 n8n 版本可能没包含 @n8n/n8n-nodes-langchain 包。更新镜像或重启容器即可同步,或直接用 HTTP Request 节点兜底。
  • 凭据报错 Key 无效:早期版本会把 Key 仍以明文回显在日志里。建议把 Key 删掉重建,不要复用旧凭据。
  • RSS 内容是 HTML 而非纯文本:在下游加一个 HTML Extract / Markdown 节点做预处理,否则 AI 摘要会被一堆标签干扰。
  • 通知重复发送:很多 RSS 一条会推 10~20 篇,邮件会被刷屏。在 Loop / SplitInBatches 节点里做”取前 N 条”过滤,或者在前面加一个 IF 节点判断内容长度。
  • 工作流跑成功但邮箱收不到:多半是进了垃圾邮件箱。先把发件 SMTP 域名做 SPF/DKIM 校验,或者换 Telegram Webhook 做调试收件人。

把它做得更好

再往前走几步,会变成一个真正能长期用的工具:

  • 多源聚合:多拉几个 RSS Feed Read 节点,用 Merge 节点合并后再喂给 AI。
  • 按主题归类:让模型输出结构化 JSON(例如 {summary: "...", tags: ["AI", "开源"]}),再用 Markdown 转 HTML 写到 Notion / 飞书文档。
  • 失败重试:在通知前加一个 IF 节点,AI 调用失败的条目改写到本地文件数据库,第二天重读补发。
  • 观测:n8n 自带执行历史,可在 Settings → Executions 看每次运行的输入输出。生产环境建议再加一个 Slack/Discord 频道接收”工作流失败”告警。

整条链路核心资产只有 n8n 一份,完全本地可控;凭据和 AI Key 都放进凭据系统,不写在节点里。要扩展时主要靠加节点,几乎不用写代码。

如果你想进一步了解 n8n 在自托管和私有部署下的能力边界、横向对比和生态,可以站内读一下《n8n 评测》,里面详细对比了 n8n 与其他工作流自动化工具在自托管场景下的取舍。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。