世界需要更多的我行我上,这就是 OGraph 的由来
在正式介绍 OGraph 之前,我还是想先侃几句,聊聊我为什么要写 OGraph 这个项目。
在很长一段时间里,我都处在这么一个状态,很想做点什么,但又完全不知道该干嘛。
随着年近 30,我慢慢有了一个答案。保持热爱,保持不满,保持改变。好过愤世嫉俗,止步不前。
OGraph 就来自于我对另一个项目 alibaba/pairec 的小小不满,这是阿里的一个开源的推荐服务引擎,预置了非常多的推荐链路组件。
在我参与组件开发和二次开发的过程中,总有一些痒点。比如组件只能在固定的阶段执行,不能灵活指定执行顺序。以及没有 aop 机制提供统一的日志、重试、超时控制功能等。
废话说的差不多了,下面进入正题,OGraph 是个啥。
任务流编排
简单来说,OGraph 是一个任务流编排框架,基于 DAG,也就是有向无环图。任务编排其实是生活中一个非常常见的需求,一旦有很多事情要做,并且希望尽快做完,那就要安排哪些事先做,哪些事情后面做,哪些事情同时做。
任务流编排框架的功能就是,你告诉它有哪些任务,这些任务之间依赖关系是什么,然后它就可以帮你尽快完成这些任务。
一个比较直观的例子是 ComfyUI,这是用于 AI 图片生成的一个非常强大的图形框架。与 stable-diffusion-webui 不同的是,它采用了图和节点节点的组织方式,这是是它比后者更灵活更快的关键。
下面是 ComfyUI 的一个屏幕截图,可以看到节点之间相互连接成图,组成了一个任务流。先加载模型,然后可以同时输入正反提示词,再然后是采样、解码、保存图片。
OGraph 能做什么
除了基本的任务编排和执行功能,OGraph 支持用 Wrapper 做节点功能增强,同时内置了很多 Wrapper 实现循环执行,按条件执行,错误重试,超时控制等功能
支持用 Cluster 自定义多个节点运行方式,也内置了一些实现,比如最常见顺序执行和并行执行。
还内置了通用的 Node 实现,比如 Cmd Node,用于执行命令行。
支持用虚节点实现运行时多态,也就是延迟到运行时,决定实际运行什么节点。
支持任务流中断执行和恢复执行。
支持多个任务流组合成一个任务流执行。
支持导入和导出图定义,以及用 graphviz 渲染图结构。
OGraph 不能做什么
OGraph 只是一个库,可以作为类似 ComfyUI 这样项目的的底层组件,但是其本身没有什么可视化功能,也不包含特定领域的业务组件。
附
项目地址:github.com/symphony09/ograph 求 star~
本作品采用《CC 协议》,转载必须注明作者和本文链接