工作流自动化
工作流是 Monstrum 的可视化自动化引擎。你可以用拖拽式编辑器构建 DAG(有向无环图)流程,将多个步骤串联成自动化管道。
概述
工作流解决的问题:很多任务不是一句指令就能完成的,而是需要多个步骤按顺序、按条件执行。例如:
- 收到 Issue → 分析内容 → 分配给合适的 Bot → 通知相关人员
- 定时检查服务器状态 → 异常则创建告警 → 等待人工审批 → 执行修复操作
- 并行调用多个 API → 汇总结果 → LLM 总结 → 发送报告
工作流将这些步骤编排为可视化的 DAG,支持条件分支、并行执行、人工审批、循环遍历等控制流。
创建工作流
方式一:从 Bot 详情页创建
- 进入 Bot 详情页 → 工作流 Tab
- 点击 新建工作流
- 填写名称和描述
- 进入可视化编辑器
方式二:从工作流列表创建
- 在 Bot 管理页面中可以看到各 Bot 关联的工作流
- 或直接访问工作流编辑器 URL
工作流状态
| 状态 | 说明 |
|---|---|
| 草稿 | 新建状态,可编辑,不可执行 |
| 已激活 | 可执行,仍可编辑(保存后生效) |
| 已禁用 | 暂停执行,保留定义 |
可视化编辑器
工作流编辑器是一个拖拽式的 DAG 编辑器。
界面布局
- 左侧面板:节点面板,列出所有可用的步骤类型
- 中央画布:拖拽节点、连线,构建流程
- 右侧面板:选中节点后显示配置面板
- 顶部工具栏:保存、激活/禁用、执行、撤销/重做、设置、历史、触发器、导出
基本操作
- 添加节点:从左侧面板拖拽节点到画布
- 连线:从节点的输出端口拖拽到另一个节点的输入端口
- 配置:点击节点,在右侧面板中配置参数
- 删除:选中节点或连线后按 Delete 键
- 撤销/重做:Ctrl+Z / Ctrl+Y
验证
编辑器会自动验证工作流的合法性:
- 必须有且仅有一个开始节点
- 必须有至少一个结束节点
- 不能存在环(循环连线)
- 资源调用节点必须选择资源
- 条件节点必须填写表达式
- 审批节点必须填写审批说明
- LLM 调用节点必须填写提示词
步骤类型
开始(START)
工作流的入口节点。每个工作流必须有且仅有一个开始节点。
结束(END)
工作流的出口节点。可以有多个结束节点(不同分支汇聚到不同的结束点)。
资源调用(RESOURCE_CALL)
调用资源上的工具,或将任务委派给 Bot。
配置项:
| 字段 | 说明 |
|---|---|
| 步骤名称 | 工作流内唯一标识 |
| 资源 | 选择资源或 Bot |
| 工具 | 选择要执行的工具 |
| 工具参数 | JSON 格式的参数,支持变量引用 |
| 超时时间 | 步骤超时(秒) |
| 最大重试次数 | 失败时重试次数 |
条件判断(CONDITION)
基于表达式结果决定执行哪个分支。支持两种模式:
满足/不满足(Boolean):
- 配置一个条件表达式
- 表达式为真 → 走”是”分支
- 表达式为假 → 走”否”分支
多路分支(Switch):
- 配置一个分支判断值和多个分支标签
- 根据判断值匹配分支标签,走对应分支
条件表达式 支持引用上游步骤的输出变量:
${check_status.output.status} == "critical"
${analyze.output.score} > 80
${fetch_data.output.count} > 0
条件表达式使用安全求值引擎,不支持任意代码执行。
并行执行(PARALLEL)
同时执行多个分支。
- 默认 Fail-Fast:任一分支失败,立即取消其他分支
- 可关闭 Fail-Fast,允许部分分支失败后继续
从并行节点引出多条连线,每条连线代表一个并行分支。
等待(WAIT)
暂停执行指定时长。
配置项:
- 等待时长:固定等待秒数
- 等到指定时间:等待到特定时间点
审批(APPROVAL)
暂停工作流执行,等待人工审批。
配置项:
| 字段 | 说明 |
|---|---|
| 审批说明 | 描述需要审批的内容 |
| 通知网关 | 选择用于发送审批通知的 Gateway |
| 频道 ID | 通知发送到的 IM 频道 |
| 超时时间 | 超时自动拒绝(0 = 不限时) |
审批通知会发送到指定的 IM 频道,审批人在 IM 中回复即可批准或拒绝。
LLM 调用(LLM_CALL)
单次 LLM 调用,不涉及工具执行。适用于文本分析、摘要生成、分类判断等场景。
配置项:
| 字段 | 说明 |
|---|---|
| 提示词 | 提示词模板,支持变量引用 |
| 系统提示词 | 可选的系统指令 |
| 模型 | 覆盖工作区默认模型 |
| Temperature | 控制随机性 |
| 最大 Token 数 | 输出 Token 上限 |
| 响应格式 | 可选 JSON 格式约束 |
循环(FOR_EACH)
遍历一个集合,对每个元素执行循环体。
配置项:
- 遍历集合:引用上游步骤输出的数组,如
${fetch.output.items} - 循环变量名:循环体内引用当前元素的变量名
子工作流(SUB_WORKFLOW)
调用另一个已激活的工作流作为子步骤。
配置项:
- 目标工作流:选择一个已激活的工作流
- 输入参数:传递给子工作流的参数
变量传递
步骤之间通过变量传递数据。每个步骤的输出可以被下游步骤引用。
引用语法
${步骤名称.output.字段名}
例如:
${check_server.output.status}— 引用 check_server 步骤输出的 status 字段${fetch_data.output.items[0].name}— 引用数组元素
在工具参数中使用
资源调用步骤的工具参数支持变量引用:
{
"command": "systemctl restart ${analyze.output.service_name}",
"host": "${get_target.output.host}"
}
在提示词中使用
LLM 调用步骤的提示词模板支持变量引用:
请分析以下服务器状态报告:
${check_status.output.report}
并给出建议。
可用变量面板
编辑器中选中步骤时,可以查看当前步骤可用的变量列表(来自上游步骤的输出)。点击变量名可复制引用语法。
工作流设置
点击编辑器顶部的 设置 按钮,可以配置工作流全局设置:
| 设置项 | 说明 |
|---|---|
| 最大执行时间 | 工作流整体超时(秒)。单步超时不能超过剩余预算 |
| 失败时重试 | 是否启用自动重试 |
| 最大重试次数 | 全局重试次数上限 |
| 标签 | 工作流标签,用于分类和筛选 |
触发方式
工作流支持 4 种触发方式:
手动触发
在编辑器中点击 执行 按钮,或在工作流列表中点击执行。
定时触发
通过 定时调度 触发工作流执行。在创建调度任务时,目标类型选择”工作流”并选择要触发的工作流。
事件触发
通过事件触发器自动执行。
- 在编辑器中点击 触发器 按钮
- 点击 添加触发器
- 配置:
- 事件模式:fnmatch 模式,如
task.completed、workflow.*、schedule.fired - 指令:传递给工作流的上下文信息(可选)
- 启用:是否启用此触发器
- 事件模式:fnmatch 模式,如
- 保存
常用事件模式:
| 事件模式 | 触发时机 |
|---|---|
task.completed | 任务完成时 |
task.failed | 任务失败时 |
workflow.completed | 工作流完成时 |
schedule.fired | 定时调度触发时 |
custom.* | Bot 发布的自定义事件 |
API 触发
通过 API 调用 POST /api/workflows/{id}/execute 触发。
绑定到 Bot
工作流可以绑定到 Bot,让 Bot 在对话中使用工作流。
在 Bot 详情页 → 工作流 Tab 中,为每个工作流设置绑定模式:
| 绑定模式 | 说明 |
|---|---|
| 未绑定 | Bot 无法使用此工作流 |
| AI 自动 | 工作流注入为 LLM 工具,Bot 根据对话上下文自主决定是否调用 |
| 命令 | 用户在对话中输入特定命令触发(需配置命令名称,如 deploy) |
| 自动 + 命令 | 两种方式都支持 |
还可以配置命令的使用权限:仅管理员 或 所有人。
执行历史
查看执行历史
在编辑器中点击 历史 按钮,可以查看该工作流的所有执行记录:
- 执行状态
- 触发方式(手动 / 定时 / 事件触发 / API)
- 耗时
- 创建时间
执行详情
点击某次执行,可以查看详情:
- 每个步骤的执行状态和耗时
- 步骤的输入参数和输出结果
- 失败步骤的错误信息
- 审批步骤的审批结果
执行统计
编辑器顶部显示工作流统计:
- 成功率
- 总执行数
- 平均耗时
- 最慢步骤
执行状态
| 状态 | 说明 |
|---|---|
| 等待中 | 排队等待执行 |
| 运行中 | 正在执行 |
| 成功 | 所有步骤执行完毕 |
| 失败 | 某个步骤执行失败 |
| 已取消 | 手动取消 |
| 超时 | 超过最大执行时间 |
| 等待审批 | 审批步骤暂停中 |
导入与导出
导出
在编辑器中点击 导出 按钮,将工作流导出为 JSON 文件。导出内容包含所有步骤定义、连线和配置。
导入
- 在工作流列表点击 导入
- 上传工作流 JSON 文件
- 在依赖映射中将外部依赖(Resource ID、Bot ID)映射到本地资源
- 选择归属 Bot
- 确认导入
安全机制
工作流执行器内置多层安全机制:
- DAG 环检测:保存时自动检测连线是否形成循环,防止无限执行
- 超时预算:全局超时限制 + 每步超时取剩余预算的较小值,防止步骤超时拖垮整个工作流
- 并行 Fail-Fast:并行分支中任一失败立即取消兄弟分支(可关闭)
- 安全表达式:条件表达式使用 AST 白名单求值,不支持任意代码执行
- 权限校验:资源调用步骤同样经过完整的权限检查链路
常见用法
自动化运维流水线
开始 → 检查服务器状态(SSH)→ 条件判断
├── 正常 → 记录日志 → 结束
└── 异常 → LLM 分析 → 审批 → 执行修复 → 通知 → 结束
数据处理管道
开始 → 获取数据(API)→ 并行处理
├── 分支1:数据清洗
├── 分支2:数据分析
└── 分支3:数据备份
→ 汇总结果 → LLM 总结 → 发送报告 → 结束
事件驱动响应
设置触发器监听 task.failed 事件,自动执行故障分析和通知流程。
常见问题
工作流保存时提示”检测到环”
检查连线是否形成了循环。使用编辑器的验证功能定位问题连线。
步骤超时但工作流仍在运行
每步超时受全局超时预算限制。如果全局超时充足,步骤超时只影响当前步骤。检查工作流设置中的最大执行时间。
条件表达式不生效
确认表达式语法正确,变量引用的步骤名称与实际步骤名匹配。检查上游步骤的输出是否包含引用的字段。
审批通知收不到
- 检查审批步骤的通知网关配置
- 确认 Gateway 状态正常
- 确认频道 ID 正确