这是计划中的三部分系列的第一部分,从A到Z详细解释n8n.io工作流的设置和细节,通过自动化和AI摘要及代理功能的集成,解决跨多个云服务的具体问题。
第一部分将解释背景、用例、动机和设置。
第二部分将详细展示工作流的第一部分:如何收集、总结并存储新闻通讯文章
第三部分将详细解释第二个流程:从数据库摘要到发布在LinkedIn上的帖子。
n8n工作流的实际应用示例,从头到尾——第3部分:编译、翻译并发布到LinkedIn的文章…这是三部分系列的最后一篇文章,详细说明了从考虑、设置到执行的全过程…medium.com(中) 案例上次写东西已经有一阵子了。这段时间很忙,尤其是在人工智能方面,模型有了很大的改进和多模态的发展。
不过,人工智能不是我的本职工作。我的工作是(也就是企业财务和会计),不是投资银行、也就是投资组合优化以及所有那些量化的东西。我的工作是确保公司财务数据准确并编制相关报告。这些工作不仅用于内部决策,也用于对外沟通。
在这个领域,“创意”很多时候更像一个难题,而不是解决办法(……但偶尔也会有例外;-))。
在这个领域中,关键在于可追溯性、可靠性、效率以及系统兼容性(由于工具的碎片化问题严重,这似乎是随着时间推移不可避免的问题)。这些并不是LLM、TXT2IMG模型等的强项——它们更擅长于“精准猜测”和富有想象力。
“代理方法”一开始就被我视为解决日常问题的AI方法中非常有前景的一种。目前看来,代理系统预计在2025年将成为热门话题。代理方法既利用了LLM的创造性解决问题的能力,又能通过工作流规则进行明确的监督。
我意识到关于工作流是否是代理的争论还在继续。我的看法是:特别是在金融领域,系统将长期配备各种防护机制,我不认为“完全自主的代理系统”会在短期内出现。问责制和合规规则将防止代理系统完全自主,并要求有人类在其中监督。不用说,这种情况也会出现在诸如医疗护理等更加敏感的领域。
我感兴趣的是:能否定义并解决一个示例用例,利用人工智能支持,在多个IT系统中解决一个实际的案例,至少以全自动的方式,而不需要完全自主?
这场景是啥?我想到的用例是:
- 1. 通过将新闻通讯信息聚合到数据库中来自动化“知识获取流程”。在本用例中使用Notion作为数据库。不出所料,本文关注AI相关的新闻通讯。
- 2. 利用新闻通讯摘要数据库,借助代理方式进一步汇总,形成可操作的结果。在这种情况下:自动生成一篇涵盖该领域的最新发展的LinkedIn帖子,并推送到LinkedIn,之后翻译成德语(在最近一两年内最新的AI技术进步之前,这通常是难以自动化的)。
以下流程图描述了整个用例(其中IMAP表示用于检索新闻通讯的邮件服务器,n8n是选用的自动化工具;更多细节稍后介绍)。
正如所说:这一部分暂时不涉及这两种工作流的技术细节。但先来个预告,这里展示了将上述序列图转化为具体操作的两个工作流的截图如下。将在第二和第三部分详细解释它们。这个系列的第二和第三部分将详细解释它们。
工作流1:从新闻简报到带有摘要的Notion数据库
and
工作流2:从Notion的邮件摘要到LinkedIn上的博客贴
使用案例:为什么呢?“‘为什么’这个问题有不同的方面。”
为什么,学习的目的何在?
这个用例设置的初衷有几个方面:
- 简单地学习使用自动化工具
- 确保自动化工具支持一种“代理工作流”,以灵活利用新的AI能力。
- 翻译部分作为一个代理,代表了一个几个月前还难以自动化的额外问题——现在由于适当结合了代理和代理提示,这个问题可以被自动化了。
- 不同系统(如自动化工具、Notion在线数据库和LinkedIn)之间的交互,作为IT环境碎片化的典型代表。
- 结果满足了几个切实的需求:
- 跟上一个发展极其迅速的领域(比如在这个例子中的AI,但同样的方法也可以应用到许多其他领域)的进展
- 将这些信息转化为某种“行动导向的结果”,例如一篇突出最近最重要的发展的LinkedIn帖子;在企业环境中,这也可以是一份不断更新的重要公司KPI的仪表板。
为什么呢? 学习之旅
如果你对这次旅程的详细内容不感兴趣,而只想了解技术细节,你可以在这里停下来,等待或直接跳到……,取决于你现在看的时间本系列的第二部分和第三部分。但请注意,这一部分将解释不同的技术系统及其组件,以及让 n8n 能够正常运行所需的所有设置。
对于其他人来说:这被称为“学习之旅”,因为旅程本身就是目的地。我想要了解如何最终将最新的(AI)进展应用到我的公司工作里。
读了很多书之后,我想起了一句老话:看书只能记住10%,实践能记住50%,教给别人则能记住90%。
最近,我在LinkedIn上看到一个关于实际构建AI应用程序(主要集中在AI代理上)的,非常喜欢。所以这里直接引用。
这并不完全符合我的情况:并非所有的要点都对我适用(例如,“创建一个平台或社区”对我来说不太相关;另外:虽然我通常也更喜欢 Python,但在这个用例中我不得不使用 JavaScript)。
但你明白我的意思:我想要在一个实际项目中亲自尝试,以便学习。亲自处理数据。并且亲自编写一些底层代码。只有在实际操作中,你才能真正了解引擎是如何工作的。
在我用“描述用例”摸索着取得一些成功之后,我觉得总结整个学习经历是个好主意。这样做不仅是为了保留我在这个过程中额外学到的40%的内容——也是为了分享(因为没有太多超出基础知识的实用教程)。这就是我在这里写文章的动力所在。
尽管我对人工智能非常着迷,还是值得花时间亲自理清自己的思路。所以这里的一切内容都是100%不含AI,我保证!并基于我自己的思考,而不是大模型的推断。
简单来说:以下图形总结了我在该项目学习过程中涉及的各种主题——这使得这段时间的投入变得有价值:
项目学习旅程的各个阶段
我稍后会详细讲讲思维导图的各个分支。先简单说说我的学习过程中涉及了哪些细节:一些初步的想法。
n8n.io: 学习如何操作自动化工具
Docker: n8n的AI启动套件运行于其中的环境;一个非常有用的工具——如果确实想亲自处理数据和编写代码,花时间了解Docker会很有帮助。
JavaScript: 从 Python 来说,这一切对我来说都是新的;n8n 中的 Python 集成仍处于测试阶段。但学习到的是,现在不再需要具备编程专家的水平就能完成工作(……到一定程度为止……)。因此,“Claude 支持”的下一个层次是:目前,Claude 在(免费的)编程问题支持方面表现出色。我只需要一些从 Python 的“迁移学习”以及正确地与免费的 Claude 聊天版本进行适当的互动,就能进行必要的代码调整。
集成:测试 n8n 如何帮助结合不同的平台和系统,模拟通常碎片化的公司 IT 环境,如上所述。在给定的用例中,工作流程需要与 Notion、LinkedIn 以及 IMAP 邮件服务器集成。
大型语言模型: n8n自动化的一部分需要通过“AI节点”来实现。这些AI节点需要连接到特定的大型语言模型才能正常工作。在这个项目中,我对不同API的大型语言模型的质量有了不少宝贵的认识。
提示:由于工作流的一些核心功能依赖于AI节点甚至代理节点,它们必须配备适当的提示——这本身已经成为一门艺术。正是通过这个项目,我得以提升这门艺术。
算法:我发现了一些标准的工作流程,为我想实现的目标提供了良好的基础。例如,如果一个工作流程是实时的,定期接收更新——比如,或者它是在测试模式下批量执行的,这些差异使得需要对标准解决方案进行几个重要的调整是必不可少的。
为什么呢?选择工具我选择的工具是:n8n.io
根据我的理解和经验,n8n 位于以自动化为重点的工具(如 Zapier 或 make.com)和以 AI 代理为重点的框架(例如 Langraph、crewAI、Flowise 和 autoGen 等)之间的这一有趣中间地带:
n8n 这个工具在纯粹的自动化工具和纯粹的代理平台之间的定位
n8n引起了我的注意,因为我正在寻找这种流程自动化与灵活的AI整合的混合。
将其免费的 Docker 化“AI 启动包”(详情随后介绍)以及其基本使用免费且在大规模部署时比其他自动化选项更便宜的事实考虑在内,您会发现一个非常有趣的解决方案来开始自动化标准业务流程。此外:您还可以同时利用 AI 代理的优势来增加流程的灵活性,并且如果需要,您可以以较低的成本扩展解决方案。
选择的工具:Docker
这并不是我主动选择的——但通过n8n AI Starter Kit初次了解这个IT相关标准还是挺有用的。
我之前听说过并读过关于 Docker 的一些东西。但对我来说,它更像是“技术人才专用的东西”,管理及扩展云端服务远超我仅需的概念验证需求。
我并不知道它已经成为许多服务的事实上的标准,有一个非常好用的桌面版本使非专业人士也能轻松使用(如图所示),还有许多其他有趣的框架现在也经常以这种形式提供,因此未来学习使用Docker会很有帮助。
Docker Desktop 应用中正在运行的 n8n AI 启动套件容器
如果你不熟悉 Docker:将应用 Docker 化大致与编写例如 Python 代码时创建环境的目的相似。你创建一个特定的软件包、服务等配置以完成特定任务。也就是说,Docker 更进一步,实际上在你的计算机系统上运行一个完整的系统。在我看来,这就是它在云部署中如此有用的原因:你可以快速在运行的服务器上部署 Docker 容器以快速扩展或缩减。每个容器都是一个自包含的实体,自带完成特定任务所需的一切(一旦正确配置的话),并且由于它的自包含性,它是安全的。
设置过程依赖于 Docker 镜像和详细的 YAML 文件:如果你了解一些面向对象编程,最好的类比是,将 Docker 镜像视作类的定义,将容器视作该类的实例。因此,Docker 镜像就像一个蓝图,而容器则是基于此蓝图运行的计算机环境。最终,通常需要运行多个服务,所以一个容器可以包含多个镜像的运行实例(每个镜像代表一个所需服务,例如运行数据库以存储工作流信息)。而 YAML 文件则是配置容器在构建过程中实例化不同 Docker 镜像的蓝图。希望真正的 Docker 专家不会读到这里就离场——这是我对此的基本理解。
选择的工具:Notion
我绝对想将检索并总结的新闻通讯信息存入数据库,并且能够在n8n工作流之外访问它。n8n中有许多数据库连接器和选择。但是免费选项往往不是永久性的(即:它们只会存储容器运行时的数据,而不是永久存储)——或者它们是在线数据库,需要API支持并购买相应套餐——并且它们通常没有很友好的用户界面(……如果我这个观点有误,我很乐意了解其他选择。)
Notion,一个我用很久的笔记和在线分享服务。现在它在在线工具或生产力工具市场已经算是一个大玩家了。
我恰好已经通过其他用例了解了他们的数据库方法(一种相对比较基础的)。看到n8n提供Notion集成时,选择这条途径自然顺理成章——更棒的是,这个在线界面非常用户友好,如果你还不熟悉Notion,可以参考下面的截图。
典型的数据库视图
工具选择:领英(LinkedIn)
我当然不是第一个在LinkedIn上发布特定主题的新闻通讯摘要的人。但我的动机在于整个过程的完全自动化(而不是例如手动复制通讯内容并粘贴到像ChatGPT、Claude或类似的应用程序中让其进行摘要;或是使用代理框架自动化生成摘要并将其保存为文本文件……然后再手动复制粘贴到LinkedIn帖子中)。
此外,还有一些其他的动机:
(1) 增加了这一翻译。这表明几乎所有的AI相关的内容都是以英语发布的。这加剧了AI爱好者所处的信息泡沫:尽管读这篇文章的大多数人可能认为AI至少会大幅改变我们的工作和生活方式,但这并不意味着全球大多数人已经完全理解了这项技术将带来的影响。而且,许多人甚至无法获得这些信息:如果你不是英语使用者,或者英语水平不高,要跟上这一领域的最新进展确实很困难。因此,用另一种语言(如德语)提供这些精选通讯中的主要进展的简短摘要,可以为更多人提供相关信息,从而变得非常有用。
从技术上连接到LinkedIn,代表了连接不同(云托管)IT服务的PoC,展示如何用一个自动化工具整合分散的IT环境。另外,将自动化工作流与Notion整合,同样适用。
(3) 最后但同样重要的一点是:LinkedIn 上充满了关于做 AI 的人和谈论 AI 的人的比例的调侃评论。因此,这个项目也是为了让做 AI 的一方占据上风的一次努力 ;-)
请注意,原文中的冒号和括号保持不变。
为什么要做这个项目?因为它是一个贴近生活且可调整的主题!用AI写关于AI的内容有点自指。然而,上述提到的翻译部分为AI产品“新闻简报”增加了新的实用性,让一些原本无法参与的人更容易获取信息。
更重要的是,这种方法不局限于特定领域。相同的流程可以用于聚合信息,并进一步将其总结成定期帖子,无论是在哪个领域,定期通讯帮助该领域的活跃人士了解最新的发展动态。
另外,顺便提一句,如果这不是关于新闻通讯而是网站上的信息,可以通过网页抓取组件或RSS-feed节点来替换第一个流程中的IMAP邮件获取部分,实现这一点是可能的……
好了,讲了这么多为什么,现在来谈谈怎么做吧。
技术设置我不会深入介绍设置细节,而是提供一些资源,让大多数读者能够快速掌握实际的两步工作流程,以解决所述场景。此用例需要:
- 能够运行Docker
- 将n8n AI Starter Kit配置为Docker容器运行
- 设置一个可以通过IMAP协议访问的电子邮件收件箱,并订阅一些定期发送到该收件箱的邮件订阅
- 创建一个Notion数据库,并允许外部应用访问
- 开启LinkedIn账户的自动化功能
技术设置:Mac上的Docker
以下链接可以帮你开始在计算机上安装Docker Desktop(在我的情况是Mac,不过也有Windows版本的):
https://www.docker.com/blog/getting-started-with-docker-desktop/
n8n AI新手套件
如果你有一些IT经验,你可能在n8n的GitHub仓库中找到开始使用AI入门工具包所需的所有内容。他们为所有人提供了这个工具包:
https://github.com/n8n-io/self-hosted-ai-starter-kit
如何在 Docker 上部署它,可以参考这里:
https://docs.n8n.io/hosting/installation/docker/
我也收藏了非常有用的YouTube视频,在那里我发现了一步步说明如何设置“入门套件”的教程;这些细节在上面提到的GitHub页面上没有详细说明。
https://www.youtube.com/watch?v=V_0dNE-H2gw
如果你想要在当地使用 Ollama,请注意 Mac 特定的注意事项:
https://github.com/n8n-io/self-hosted-ai-starter-kit?tab=readme-ov-file#for-mac-apple-silicon-users
我不确定是否完全理解这一点。但似乎你可以在 Docker 容器内运行 Ollama。然而,n8n 并不建议这样做,因为这样你将无法利用 Apple Silicone GPU 内核。不过,如果你在 Mac 上并行运行 Ollama 服务(例如,在你的 Mac 上单独安装标准的 Ollama 后),同时运行启动套件的容器,这样你就可以在容器外使用这个 Ollama,并且它能利用你的 Apple Silicone GPU 内核。然而,当你在 n8n 工作流中配置 Ollama 节点时,则需要以不同的方式引用它(因为它是在容器外运行的)。
http://host.docker.internal:11434
而不是简单的,
http://本地主机:11434
附注:Starter Kit 的 YAML 文件和 .env 文件:
在这里我不详细阐述。简而言之,AI Starter Kit GitHub 上提供的 YAML 文件应该足以满足你的起步需求。
YAML 文件定义了构成容器的镜像及其在构建和运行时所需的参数。
据我所知,唯一需要调整的是 Ollama 可以使用的语言模型类型,但由于我最终大部分工作是通过 openAI API 完成的,这变得无关紧要。
为什么某些参数要在第二个 .env 文件中定义,而不是放在 YAML 文件里,这超出了我的理解范围。但只要提供的 YAML 和 .env 文件能让一切顺利运行,我并不在意。
旁注:更新 Starter Kit
最初我也很难理解如何更新 Starter Kit(这其实是个好迹象,说明 n8n 不断改进 AI Starter Kit)。仅仅更新 Docker 镜像是不够的,为了使更改生效,还需要强制重新创建使用该镜像的容器。直到我理解了上述提到与面向对象编程的类比之后,这才有了一点眉目。
幸运的是,这个过程在 n8n 的 GitHub 上也有详细的解释:
https://docs.n8n.io/托管/安装/docker/#更新
最好的(也就是最简单的)方法似乎是使用“Docker compose”(至少对我来说有效):
https://docs.n8n.io/托管/安装/docker/#docker-compose
新闻通讯订阅的邮箱:技术说明
显然,要求是:如果你想合并新闻通讯,最好订阅这些新闻通讯,并通过你有访问凭证的邮箱接收它们,邮箱需支持IMAP协议。
n8n 中也有一些可用的 Gmail 连接器。实际上,我最初尝试使用一个 Gmail 地址来解决这个用例的问题。但 Google 让程序访问邮箱的授权过程中的行政负担让我感到惊讶。这实际上让我怀疑他们是否雇用了前德国公务员来设计这一过程,这一过程显得过于复杂而不够用户友好……不过我跑题了——由于我可以访问一个 IMAP 邮箱账户,我发现使用 IMAP 路径要简单得多。
技术要求:Notion和LinkedIn的访问
这一步可以通过查阅n8n的官方文档来解决:
- 对于Notion:https://docs.n8n.io/integrations/builtin/credentials/notion/
- 对于LinkedIn:https://docs.n8n.io/integrations/builtin/credentials/linkedin/
这应该能解释你需要做什么步骤。我对此不太精通,所以在Google和Perplexity上查了不少资料——但最终你也可以运行成功。
n8n 非常用户友好,因为它在所有连接到外部第三方服务(如 Notion 和 LinkedIn)的节点的“编辑”菜单中提供了“连接”或“尝试”的按钮。在这个节点的配置部分,你需要输入访问这些服务所需的身份验证信息(上述链接详细描述了所需的信息及如何获取这些信息)。点击这些按钮,看到它们变绿,立即给你反馈,表明你已经准备好。
当然,你应该准备一个Notion数据库,并设置与你的使用场景相对应的数据属性字段。我选择将来源字段作为数据库条目的标题,一个日期字段(表示通讯的日期),以及一个GLANCE字段,它允许你快速查看概要,而无需打开数据库页面(详情请参阅第二部分)。总的来说,你需要清楚数据库中需要包含哪些信息——并确保属性名称与相应的n8n节点中的条目一致。一旦你连接了工作流到特定的Notion数据库,n8n会提供一个下拉列表供你选择属性。
n8n 基础与两个工作流的需求要理解进一步的步骤,首先需要先了解一些关于 n8n 的基本知识:n8n 创建的工作流应该托管在线——因此需要保持在线状态。
工作流由一系列的步骤或节点组成,每个节点或步骤代表对数据进行某种操作或做出某种决定。所谓的触发节点用来启动工作流,外部数据通过这些带有闪电符号的触发节点进入工作流。
IMAP 触发节点就是一个触发节点:一旦工作流被实际部署上线并将其状态设置为“激活”,此 IMAP 触发节点会定期检查 IMAP 收件箱中的新邮件(或者根据其他不同于“未读”的条件……但检查新邮件是最常见的使用情况)。邮件内容通过此节点进入,然后在流程中进行进一步处理。
然而,我的工作流是在本地运行的。我可以将工作流的状态设置为“活动”——但是我的电脑需要一直运行才能像服务器那样工作。对于我这种情况,以“批处理模式”操作工作流更方便,即我作为用户手动触发节点执行。这种方式在调试阶段也更有帮助,因为可以更清楚地追踪问题。而且,n8n 提供了很好的节点状态和内容的可见性,特别是在每个节点执行后。这使得开发和调试过程变得既容易又有趣。
如你可能还记得,本文开头的序列图所示,有两个流程是不同步的:流程1会检索邮件,提取内容摘要,并将其写入Notion数据库。对于一个在线且活跃的流程来说,一个实际的检查间隔可能在每小时几次到“一天一次”之间。
工作流2会从Notion数据库中读取已存储的摘要,把这些内容整理成一篇LinkedIn帖子,并把帖子发布到LinkedIn。这个流程和第一个流程是独立的。这里的间隔可以是比如每天或每周,这取决于这样的摘要应该多长时间发布一次到LinkedIn。唯一需要确保的是:在工作流1中,邮件应该只被读取、总结并写入Notion一次就好。而在工作流2中,总结的文章不应该被加入“博客文章聚合过程”超过一次。这可以通过多种方式实现,比如设置数据库标志或使用可更新的日期过滤器。
如下部分将会说明,手动“批量触发”需要添加多个过滤节点。这在实际的在线工作流版本中可能被省略。在线版本中,两个流程可以并行存在,各自独立,并由不同的定时触发节点驱动。但我认为将这两个流程完全分开会更清晰。
这是Part1的结束部分。所有关于流程的详细信息将在本文顶部提供的链接中呈现:
如果你看到这里的话,非常感激你的耐心——如果能给我点几个赞支持一下,我会特别开心。