🔰制作第一个与大模型配合的 n8n 程序

type
status
date
slug
summary
tags
category
icon
password
author
标签
第三方接入

这篇文章适合谁阅读?

适合对n8n完全没有了解,并且运维技巧几乎未 0 的人阅读。
这篇文章不但会基于一个简单的 Case 讲解 n8n 的使用方法,还会讲述在制作程序中遇到的每一个坑,并且遇到这些坑如何解决,以及从用户心理的角度去做一些分析,希望能够通过这篇教程降低 n8n 学习曲线的陡峭程度,尤其是对于新手来说。
这篇文章所涉及到的程序,需要用到 Google 的 API,所以需要读者已经购买了 n8n 的官方云服务版,或者在自己的服务器上部署了 n8n,关于如何部署,详细方法见:
☁️
如何在服务器部署/安装 n8n

需求描述

假如你是一个 SaaS 系统的负责人,客户在使用 SaaS 的时候都会产生大量的疑问(每天超过 100 个),这些疑问变成工单提交给客服。
现在你计划对这个 SaaS 做 3 项改进,你希望知道这 3 项改进完成之后,会带来多少的收益,有多少工单里面涉及的问题可以得到彻底的解决,所以客户不再不需要提交工单。
所以这本质上是一个将所有工单的聊天记录内容和 3 个已知的问题去匹配的过程。

为什么需要 n8n 才能解决这个需求?

这个需求乍一听,可以通过上传 excel 直接让 ChatGPT/kimi 来解决,但实际上而这都不能很好的解决这个问题。
因为 ChatGPT 在读取文件的时候,会以 RAG 的方式读取,无法确保针对工单内的每一行数据都进行处理。如果将工单作为文字直接发出来,一次对话的上下文大概能容纳 30000 字左右,假定一个工单的聊天记录长度为 500 个字,那么一次处理仅支持 60 个工单,如果我们要处理 3000 个工单(1个月的量)就需要循环 50 次这样的操作。
此外由于大模型的幻觉问题,大量的数据以非结构化的方式提供给 AI,很难保证最终的效果。
ChatGPT 是一个产品,在工程设计上,它不被允许在对话过程中自我调用。这意味着,你无法让 ChatGPT 根据 Excel 中的某一列单元格里的内容,去输出另一列单元格里的内容。
所以合理的方式是把 3 个已知问题的定义写清楚,作为提示词的一部分,然后每次只给 AI 提供一个工单的内容,询问 AI 是否判定这个工单命中已知的 3 个问题。
把 AI 作为逻辑的一部分,而不是全部,是更好的选择。
拓展阅读:
🧙
欢迎来到 n8n 中文教程

工作思路

程序设计原则

  1. 免费:尽量使用免费的 API;
  1. 可复用;

工作方法

  1. 一切看不懂的东西,第一时间询问 ChatGPT,比如错误码看不懂,就可以直接问 ChatGPT;
notion image
  1. 理解 n8n 的界面设计思路,可以阅读:
    🗃️
    熟悉 n8n 的界面
  1. 每个步骤都要做单步调试;
  1. 涉及到大模型的环境,单步调试的循环次数要降低,以节省 API 调用次数;
  1. 大模型 API 往往会在其官网提供调试环境,这种调试环境给出的结果和 API 实际调用可能会有出入,所以在调教 Prompt 时,单步调试 + 看 log 是非常有有必要的,值得庆幸的是 n8n 的 log看起来很好懂;

详细配置步骤

第一步:如何触发程序运行

选择新增第一个节点时,系统会询问你希望通过什么方式来触发这个程序的运行。
notion image
假定我们每个月只需要分析一次工单,一次分析 3000 条,那么完全可以考虑选择第一个选项,每次需要分析的时候手动点击一下启动即可。
所以我们的第一个节点如下图所示:
notion image

第二步:让程序获取到所有工单

假定我们有 3000 条工单需要被分析,那么这 3000 条工单最好能够以 Excel 的形式给到程序,这样程序就可以循环处理 3000 次,完成我们的工单分类目标。
那么程序要怎么读取到这 3000 条工单呢?
点击界面上的 + 号,就可以发现我们有不少选项,他们分别是:
  • 外界服务的API,比如 Google Sheets;
  • 数据处理节点,用来做数据的过滤或者转化;
  • Flow 节点,主要是条件、循环、合并等逻辑操作;
  • Core 节点,主要是代码节点;
  • 人工智能节点;
  • 添加另一个触发器,里面有一个节点叫做 Local File,意思是如果本地文件发生变化,系统自动执行流程;
notion image
notion image
所以我们现在有两个选择:
  1. 将数据存储在 Google Sheets 之中;
  1. 将数据存储在本地文件,本地文件发生变化,自动触发;
