把复杂流程,变成可复用、可追踪、可重跑的确定性执行。
FlowForge 面向企业系统与 AI 应用:用可视化画布编排 HTTP 服务、智能体和后台任务,组合串行、并行与异步等待;用 PostgreSQL 保存队列、租约、步骤输出和定义快照。业务逻辑留在服务里,执行语义交给引擎。
快速体验 · 本地开发 · 工厂 ERP 示例 · 异步接入 · API · 英文版
一条真实的八步骤链路:库存、质检、产能并行分析,采购与产能异步上报,汇合排产并回写 ERP 工单。画布上直接标注依赖关系、同步/异步模式与运行状态。
- 执行语义可验证:定义保存即生成版本快照;运行中的实例按快照执行,可原样重跑。
- 异步有始有终:2xx 只代表接收,每次尝试有独立回调令牌、租约和超时;完成上报才推进依赖。
- 失败是设计的一部分:指数退避、失败传播、时间窗口和并发上限由引擎统一处理,不散落在业务代码里。
- 业务边界清晰:输入输出都是 JSON;引擎不判断订单、案件或客户字段,领域事务留在服务内部。
同一套控制台在工厂 ERP 场景中的真实截图:深色画布、分组检查器、实时状态与执行历史。
八个步骤同时覆盖同步、异步、串行、并行、失败重试和结果汇合。演示服务返回确定性数据,不需要模型密钥或真实 ERP 账号。
flowchart LR
order[接收 ERP 订单 · 同步] --> inventory[库存分析 · 同步]
order --> quality[质检规则 · 同步]
order --> capacity[产能评估 · 异步]
inventory --> procurement[采购建议 · 异步]
inventory --> plan[汇合生成排产单 · 同步]
quality --> plan
capacity --> plan
procurement --> plan
plan --> erp[回写 ERP 工单 · 同步]
erp --> notify[通知生产主管 · 异步]
异步任务返回 202 后,工作流保留等待状态;开发者在业务内部执行完成后调用统一上报方法,依赖它的步骤才会继续。
默认示例让库存服务第一次返回 503,随后自动重试成功。将输入中的 scenario.notification_failure 改成 true,可以观察非关键通知失败而主流程仍成功;将 scenario.quality_reject 改成 true,可以观察关键步骤失败后停止流程。
需要 Docker Desktop / Docker Compose。Node 22+ 用于跨平台配置脚本;Windows 也可以直接运行 PowerShell 脚本。
# 生成本地随机凭据,不覆盖已有配置
node scripts/init-env.mjs
# 启动平台、PostgreSQL 和本地演示智能体
docker compose -f compose.yaml -f compose.demo.yaml --profile app up --build -d --waitWindows 一条命令:
.\scripts\demo.ps1打开 **http://localhost:8088**,使用本地 .env 中的 FLOWFORGE_API_TOKEN 登录。选择 工厂 ERP · 订单到排产,点击“运行”。输入框已填好订单数据,约十几秒后可查看排产、采购建议和 ERP 工单结果。
node scripts/init-env.mjs
docker compose --profile app up --build -d --wait标准部署不启动演示智能体。修改环境变量和出站访问策略后,可接入实际业务服务。停止演示用:
docker compose -f compose.yaml -f compose.demo.yaml --profile app down此命令保留 PostgreSQL 数据卷。配置详情见 部署指南。
改前端时不要走“构建后由 Go 托管”的预览模式,直接使用 Vite 开发服务器:
.\scripts\dev.ps1 -Hmr这条命令会:
- 启动 PostgreSQL(Docker);
- 在新窗口启动 Go API,监听
8088,输出后端日志; - 在当前窗口启动 Vite,监听
5178,支持热更新; - 自动把
/api和/healthz代理到8088。
打开 **http://127.0.0.1:5178**,使用 .env 中的 FLOWFORGE_API_TOKEN 登录。修改 web/src 中的任意文件会立即热更新。
也可以分成两个终端,分别看日志:
# 终端 1:PostgreSQL + Go API
.\scripts\dev-api.ps1
# 终端 2:Vite 控制台
.\scripts\dev-web.ps1.\scripts\dev.ps1(不加 -Hmr)会先执行 npm ci 和 npm run build,再由 Go 直接托管 web/dist,适合接近生产的本地验收;日常改前端请使用上面的 HMR 模式。
其他系统可参考 部署指南的“原生开发”。原生联调 ERP 示例时,额外启动 go run ./examples/erp/worker,设置 FLOWFORGE_DEMO_AGENT_URL=http://127.0.0.1:8090 并放行回环地址;新数据库会按该地址生成示例,已有数据库可在流程设置中把请求地址改为本地智能体。详细步骤见 工厂 ERP 示例。
| 能力 | 配置与行为 |
|---|---|
| 依赖编排 | depends_on 构建 DAG,相互无依赖的步骤可并行;拒绝循环依赖 |
| 执行模式 | 每个步骤包含 execution_mode;HTTP 可选 sync 或 async |
| 同步 HTTP | 等待 2xx 响应,将结果保存为 output.status_code 与 output.body |
| 异步 HTTP | 2xx 只表示接收,业务内部通过 SDK / HTTP 上报成功或失败 |
| 数据映射 | transform 保留 JSON 类型,引用输入和前置步骤的输出 |
| 持久化延时 | delay 不占 Worker,到期由引擎自动完成 |
| 重试 | 总尝试次数、指数退避和退避上限,等待信息保存在数据库 |
| 失败策略 | 停止流程、允许继续或阻断依赖分支;可独立配置是否影响最终结果 |
| 汇合与条件 | all_success、all_done、any_success;支持 eq、ne、exists |
| 触发方式 | 手动、API、鉴权 Webhook、带时区 Cron、单次计划执行与历史重跑 |
| 时间窗口 | 指定时区和星期,支持跨午夜;限制新步骤启动 |
| 并发控制 | 进程 Worker 数、实例内并行数、跨进程共享的活动实例上限 |
| 可追踪执行 | 定义版本快照、步骤输出、事件时间线、取消与原快照重跑 |
| 故障恢复 | 数据库事务、SKIP LOCKED、租约续期、过期接管与写回隔离 |
队列使用 PostgreSQL。Redis 有可选部署入口,当前不参与调度。执行语义为至少一次,外部服务应根据幂等键去重;详见 架构与执行语义。
{
"id": "order-pipeline", "name": "订单处理", "enabled": true,
"steps": [
{
"id": "inventory", "type": "http", "execution_mode": "sync",
"config": { "url": "https://services.example.com/inventory", "body": "{{input}}" }
},
{
"id": "planning", "type": "http", "execution_mode": "async",
"depends_on": ["inventory"], "timeout_seconds": 300,
"config": { "url": "https://services.example.com/planning", "body": "{{steps.inventory.output.body}}" }
}
]
}异步服务接收请求时提取上下文,将上报器交给内部业务函数:
task, err := worker.FromRequest(r, worker.WithAllowedOrigin(platformOrigin))
if err != nil { return err }
// 将任务交给自己的后台队列,再返回 202。
// 在业务函数完成事务、保存结果后调用:
err = task.Reporter.Succeed(ctx, result)
// 业务失败时:task.Reporter.Fail(ctx, businessError)统一 HTTP 接口为 POST /api/v1/callbacks/{token},支持 succeeded、failed,每次尝试有独立限时令牌。完整 SDK 用法、后台队列接入和幂等规则见 异步开发指南。
| 路径 | 职责 |
|---|---|
cmd/flowforge |
进程入口、配置加载、迁移与演示数据 |
internal/engine |
DAG 调度、HTTP/转换/延时处理器、租约与重试 |
internal/store |
PostgreSQL 队列、定义快照、事件与迁移 |
internal/httpapi |
REST API、鉴权、静态控制台与 OpenAPI |
pkg/worker |
异步任务上报 SDK |
web |
React 19 + TailwindCSS 4 + 定制组件层 |
examples/erp |
八步骤 ERP 演示与确定性智能体 |
scripts |
初始化、开发、演示、验证与发布工具 |
- 工厂 ERP 演示:数据、步骤关系、故障场景与真实服务替换。
- 工作流配置:步骤、模板、模式、依赖和失败传播。
- 异步开发指南:统一上报 SDK、HTTP 协议与内部调用方式。
- 部署与配置:环境变量、网络策略、数据库及本地开发。
- 架构与执行语义:队列、租约、恢复和实现边界。
- 开发与测试:测试命令及覆盖范围。
- 发布与提交范围:文件白名单、大小限制、敏感配置检查及源码打包。
- OpenAPI:流程、触发、实例和上报接口。
Go 1.25、React 19、TypeScript、TailwindCSS 4、Vite、PostgreSQL 17 和 Docker Compose。
当前面向单个可信工作空间独立部署。暂不包含租户隔离、用户/RBAC、SSO、计费、任意脚本、循环和动态子流程;同批同步请求完成后才推进下一批。HTTP 请求/结果使用 JSON,单次请求体和响应上限 1 MiB,大文件应传存储地址。
欢迎通过 Issue 和 Pull Request 参与,参见 贡献指南 与 安全说明。项目采用 MIT License。




