FlowGram Runtime 介绍
⚠️ 目前为早期开发阶段
- API 接口可能会有变更,不保证向后兼容
- 目前只支持 nodejs 运行时,且只支持自由布局
本文档将介绍 FlowGram Runtime 的基本概念、设计理念和核心功能,帮助业务接入方开发者了解和使用这个工作流运行时引擎的参考实现。
什么是 FlowGram Runtime
FlowGram Runtime 是一个工作流运行时引擎的参考实现,旨在为业务接入方开发者提供运行时参考。能够解析和执行基于图结构的工作流,支持多种节点类型,包括 Start、End、LLM、Condition、Loop 等。
项目定位与目标
FlowGram Runtime 定位为 demo 而非 SDK,主要目标是:
- 提供工作流运行时的设计和实现参考
- 展示如何构建和扩展工作流引擎
- 为开发者提供可以直接学习和修改的代码基础
- 支持快速原型开发和概念验证
作为参考实现,FlowGram Runtime 不会作为包发布,开发者需要 fork 代码库后,根据自己的业务场景和需求进行修改和扩展。
核心概念
工作流 (Workflow)
工作流是由节点和边组成的有向图,描述了一系列任务的执行顺序和逻辑关系。在 FlowGram Runtime 中,工作流使用 JSON 格式定义,包含节点和边两部分。
工作流定义示例:
{
"nodes": [
{ "id": "start", "type": "Start", "meta": {}, "data": {} },
{ "id": "llm", "type": "LLM", "meta": {}, "data": { "systemPrompt": "你是助手", "userPrompt": "{{start.input}}" } },
{ "id": "end", "type": "End", "meta": {}, "data": {} }
],
"edges": [
{ "sourceNodeID": "start", "targetNodeID": "llm" },
{ "sourceNodeID": "llm", "targetNodeID": "end" }
]
}
节点 (Node)
节点是工作流中的基本执行单元,每个节点代表一个特定的操作或任务。FlowGram Runtime 支持多种节点类型,包括:
- Start 节点:工作流的起点,提供工作流输入
- End 节点:工作流的终点,收集工作流输出
- LLM 节点:调用大型语言模型,支持系统提示词和用户提示词
- Condition 节点:根据条件选择不同执行分支,支持多种比较操作符
- Loop 节点:对数组中的每个元素执行相同操作,支持子工作流
每个节点包含 ID、类型、元数据和数据等信息,不同类型的节点具有不同的配置选项和行为。
边 (Edge)
边定义了节点之间的连接关系,表示数据和控制流的传递方向。每条边包含源节点、目标节点和可选的源端口信息。
边的定义决定了工作流的执行路径和数据流向,是构建复杂工作流逻辑的基础。
执行引擎 (Engine)
执行引擎负责解析工作流定义,按照定义的逻辑顺序执行各个节点,并处理节点间的数据流转。是 FlowGram Runtime 的核心组件,管理整个工作流的生命周期。
技术架构
FlowGram Runtime 采用领域驱动设计(DDD)架构,将系统分为多个领域:
- 文档 (Document):工作流定义的数据结构,包括节点和边的模型
- 引擎 (Engine):工作流执行的核心逻辑,负责工作流的解析和调度
- 执行器 (Executor):负责执行各类节点的具体逻辑,如 LLM 调用、条件判断等
- 状态 (State):维护工作流执行过程中的状态信息,包括执行历史和当前状态
- 变量 (Variable):管理工作流执行过程中的变量数据,支持变量的存储和访问