针对这个需求我建议我们使用第一个选项,将数据存储在 Google Sheets 之中,原因如下:
  • 我们使用的版本是部署在服务器上面的,更改本地文件很不方便,使用 Google Sheets,每次把需要处理的内容贴到对应的 Sheet 页即可;
  • 我希望这个程序运行是我手工控制的,而不是文件变更就自动进行;
所以我们选择 Google Sheets 的 Get rows in sheet的节点。因为我们这一个步骤是需要读取 Sheets 中的信息。
notion image
notion image
配置节点的第一个步骤是需要配置相关的授权凭证,这样n8n才能读取到 Google Sheets中的数据。
 
notion image
notion image
在n8n的界面上,一些需要配置的界面通常都会有文档的超链接,但是n8n的官方文档写的真的是一言难尽,非常不好读,怎么办?
打开官方文档,把官网文档的标题(Google:OAuth2 single service)复制出来,加上一个 How to create 作为关键词去 Google 里面搜索,搜到的教程一般比 n8n 官方文档的更好。比如 Google Sheets, 。我利用关键词:how to create Google sheets OAuth2 single service 我就搜到了这个教程,排名第一:
notion image
因为实际上我们在这个场景下面要搜索的本质上是如何配置一个 Google Sheets API 凭证,这本身不是 n8n 功能的一部分,所以 n8n 的文档写的非常敷衍了事,但是我们可以通过搜索引擎找到好用的文档,一些常用的服务,甚至是能搜到中文文档的。
按照上面的文档,跟随步骤操作即可。
配置好之后,就需要正式开始读取操作,把 Document 设置成通过URL 读取,然后把你希望程序读取的 Sheets的网址复制进去,就可以读取到对应的 Sheet 页了。
notion image
notion image
然后这个时候选择 Test Step,我们就可以从 Sheet中读取到对应的数据,第一步就大获成功了。
notion image
notion image
回到 Workflow的界面,我们可以看到一个绿色的 7 items 的文案,这代表刚刚系统已经从 Sheets 中读取到了 7 条独立的记录。

第三步:添加大模型节点

首先我们选择添加下一个节点,在 AI 节点内选择 Basic LLM Chain。关于所有 AI 节点的区别,在 AI 节点详细介绍内会有更详细的说明。
notion image
新添加的 AI 节点默认都会带一个接收聊天消息的触发器,但是在咱们的场景里面,我们就是希望 AI 节点能够处理 Excel 的文件内容即可,所以我们可以把这个触发器删掉。
notion image
接下来就是要给 LLM 的节点配置一个大模型的 API,我们点击 Model 的 + 号,并且选择 Google Gemini Chat Model。如果你有别的大模型的 API,也可以直接使用。我们这里选择 Google Gemini 的原因是它有免费的额度。
🌟
如果你 n8n 的运行环境不能访问 Google 或 OpenAI,建议使用 CloseAIWildCard 代理。支持免科学访问 OpenAI 和 Anthropic 的所有模型,支付宝付款,按量付费。
notion image
登录到 https://aistudio.google.com/ 可以在 google 的 AIStuido 白嫖免费的 Gemini 的 API;
注意,Gemini 目前只面向特定区域的用户开放 API,所以你一定要确保自己上网的方式是正确的。
notion image
然后把创建好的密钥填写到 n8n 的界面上面去,这样模型就挂载好了。
notion image

第四步:撰写提示词+调试

在 Google AI Studio 中调试提示词
进入 Google AI Studio 的界面中,选择 New Prompt,然后选择 Chat prompt 模式。就可以在对话框中开始调试 Prompt,这个环境调试 Prompt 是免费的,不需要花钱。
notion image
但是在这个环境内调试出来的 Prompt 不代表是万能的,因为 API 实际调用的时候,大模型返回的结果可能会不一样,所以在这个环境调试出来的 Prompt 还需要在 n8n 内被配置之后再进行测试。
在 n8n 的 LLM 节点配置 Prompt,并且进行调试
在第三步的时候,我们已经为 LLM 节点配置好了 Google 的 Token,接下来我们需要把 Prompt 配置节点到里面去。
notion image
首先我们需要设置 Prompt 的来源,这里面有两个选项:
  • Take From previous node automatically(从上游自动获取):它将自动将上游的 Chat Trigger(聊天触发器)中的最新一条消息作为 Prompt 发送给大模型。这个选项有一定迷惑性,如果你的 Prompt 是在上游节点中生成的动态 Prompt,但它并不来自一个 Chat Trigger,那你应该选 Define below。
  • Define below(在下方定义):当节点在这个选项下时,它会在参数页面额外增加一个 Text 参数,这里可以直接填写你所需要的 Prompt。
