微信扫码
与创始人交个朋友
我要投稿
过去几周,我一直在思考如何用自然语言来编写Agent工作流。起初我的思路是通过LLM从自然语言中提炼出可用于表达Workflow的DSL,再由DSL来驱动流程引擎。但是在实现过程中,我发现流程引擎的能力与DSL的匹配度其实很难把握,其中的根源在于DSL本身的设计,往往具有局限性。在使用了ComfyUI的工作流之后,我有了新想法,这篇文章就来聊一聊。
什么是ComfyUI?
在AIGC领域,除了LLM,我想你应该都了解文生图这个领域,而该领域的开源模型Stable Diffusion则占据了大半江山。由于开源社区的强大,SD的生态非常丰富。作为其官方公司Stability仅仅发布了底座模型,甚至都没有UI,而社区目前最主流的两大UI(WebUI和ComfyUI)都非官方作品,却派生了更大的社区空间。(最近新的UI工具forge也涌现出来,开源真的促进发展。)
WebUI以配置为操作模式,用户通过选、填来完成模型操作。而ComfyUI则是以工作流为操作模式,用户需要通过配置出一个个的pipeline,通过不同节点和连线来完成模型操作和内容生成。两者各有优势,但在灵活性和深度上,ComfyUI更胜一筹。如果WebUI是一次冒险旅行,那么ComfyUI则是一场拉力赛,前者短时间浅尝辄止,后者有些累人但柳暗花明。如果你还没有用过,建议你现在就去尝试一下。关注本公众号 wwwtangshuangnet 点击下方赞赏“喜欢作者”后在公众号聊天窗口回复 comfyui 即可获得在线免费体验 comfyui 机会,是真的可以生成图片那种哦?。
Workflow本身就是模型
ComfyUI最吸引人的地方在于它的工作流是可以被分享的,在社区openart.ai上,民间高手们分享着自己的工作流,其他小伙伴可以下载这个工作流,并导入到自己的comfyui中去,再替换自己的prompt,就能用相同的参数,生成该工作流预设的效果的图片。
注意,我这里说的是,用相同的参数。
这不就是模型吗?在comfyui的每一个节点中,我们需要配置好节点参数,在运行工作流时,这些参数就会生效。以一个workflow作为蓝本,对它节点上的参数做细微的调整,就能在原来的图片效果基础上做细微变化,这不就是微调吗?目前,在comfyui的生态中已经有近百的插件,也就意味着我们可以构建出非常庞大的workflow,而通过微调workflow,以达到自己最满意的效果之后,在后续的全部工作中,我们就可以再次使用这个workflow,只需要传入不同的初始prompt即可。
你看,这样的工作模式,不就是模型的工作模式吗?而comfyui的workflow导出后,仅仅是一个json文件。
移植可能性?
基于这种理念,我发现在Agent的工作流搭建中,直接照抄,是完全可以的。在Stable Diffusion的模型操作中,comfyui插件甚至可以调用第三方模型,只要确保节点的输入输出符合workflow中的要求即可。
同样的道理,Agent工作流不也是这样吗?只要确保我们的节点有符合要求的输入输出即可。于是,我有了移植ComfyUI到Agent工作流创建中的想法。如果可以在现有的ComfyUI的基础上,加入Agent的工作流搭建能力,不仅可以解决Agent工作流编程问题,还能直接将LLM和生图模型结合在一起,甚至在Stable Diffusion生成视频的能力,构建完全自动化的营销短视频生成、发布流程,也不是不可能。于是我开始研究ComfyUI的源码。
然而,结果有点小失望,ComfyUI和Stable Diffusion的绑定比较深,虽然我们可以用它来实现上述的设计,但是当我去尝试封装它的代码时,发现似乎没有什么工作可以做,除非全部重写一遍,把它重构为一个与SD解耦的纯AI模型工作流,但如果是这样的话,可能要做的工作比较多,最终可能就做出一个类似coze一样的平台,成本有点大,感觉没必要。而ComfyUI之所以如此流行,还和它的性能有关,或者说它的python部分真的很少,以至于整个仓库没多少代码,运行起来当然是有不错的性能表现。
工作流技术揭秘
Workflow本质上是流程引擎的应用,只不过世界上的流程引擎各有各的怨念,家家有本难念的经,看上去所有的流程都差不太多,但是细细一看,又哪哪都不同。
我们从使用的角度,往往会从图出发来设计worflow。这也是为什么comfyui能流行起来的原因,因为它封闭了流程执行的内部细节,用看得见的流程图来作为直观的操作入口。和bpmn这样的业务流程图设计差别巨大,以组织软件运行为目标的流程图往往会以“节点”作为容器来运行某个软件或程序,并以“边”来表达节点之间的数据流向。
节点和边各自有多种类型,不同的类型所表达的执行方式不同。
通常,节点有输入和输出,根据不同的类型,输入输出的数量又不同。除了输入输出,节点还需要配置属性(或者叫参数)。节点本身意味着它内部会调用某个软件或程序,把输入和参数同时传给这个程序,等待程序返回结果,将这个结果按照规则解析后,作为输出给到下一个节点。
边有方向,负责把节点串联起来。
由节点和边构成的网络我们称为图(Graph),很多流程设计都遵循这种模式,例如米家智能家居的配置、nodered的设计、xstate状态图,前几天介绍的langgraph本质上也是参考状态图。图的形状可以有非常多的变化,而不同的变化所带来的效果完全不同。
我们可以把图作为Workflow的某种可视化的DSL,它以图形语言的方式表达了一个工作流是怎么运作的。我们执行一个流程图,本质上就是以流程图作为DSL来驱动流程引擎工作执行。
结语
本文介绍了ComfyUI,并希望借鉴ComfyUI设计基于相同的图(Graph)来实现Agent工作流的想法。在界面交互上,ComfyUI依赖的是一款名为litegraph.js的流程图脚本库,要实现流程图的创建的交互本身并不复杂。现在的问题是,如何在后端有效的管理、注册、调度、执行Agents,这或许是我接下来要研究的。
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-05-14
2024-04-26
2024-03-30
2024-04-12
2024-05-10
2024-07-18
2024-05-22
2024-05-28
2024-04-25
2024-04-26
2024-11-14
2024-11-13
2024-11-13
2024-11-13
2024-11-12
2024-11-11
2024-11-08
2024-11-07