AI 时代重做"个人助理":n8n 把 RSS、邮件、日历和 LLM 串成一条自动化
【免费下载链接】n8nFair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.项目地址: https://gitcode.com/GitHub_Trending/n8/n8n
每天早晨打开邮箱,订阅了几十份的科技 RSS 只看了两篇;会议提醒发来的时候,你正忙着回复另一封邮件;信息不是没有,而是散落在 RSS 阅读器、收件箱和日历之间,没有人替你完成"读取—判断—整理—提醒"这条链路。传统自动化工具(IFTTT、Zapier)能帮你搬运数据,却搬不动"理解"这一步——直到 LLM 的出现,把信息处理从"规则判断"升级成了"语义理解"。而 n8n 恰好站在了这个交叉点上:它是开源、可自托管、原生内置 AI 能力的工作流自动化平台,社区中已经有不少人用它搭建"AI 个人助理",把 RSS、邮件、日历与 LLM 串成同一条流水线。本文不聊空泛的概念,直接从仓库源码出发,拆解这条"个人助理"流水线每一环的真实实现。
从 RSS 订阅到 LLM 摘要的升级链路
先看整条链路的第一环:信息采集。n8n 对 RSS 的处理分成两个节点,恰好对应两种触发姿势。RssFeedReadTrigger是轮询式触发器,在 RssFeedReadTrigger.node.ts 中,它的核心逻辑是用parseFeedUrl拉取 feed,然后与工作流静态数据中记录的lastItemDate比较,只把isoDate晚于上次检查时间的条目放进输出:
feed.items.forEach((item) => { if (item.isoDate && Date.parse(item.isoDate) > dateToCheck) { returnData.push(item); } });这个节点被标记为polling: true,也就是说它不靠 webhook 推送,而是按你设定的间隔主动去"问"源站,天然适合那些只提供 RSS 而没有回调接口的站点。而RssFeedRead则是主动拉取型节点,配合 Schedule Trigger 定时执行,或者手动触发一次批量读取——测试工作流 workflow.rss.json 中可以看到,它输出的每个条目都携带title、content、contentSnippet、link、isoDate等结构化字段,这些字段正是后续喂给 LLM 的原材料。
到这里,传统自动化工具也能做到。真正的分水岭在下一环:语义压缩。RSS 原始内容往往冗长、混杂、噪音多,直接推给你等于没整理。n8n 的 AI 节点层(packages/@n8n/nodes-langchain)提供了完整的 LangChain 式组件:LMChatOpenAi(LmChatOpenAi.node.ts)等聊天模型节点负责"生成",上游则是各路文档加载器与文本切分器。把它们连起来,一条典型的链路是:RSS Trigger → Text Splitter(把长文切块)→ OpenAI Chat Model("请用 100 字概括这篇文章,并给出 3 个关键要点")→ 输出摘要。同一份 feed 数据,经过模型处理后变成一屏就能读完的晨报。
值得注意的是,这条链路完全在本地/自托管的执行环境中运行,数据从采集、处理到调用模型,每一环的流向都由你自己控制——这正是自托管自动化工具与云端 SaaS 在"个人助理"场景下的关键差异:你的阅读数据不必经过第三方平台。
节点编排:触发器、聚合与生成
理解了单条链路,再看"个人助理"的完整编排。n8n 的编排模型以节点为最小单元,节点间通过连线传递 JSON 数据,而节点本身分三类:触发器(Trigger)、处理节点(Transform)与输出节点(Output)。个人助理工作流里,三类节点的组合方式决定了这条流水线的复杂度。
触发器层决定了"什么时刻启动"。除了上面提到的RssFeedReadTrigger,仓库中还内置了邮件触发器 EmailReadImapV2.node.ts——通过 IMAP 协议监听收件箱,收到新邮件即触发,可配置Mark as Read/Nothing处理策略,也可以只抓取新邮件(trackLastMessageId选项)。日历侧的入口同样齐全,例如ICalendar节点(ICalendar.node.ts)可以把日程导出为标准 iCal 文件,作为下游 LLM 节点的输入。Schedule Trigger(ScheduleTrigger.node.ts)则提供 interval 与 cron 两种定时规则,用来兜住"每天早上 8 点"这类固定节奏。
处理层承担"聚合与生成"。来自 RSS、邮件、日历的数据格式各不相同——RSS 是title/content/isoDate,邮件是subject/body/from,日历是summary/dtstart——需要用 Set、Item Lists、Code 等节点做字段映射与合并,把它们归一化成同构的 JSON 数组,再交给 LLM。LMChatOpenAi这类模型节点支持直接引用上游字段做 prompt 模板填充,例如把 RSS 标题、邮件主题拼接成"今日待办摘要"的输入。这里的灵活性来自 n8n 的表达式系统:每个节点的参数都可以是{{ $json.field }}形式的动态引用,数据在节点间流动时无需写胶水代码。
输出层负责"触达"。摘要生成之后,最自然的落点是邮件:EmailSend节点(EmailSend.node.ts)基于 SMTP 发送,v2 版本在 send.operation.ts 中支持 Text/HTML/Both 三种格式,把 LLM 输出的 Markdown 摘要渲染成 HTML 晨报毫无压力。如果你习惯用 Telegram、Slack 或 Discord,仓库里同样有对应的消息节点,输出层的选择完全取决于你的使用习惯。
一个可落地的参考编排是这样:Schedule Trigger(工作日 08:00)→ RssFeedRead(拉取 3 个订阅源)→ Item Lists(合并去重)→ OpenAI Chat Model(生成摘要与待办)→ EmailSend(发送到个人邮箱)。整条链路不超过 6 个节点,从"信息被动接收"变成了"信息主动整理"。
成品效果与优化空间
按上述编排跑起来,成品的效果大致是:每天早晨你收到一封主题为"今日技术晨报"的邮件,正文是 LLM 生成的 3–5 条订阅要点摘要,每条附原文链接,底部是模型从邮件与日历中提取的当日待办。相比原始 RSS 阅读器,信息密度提升了一整个量级——你不必再打开十几个标签页,扫一眼摘要邮件就能决定哪些值得点进去。
但"个人助理"的工程价值恰恰体现在它暴露出的优化空间上,这也是 n8n 这类平台相比"一次成型脚本"的差异点:
其一,摘要质量与成本之间的权衡。LLM 调用按 token 计费,而 RSS 全文往往远超上下文窗口。仓库中内置的 Text Splitter 与向量存储节点(packages/@n8n/nodes-langchain/nodes/text_splitters/、vector_store/)就是为此准备的:先切块、再检索相关片段、最后才送进模型,既控制成本又避免"截断导致摘要失真"。更进一步,LMChatOllama、LmChatGroq、LmChatDeepSeek等节点的存在意味着你可以把模型从云端换成本地 Ollama,或换成更便宜的推理端点,把成本压到近乎为零。
其二,去重与防重复通知。RSS 轮询天然存在重复触发风险:源站更新了多篇文章、网络重试导致重复拉取。RssFeedReadTrigger用静态数据记录lastItemDate已经做了一层去重,但跨节点层面仍需要 Filter、Compare Datasets 等节点做二次过滤,避免同一篇文章被摘要两次。
其三,错误处理与可观测性。邮件服务器临时拒收、模型接口限流、RSS 源站返回 500,任何一个环节失败都会让整条流水线中断。n8n 内置的 Error Trigger、Stop And Error、以及每次执行的可回溯日志,让"助理偶尔罢工"从玄学变成可诊断的问题。
说到底,这条 RSS→LLM→邮件的流水线,本质是把三件事固化成了基础设施:采集(轮询与监听)、理解(模型生成摘要)、触达(多渠道推送)。n8n 的价值不在于任何一个节点本身,而在于它以开源、自托管的方式,把这三件事用可视化的连线串了起来,并且每一环都留下了可替换、可调优的接口。当你想给"助理"加一个 Slack 通知、换一个本地模型、或把摘要存进数据库时,改动的只是画布上的一个节点,而不是重写一套脚本。这大概就是"AI 时代重做个人助理"的真正含义:不是造一个更聪明的机器人,而是让已有的信息流,每一条都变得更聪明。
【免费下载链接】n8nFair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.项目地址: https://gitcode.com/GitHub_Trending/n8/n8n
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考