在我们的场景里面,需求是把 3 个已知问题的定义写清楚,作为提示词的一部分,然后每次只给 AI 提供一个工单的内容,询问 AI 是否判定这个工单命中已知的 3 个问题,循环多次直到所有需要处理的工单都被处理完了。
所以大模型接收的内容样例可能是下面这个样子的:
拆解下来,我们希望大模型能够接收的其实是一个固定的提示词模板,其中有一些变量(数据来源是上游节点)在循环的过程中替换。
所以我们应该选择 Define Below 这个选项。
当我们把 Prompt 参数设置为 Define below 时,下方就会出现一个 Text 的文本框,这个文本框可以填写提示词。
我们就可以把上面的提示词写进去,但是这个时候就会有一个问题,我们要如何才能把变量也写入文本框内呢?
notion image
notion image
Text 的这个文本框是支持填写变量的,你只需用鼠标要把变量拖拽到文本框内即可,并且文本框的最下方会显示一个 Result,预览一个效果,帮助你判断自己填写的内容是否正确。
这个时候我们就完成提示词的配置,接下来可以点击 Test Step 来实现这一个步骤的测试。
notion image
点击测试之后,就会显示大模型给出的结果,这个时候可以切换到 Logs 查看入参和出参是否符合自己的诉求,如果不符合就需要调整 Prompt。
上面这个章节非常简要的介绍了关于 LLM 节点的应用,关于更多的 LLM 节点的详细介绍,请参考文档:
🌟
AI节点详细介绍

第五步、将打标结果输出到最初的 Sheets 之中

现在我们获得了已经大模型打标的结果,下一步就应该讲这些结果回填到 Sheets 之中。
所以我们需要在大模型节点的下一个步骤新增一个 Google Sheets 的节点。和上一个节点有所不同,上个节点我们的需求是读取这个 Sheets 页的全部数据,这次我们需要更新数据,给每一行数据附上大模型打标的结果。
notion image
所以我们需要根据自己的需求选择 Append or update row in sheet 的选项。由于 Token 之前已经配置过了,所以这次这个节点不需要再额外配置 Token。
选择这个节点界面如下图所示:
notion image
将大模型的结果填充到表格内,首先需要一列数据,比如工单编号作为唯一的关联标识,不然程序就不知道该将哪个值填充到哪里去。
这个时候就会发现大模型输出的时候只输出了问题分类,没有输出编号,但是这个时候不需要调整 Prompt,因为 n8n 自带了隐式参数传递。
notion image
在选择入参区域的变量时,不仅仅可以选择上一个节点的变量,也可以选择上上个,上上上个等所有前序节点的变量。这些复数个数据之间经过多个程序处理传递,但是 n8n 会在系统内部自动把他们关联起来,确保他们内部是唯一关联的,所以你不需要担心数据会不会“串错”。这就是 n8n 内部很重要的隐式传递的设计思路。
所以我们可以选择 Key A 作为关联的变量,同时把上上个节点读取到的 Key_A 的值填充进去,选中作为关联键的变量会有一个 useing to match 的标识。
notion image
notion image
然后把大模型的结果填充到 Key_B 之中去,这样程序就会把 Key_B 的值替换成大模型输出的 Text 信息。
点击 Test Step,程序开始之行,Key B 的数据已经被得到了替换。
notion image
打开 Google Sheets,也会发现已经被替换了。
替换前
替换前
替换后
替换后

实践之后,再体会 n8n 的设计思路

经过上面的实践,n8n 的基本能力已经被展示出来了,通过这个简单的 Case 我们就可以体会到 n8n 的一些设计思路,他们分别是:
  • 循环:n8n 非常重视循环,如果从 Excel 里面读取数据,那么接下来的整个流程会自带一个循环操作,非常便于批量处理,帮助打工人节省时间,并且每个步骤批量处理了多少个 items,会在界面上外显出来;
  • 参数的隐式传递:n8n 为了解决单个 item 在处理过程过于复杂,到最后输出时需要返回第一步去匹配标识位的问题,自动关联了每一个 item 在每一个步骤的所有变量,确保他们不会串错,极大降低了使用成本;
  • 单步调试:n8n 的每个节点都支持单步调试,可以极大程度的降低低代码配置门槛,每配置完一个节点都可以选择执行一下,不需要全部配置完再之行,这样可以发现每个步骤可能会出现的错误,便于调试和开发;
在这里我想强调一下循环的重要性,作为普通打工人,我们希望借助大模型 or 计算机解决的大部分都是重复劳动,n8n 高度集成了循环相关的功能模块,对于打工仔来说意义重大。
notion image
广告
制作你的第一个 n8n学习低代码的正确思路
Loading...
目录