n8n是一个工作流平台,因为深度支持对LLM的调用,可以用来快速构建基于LLM调用的逻辑,比如接收图片,调用LLM识别对应产品的品牌,生成推广文章并入库,最后推送邮箱。
但是,现实的需求是要多次调用LLM来构建完整的结果,而且有时候要求过程中用户能够介入,支持用户调整每一次LLM的输出结果,直到完成最终的构建。这种交互性的特点,似乎对工作流而言很有难度。
比如
我要模拟面试。首先设定一个主题,第一次调用LLM生成一份问答习题,返回来给我填写,我填写完成后提交,调用LLM评分,然后返回新的问卷继续作答。达到轮次之后,最后一次调用LLM返回评价与结果。
这个似乎不太容易用工作流实现。
前置知识
简单介绍一下n8n与我对工作流的思考(可以跳过)。文档:docs.n8n.io/
n8n作为一个工作流平台,方便模块化的流程管理,衔接了各端出口——数据库、google sheet、邮件、社群等等,还可以十分便捷地与LLM通讯,所以n8n成为了开源的工作流设计的首选。
入口,也就是工作流启动的触发器,支持定时触发、事件触发、表单提交触发、微信消息触发、网络请求触发。
n8n的特点就是模块化,可以搭积木式构建一次逻辑处理——不管是请求调用还是数据保存。
在逻辑处理中,可以控制分支、多数据容器、数据转化等等。核心就是将一批相同的行为封装为基础模块来支持复用,实现像拼乐高一样构建逻辑。
子工作流。支持将固定的工作流封装形成子工作流,然后在另外一个工作流中调用。实现乐高拼接为单位,然后再组合其他流程。
AI支持。AI基本沿用了langChain的思想,就是以LLM调用为核心来构建程序。
出口就比较简单,只是对接了各端,传输数据过去。比如传到email、google sheet、file等等。
是否需要工作流
为什么需要工作流?
实操一遍n8n工作流之后,发现工作流能做的东西,其实手动编码也可以很快实现。比如构造页面收集表单并通过LLM调用后响应回界面,这个过程用代码写起来也很快,定制化程度更高,而且相比使用工作流,速度还更快了。
所以有必要使用工作流吗?有。因为工作流可以提效,将逻辑封装为基本的组件,以拼乐高的方式使用,以工作流的概念将重复操作归纳整理。只要能够提效,就有存在的意义。
证明了存在有必要性之后,需要分割得到在某一个参考系下的特性 比如在用户使用这个层面,使用工作流与硬编码存在什么样的高低特点。
目前来说,硬编码更加强大但是具有门槛,而工作流搭建则比较容易使用,利用有限的积木可以组合形成完整的服务。因为LLM的兴起与n8n对LLM调用的良好支持,可以十分快捷地搭建企业内部或者个人的服务,用于服务验证与设计。(工作流搭积木可以很方便让产品经理得到心中原型的demo,解决需求在心中而不在口中的局面)
所以,易用性 + LLM深度支持 可以让工作流快速实现AI应用的Demo。
可多阶段交互的工作流
首先看到触发器中,有通过表单提交触发的组件:
可以设置表单组件,用户通过n8n的特定url进入这个表单,填写内容并提交来触发工作流。但是此时只有两个结果:要么表单异步提交,要么表单同步提交直到工作流结束。两种结果都没有办法接收到工作流的某一个过程中的反馈。
但是,存在另外一个触发器:on webhook call , 网络请求到达时,触发工作流。如果以网络请求为入口,启动工作流,然后响应html,就可以在界面上显示了。并且,在响应的html中,还可以通过按钮触发请求发送,重新回到工作流中。
过程
搭建工作流A:(on webhook call A)入口收到web请求 --> 请求body整理 --> LLM调用 --> 调用结果拼接或者动态生成 html --> html响应web请求搭建工作流B:(on webhook call B)入口收到工作A的html中发送的请求 --> 请求body整理 --> LLM调用 --> 调用结果拼接或者动态生成 html --> html响应web请求
- 首先写一个简单的html,构造一个表单接收用户原始需求eg:
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>需求内容</title></head><body> <h1>请输入</h1> <form action="https://n8n-webhook(xxx->A)" method="POST"> <label for="title">初始内容</label> <input type="text" id="title" name="title" required><br><br> <button type="submit">提交</button> </form></body></html>
用户用浏览器打开这个页面,填写并提交表单,触发工作流A工作流A得到结果后,按照规则构建html,响应客户。客户在页面收到一个新的表单B(里面包含了LLM的结果,并且有多余的入框可以填写新内容)客户填写表单B并提交,触发工作流B,执行新的LLM调用,又响应新的表单与内容。循环直到流程结束。多段构建得到了最终的结果。这样就可以完成多阶段交互的工作流,借助浏览器与网络请求,不断更新数据状态与触发工作流,得到最终对结果。以上只是MVP版本的demo,用于展示。
实际使用时,需要可以在入口设置多分支的逻辑,控制需求识别与prompt调整;通过动态html模板生成复杂的页面——甚至让LLM动态生成html模板完成动态表单;通过工作流逻辑循环来减少工作流数量等等。完成多阶段交互式工作流。
总结
工作流目前作为提效工具,可以快速构建LLM服务。利用webhook触发器结合html组件可以构建交互式的工作流,多阶段调用LLM。
但是,目前n8n搭建的工作流只适合企业内部调用或者个人小需求,to C方面,性能估计满足不了要求。需要使用hack的方式或者多种专业方式来提高n8n的性能。安全性方面也需要评估。
不过,足够用来帮助产品经理快速验证需求合理性了。