Mermaid使用手册
author: 周均扬
date: 2026.07.09
1. 基本结构
最小可运行结构如下:
flowchart LR
A --> B
含义:
声明图类型与方向
定义节点 A
定义节点 B
A 指向 B
完整写法:
flowchart LR
A["输入"] --> B["处理"] --> C["输出"]
建议规则:
| 项目 | 推荐写法 | 说明 |
|---|---|---|
| 图类型 | flowchart |
新版推荐写法 |
| 方向 | LR / TB |
控制整体布局 |
| 节点 ID | 英文、数字、下划线 | 稳定,不容易报错 |
| 中文内容 | 放在 ["中文"] 中 |
中文显示更稳定 |
| 换行 | <br/> |
适合做汇报图 |
2. 节点写法
Mermaid flowchart 支持多种节点形状,官方文档也列出了矩形、圆角、圆形、菱形、圆柱形等多种节点形状。([美人鱼图表][1])
1. 普通矩形节点
flowchart LR
A["普通处理节点"]
常用于:
模块、功能、步骤、系统组件
2. 圆角节点
flowchart LR
A("开始 / 结束")
常用于:
开始、结束、入口、出口
3. 菱形判断节点
flowchart TB
A{"是否进入危险区?"}
常用于:
是 / 否判断
条件分支
风险等级判断
4. 圆柱形数据库节点
flowchart LR
DB[("事件数据库<br/>Event Store")]
常用于:
数据库、数据湖、缓存、日志仓库
5. 子程序 / 模块节点
flowchart LR
M[["AI应用引擎<br/>Risk Engine"]]
常用于:
核心模块
算法引擎
平台服务
3. 连线写法
Mermaid 的节点之间通过 link / edge 连接,官方文档说明 flowchart 支持不同类型的连线,也可以给连线附加文字。([美人鱼图表][1])
1. 普通箭头
flowchart LR
A["CameraSDK"] --> B["AI推理引擎"]
含义:
A 指向 B
2. 无箭头连线
flowchart LR
A["设备A"] --- B["设备B"]
适合表示:
关联关系
连接关系
非方向性关系
3. 带文字的箭头
flowchart LR
A["Camera"] -- "图像帧 + 时间戳" --> B["CameraSDK"]
适合表示:
数据内容
接口协议
触发条件
控制命令
4. 虚线箭头
flowchart LR
A["AI应用引擎"] -. "告警事件" .-> B["事件记录器"]
适合表示:
异步事件
日志流
非主流程
辅助关系
5. 粗箭头
flowchart LR
A["风险评分"] ==> B["PLC急停联锁"]
适合表示:
关键控制链路
强约束动作
安全闭环
核心主链路
6. 多节点链式写法
flowchart LR
A["输入"] --> B["处理"] --> C["输出"] --> D["反馈"]
适合快速表达线性流程。
但复杂图不建议过度使用一行链式写法,否则后续维护困难。工程图建议一条边一行。
4. 分支判断写法
1. 基础判断
flowchart TB
A["检测人员位置"]
B{"是否进入危险区?"}
C["继续运行"]
D["触发告警"]
A --> B
B -- "否" --> C
B -- "是" --> D
2. 多级风险判断
flowchart TB
A["风险评分 Risk Score"]
B{"风险等级?"}
C["L1 提示"]
D["L2 减速"]
E["L3 暂停"]
F["L4 急停"]
A --> B
B -- "低风险" --> C
B -- "中风险" --> D
B -- "高风险" --> E
B -- "极高风险" --> F
5. subgraph 分组
subgraph 用于把多个节点放在一个逻辑分组里。官方语法形式是 subgraph title ... end,也可以为 subgraph 设置显式 ID;flowchart 还支持从 subgraph 连到外部节点。([美人鱼图表][1])
1. 基础分组
flowchart LR
subgraph L1["设备感知层"]
Camera["工业相机"]
AGV["AGV"]
Robot["Robot"]
PLC["PLC"]
end
subgraph L2["数据接入层"]
SDK["CameraSDK"]
ROS2["ROS2 Adapter"]
PLCAdapter["PLC Adapter"]
end
Camera --> SDK
AGV --> ROS2
Robot --> ROS2
PLC --> PLCAdapter
2. 多层系统架构图
flowchart LR
subgraph S1["L1 设备感知层"]
A1["工业相机"]
A2["AGV"]
A3["Robot"]
A4["PLC"]
end
subgraph S2["L2 数据接入层"]
B1["CameraSDK"]
B2["ROS2 Adapter"]
B3["OPC UA / Modbus"]
B4["Event Bus"]
end
subgraph S3["L3 AI应用层"]
C1["目标检测"]
C2["轨迹预测"]
C3["风险评分"]
end
subgraph S4["L4 决策控制层"]
D1["安全规则引擎"]
D2["告警 / 减速 / 暂停 / 急停"]
end
A1 --> B1
A2 --> B2
A3 --> B2
A4 --> B3
B1 --> B4
B2 --> B4
B3 --> B4
B4 --> C1
C1 --> C2
C2 --> C3
C3 --> D1
D1 --> D2
3. subgraph 方向限制
Mermaid 支持在 subgraph 内使用 direction 指定子图方向,但官方文档特别说明:如果子图中的节点与外部节点相连,子图方向可能会被忽略,并继承父图方向。([美人鱼图表][1])
例如:
flowchart TB
subgraph A["设备层"]
direction LR
A1["Camera"] --> A2["AGV"] --> A3["Robot"]
end
A --> B["AI应用层"]
实际渲染时,子图不一定完全按 direction LR 排列。
工程建议:
1. 不要过度依赖 subgraph 内部 direction。
2. 复杂架构图优先用整体 LR。
3. 复杂流程图优先用整体 TB。
4. 如需精确排版,拆成多张 Mermaid 图。
6. 样式:classDef 与 class
Mermaid 推荐使用 classDef 定义样式,再通过 class 绑定到节点;官方文档也说明,外部 CSS 不如 classDef 稳定,推荐直接使用 Mermaid 内部样式机制。([美人鱼图表][1])
1. 基础样式
flowchart LR
A["设备感知层"]
B["AI应用层"]
C["控制执行层"]
A --> B --> C
classDef sensor fill:#EAF4FF,stroke:#2F80ED,stroke-width:1.5px,color:#0B2E4A;
classDef ai fill:#FFF4E6,stroke:#F2994A,stroke-width:1.5px,color:#4A2500;
classDef control fill:#F3E8FF,stroke:#9B51E0,stroke-width:1.5px,color:#2D0C57;
class A sensor;
class B ai;
class C control;
2. 多节点绑定同一类
flowchart LR
Camera["工业相机"]
AGV["AGV"]
Robot["Robot"]
PLC["PLC"]
Camera --> AGV
AGV --> Robot
Robot --> PLC
classDef device fill:#EAF4FF,stroke:#2F80ED,stroke-width:1.5px;
class Camera,AGV,Robot,PLC device;
3. 使用 ::: 简写样式
flowchart LR
A["设备感知层"]:::sensor --> B["AI应用层"]:::ai
classDef sensor fill:#EAF4FF,stroke:#2F80ED,stroke-width:1.5px;
classDef ai fill:#FFF4E6,stroke:#F2994A,stroke-width:1.5px;
7. 注释写法
Mermaid 支持使用 %% 写注释,注释需要单独成行,解析器会忽略这些内容。([美人鱼图表][1])
flowchart LR
%% 这是设备接入部分
A["Camera"] --> B["CameraSDK"]
%% 这是AI处理部分
B --> C["AI应用引擎"]
建议在复杂图中保留注释,方便后续维护。
8. 中文、特殊字符与换行
官方文档建议 Unicode 文本使用双引号包起来;如果节点文本包含特殊字符,也建议用引号避免语法问题。([美人鱼图表][1])
推荐写法
flowchart LR
A["工业相机<br/>人员/AGV/机器人感知"]
B["AI应用引擎<br/>检测/跟踪/预测/评分"]
A --> B
不推荐写法
flowchart LR
工业相机 --> AI应用引擎
原因:
中文直接作为节点 ID 时,后续连线、样式绑定、修改会比较不稳定。
建议规范:
节点 ID 用英文:Camera, AIEngine, RiskScore
节点显示文本用中文:["工业相机"]
多行文本用 <br/>
复杂文本加双引号
9. 线条样式:linkStyle
linkStyle 可以按连线顺序设置样式。官方文档说明,linkStyle 通过连线定义的顺序编号来匹配连线。([美人鱼图表][1])
flowchart LR
A["感知"] --> B["AI应用"]
B --> C["风险评分"]
C --> D["PLC急停"]
linkStyle 2 stroke:#ff0000,stroke-width:3px;
注意:
linkStyle 2 表示第 3 条边。
Mermaid 的边编号通常从 0 开始。
所以:
第 0 条:A --> B
第 1 条:B --> C
第 2 条:C --> D
10. 常用语法速查表
| 功能 | 写法 | 示例 |
|---|---|---|
| 声明横向图 | flowchart LR |
左到右 |
| 声明纵向图 | flowchart TB |
上到下 |
| 矩形节点 | A["文本"] |
普通模块 |
| 圆角节点 | A("文本") |
开始/结束 |
| 判断节点 | A{"文本"} |
条件分支 |
| 数据库节点 | A[("文本")] |
数据库 |
| 子程序节点 | A[["文本"]] |
核心模块 |
| 普通箭头 | A --> B |
有方向 |
| 无箭头线 | A --- B |
关联 |
| 带文字箭头 | A -- "文本" --> B |
数据/条件 |
| 虚线箭头 | A -.-> B |
异步/辅助 |
| 粗箭头 | A ==> B |
关键链路 |
| 分组 | subgraph ... end |
分层架构 |
| 注释 | %% 注释 |
维护说明 |
| 定义样式 | classDef xxx ... |
样式模板 |
| 应用样式 | class A xxx; |
节点绑定 |
11. 选择 LR 还是 TB 的判断方法
选 flowchart LR 的情况
当你的图是下面这种逻辑:
左边输入,右边输出
前面是底层,后面是上层
前面是数据源,后面是应用
前面是阶段1,后面是阶段2
例如:
设备层 → 接入层 → AI层 → 控制层 → 应用层
MVP → Pilot → Scale → Platform
Camera → SDK → AI → PLC
就用:
flowchart LR
A["输入"] --> B["处理"] --> C["输出"]
选 flowchart TB 的情况
当你的图是下面这种逻辑:
上面是开始,下面是结束
上级到下级
流程一步步向下执行
判断分支向下展开
例如:
开始 → 检测 → 判断 → 动作 → 记录
CEO → CTO → 能力中心
需求 → 设计 → 开发 → 测试 → 发布
就用:
flowchart TB
A["开始"] --> B["处理"] --> C["结束"]
12. 工程级 Mermaid 编写规范
建议你在 Pack 产线工业安全项目中统一采用下面规范:
1. 图类型统一用 flowchart,不用旧写法 graph。
2. 架构图优先用 LR。
3. 流程图、状态升级图、组织图优先用 TB。
4. 节点 ID 使用英文,例如 Camera、CameraSDK、RiskEngine。
5. 中文显示文本放在 ["..."] 中。
6. 多行文本使用 <br/>。
7. 所有模块尽量使用 subgraph 分层。
8. 所有颜色使用 classDef 统一管理。
9. 不建议在节点 ID 中直接写中文、空格、括号、斜杠。
10. 复杂图不要追求一张图装下所有内容,建议拆成“总体图 + 局部图”。
13. 推荐给 ChatGPT 的 Mermaid 生成提示词
请根据以下内容生成 Mermaid flowchart。
主题:工业空间安全系统架构
图类型:flowchart
方向:LR
要求:
1. 使用 subgraph 分层
2. 节点 ID 使用英文
3. 节点显示文本使用中文
4. 中文节点使用 ["..."] 包裹
5. 多行文本使用 <br/>
6. 使用 classDef 定义颜色
7. 架构图风格:咨询汇报、工业4.0、蓝白科技风
8. 输出可直接复制运行的 Mermaid 代码
9. 不要输出解释,只输出代码
内容:
- 设备感知层:工业相机、AGV、Robot、PLC
- 数据接入层:CameraSDK、ROS2 Adapter、PLC Adapter、Event Bus
- AI应用层:目标检测、轨迹预测、风险评分
- 决策控制层:规则引擎、安全动作、控制命令
- 平台应用层:Dashboard、事件回溯、安全报表
| [1]: https://mermaid.ai/open-source/syntax/flowchart.html “Flowcharts Syntax | Mermaid” |