在完成 DSL 的生成和解析之后,真正困难的才刚刚开始。DSL 只是描述了“流程长什么样子”,但一个工作流引擎的真正价值,不在于能不能把流程画出来,而在于:这个流程如何被一步一步、安全可控地执行。
工作流在执行过程中,往往伴随着输入参数的初始化、上下文的传递、状态的流转、异常的处理、以及执行结果的回传等。我画了一张图,可以清晰地概括出工作流的执行机制。
首先,执行引擎要将复杂的流程拆解为可独立执行的最小单元。每一个节点都应该是一个完整、自治的执行单元,节点之间不直接相互调用。这种设计可以避免流程复杂后出现强耦合的问题。
其次,提供统一且透明的数据传递能力。节点之间的数据依赖通过 VariablePool 进行管理,节点只关心“我需要哪些输入数据”和“我输出了什么数据”,而不关心这些数据来自哪个节点、在什么顺序下产生。
第三,节点的执行状态可管理。在执行过程中,每个节点都会经历初始化、执行中、执行完成等多个状态,这些状态不仅用于流程推进,也用于异常处理、中断执行等。
最后,也是最重要的一点,为未来的节点扩展预留足够的扩展空间。无论是新增 LLM 节点、插件节点,还是引入更复杂的控制节点(如条件分支、并行节点),都不应该影响现有的执行逻辑。因此,节点执行机制必须以接口和抽象类为核心,确保新节点只关注自身业务实现,而无需侵入执行引擎本身。
从整体上看,节点执行机制的组件架构可以分为四层。
最上层是 WorkflowDSL,它负责描述“流程是什么样的”,不关心“流程如何执行”。DSL 只定义节点、连线和输入输出规则,本身不参与任何执行逻辑。
中间层是 WorkflowEng...
热门评论
43 条评论
回复