世界需要更多的我行我上,这就是 OGraph 的由来

在正式介绍 OGraph 之前,我还是想先侃几句,聊聊我为什么要写 OGraph 这个项目。

在很长一段时间里,我都处在这么一个状态,很想做点什么,但又完全不知道该干嘛。

随着年近 30,我慢慢有了一个答案。保持热爱,保持不满,保持改变。好过愤世嫉俗,止步不前。

OGraph 就来自于我对另一个项目 alibaba/pairec 的小小不满,这是阿里的一个开源的推荐服务引擎,预置了非常多的推荐链路组件。

在我参与组件开发和二次开发的过程中,总有一些痒点。比如组件只能在固定的阶段执行,不能灵活指定执行顺序。以及没有 aop 机制提供统一的日志、重试、超时控制功能等。

废话说的差不多了,下面进入正题,OGraph 是个啥。

任务流编排

简单来说,OGraph 是一个任务流编排框架,基于 DAG,也就是有向无环图。任务编排其实是生活中一个非常常见的需求,一旦有很多事情要做,并且希望尽快做完,那就要安排哪些事先做,哪些事情后面做,哪些事情同时做。

任务流编排框架的功能就是,你告诉它有哪些任务,这些任务之间依赖关系是什么,然后它就可以帮你尽快完成这些任务。

一个比较直观的例子是 ComfyUI,这是用于 AI 图片生成的一个非常强大的图形框架。与 stable-diffusion-webui 不同的是,它采用了图和节点节点的组织方式,这是是它比后者更灵活更快的关键。

下面是 ComfyUI 的一个屏幕截图,可以看到节点之间相互连接成图,组成了一个任务流。先加载模型,然后可以同时输入正反提示词,再然后是采样、解码、保存图片。

世界需要更多的我行我上,这就是 OGraph 的由来

OGraph 能做什么

除了基本的任务编排和执行功能,OGraph 支持用 Wrapper 做节点功能增强,同时内置了很多 Wrapper 实现循环执行,按条件执行,错误重试,超时控制等功能

支持用 Cluster 自定义多个节点运行方式,也内置了一些实现,比如最常见顺序执行和并行执行。

还内置了通用的 Node 实现,比如 Cmd Node,用于执行命令行。

支持用虚节点实现运行时多态,也就是延迟到运行时,决定实际运行什么节点。

支持任务流中断执行和恢复执行。

支持多个任务流组合成一个任务流执行。

支持导入和导出图定义,以及用 graphviz 渲染图结构。

OGraph 不能做什么

OGraph 只是一个库,可以作为类似 ComfyUI 这样项目的的底层组件,但是其本身没有什么可视化功能,也不包含特定领域的业务组件。

项目地址:github.com/symphony09/ograph 求 star~

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!