$npx -y skills add nigo81/nigo-skills --skill flowchart-generator内控和审计流程图生成工具。当用户需要绘制泳道流程图、审批流程、报销流程、内控流程、资金流程、采购流程或任何业务流程图时使用。支持从自然语言描述生成 .drawio/PNG/SVG/VSDX 格式。即使没有明确说"流程图",只要涉及"画图"、"可视化"、"绘制"业务流程,也应触发。也适用于用户说"帮我画个XX流程"或"把这个流程可视化"等场景。
| 1 | # Flowchart Generator Skill |
| 2 | |
| 3 | > **制作人:nigo** | **微信公众号:逆行的狗** |
| 4 | |
| 5 | 专业的内控和审计流程图生成工具,用于将业务流程描述转换为标准的泳道流程图。 |
| 6 | |
| 7 | ## 适用场景 |
| 8 | |
| 9 | 当用户遇到以下需求时激活: |
| 10 | |
| 11 | - **审计和财务领域**:绘制资金流程、采购流程、报销流程、审批流程 |
| 12 | - **内控文档**:业务流程图、控制活动图、SOP 流程图 |
| 13 | - **系统设计**:业务流程梳理、数据流程图、系统集成图 |
| 14 | - **流程标准化**:将口头/文字描述的可视化 |
| 15 | |
| 16 | **触发关键词**: |
| 17 | - 流程图、泳道图、审批流程、报销流程、采购流程 |
| 18 | - 画图、可视化、绘制流程、生成图表 |
| 19 | - 内控、SOP、工作流、业务流程 |
| 20 | - draw.io、流程文档、流程设计 |
| 21 | |
| 22 | ## 核心功能 |
| 23 | |
| 24 | ### 1. 流程图生成 |
| 25 | |
| 26 | 自动生成标准泳道流程图,包含: |
| 27 | - **泳道划分**:按责任部门/角色自动分组 |
| 28 | - **节点类型**:处理节点、判断节点、开始/结束 |
| 29 | - **连线标注**:分支条件(是/否)、流程路径 |
| 30 | - **输出文档**:自动标注节点产出的单据/凭证 |
| 31 | |
| 32 | **内置主题**: |
| 33 | - "内控搭建"主题:浅蓝标题栏 + 白底黑框 + 红色开始/结束 |
| 34 | - 支持自定义样式和主题 |
| 35 | |
| 36 | ### 2. 节点数据结构 |
| 37 | |
| 38 | 引擎接收结构化节点数据,格式如下: |
| 39 | |
| 40 | ```python |
| 41 | nodes_data = [ |
| 42 | { |
| 43 | "id": "1", # 唯一标识 |
| 44 | "step": "提交付款申请\n(附单据)", # 步骤描述(\n 换行) |
| 45 | "type": "process", # process=矩形 | decision=菱形 |
| 46 | "swimlane_role": "采购部", # 泳道(部门名) |
| 47 | "node_role": "采购经办", # 节点内角色标签 |
| 48 | "output_docs": "请款单", # 输出文档(可选) |
| 49 | "next_steps": [ # 下游节点 |
| 50 | {"id": "2", "condition": ""} # condition 空=普通流转 |
| 51 | ] |
| 52 | }, |
| 53 | { |
| 54 | "id": "2", |
| 55 | "step": "金额>2000?", |
| 56 | "type": "decision", |
| 57 | "swimlane_role": "财务部", |
| 58 | "node_role": "财务经理", |
| 59 | "output_docs": "", |
| 60 | "next_steps": [ |
| 61 | {"id": "3", "condition": "是"}, |
| 62 | {"id": "4", "condition": "否"} |
| 63 | ] |
| 64 | }, |
| 65 | { |
| 66 | "id": "5", |
| 67 | "step": "登记账簿", |
| 68 | "type": "process", |
| 69 | "swimlane_role": "财务部", |
| 70 | "node_role": "会计", |
| 71 | "output_docs": "", |
| 72 | "next_steps": [] # 空列表=流程终点 |
| 73 | } |
| 74 | ] |
| 75 | ``` |
| 76 | |
| 77 | **解析规则**: |
| 78 | - 泳道:从描述中提取部门名(财务部、采购部、总经理等) |
| 79 | - 判断节点:含"是否/判断/大于/匹配"等关键词 |
| 80 | - 开始/结束:自动生成,无需手动添加 |
| 81 | - 分支条件:判断节点必须标注条件(是/否等) |
| 82 | |
| 83 | ### 3. 输出格式 |
| 84 | |
| 85 | - **.drawio**:可编辑的 XML 格式,支持后续修改 |
| 86 | - **.png**:高清图片,scale=2.0 为推荐值 |
| 87 | - **.svg**:矢量图,无损缩放 |
| 88 | - **.vsdx**:Visio 格式,需 draw.io v26.0.16(见下方说明) |
| 89 | |
| 90 | ### 4. 样式自定义 |
| 91 | |
| 92 | ```python |
| 93 | from engine import StyleManager |
| 94 | |
| 95 | sm = StyleManager(theme_name="governance") |
| 96 | |
| 97 | # 临时覆盖样式(不影响主题文件) |
| 98 | sm.override({ |
| 99 | 'colors': { |
| 100 | 'decision': {'fill': '#FFA500'} # 判断节点橙色 |
| 101 | }, |
| 102 | 'edges': { |
| 103 | 'dashed_for_negative': True # 否分支虚线 |
| 104 | } |
| 105 | }) |
| 106 | ``` |
| 107 | |
| 108 | ### 5. 主题管理 |
| 109 | |
| 110 | ```python |
| 111 | # 列出所有主题 |
| 112 | sm.list_themes() |
| 113 | |
| 114 | # 查看主题详情 |
| 115 | sm.get_theme_info("governance") |
| 116 | |
| 117 | # 保存自定义主题 |
| 118 | sm.save_as_theme( |
| 119 | name="我的主题", |
| 120 | description="橙色判断节点,虚线否分支" |
| 121 | ) |
| 122 | |
| 123 | # 加载自定义主题 |
| 124 | sm.load_theme("我的主题") |
| 125 | ``` |
| 126 | |
| 127 | ## 工作流程 |
| 128 | |
| 129 | ``` |
| 130 | 用户描述 → AI 解析为节点数据 → 选择导出格式 → 引擎生成 .drawio → 渲染导出 |
| 131 | ``` |
| 132 | |
| 133 | **格式选择**: |
| 134 | - .drawio:可编辑源文件(始终生成) |
| 135 | - .png:高清图片(可选) |
| 136 | - .svg:矢量图(可选) |
| 137 | - .vsdx:Visio格式(可选,需要兼容版本) |
| 138 | |
| 139 | **默认格式**:.drawio + .png(如用户未选择任何格式) |
| 140 | |
| 141 | ## 快速开始 |
| 142 | |
| 143 | ### 交互流程 |
| 144 | |
| 145 | 1. **解析用户描述**:将自然语言转换为结构化节点数据 |
| 146 | 2. **格式选择**:询问用户需要导出哪些格式(可多选) |
| 147 | 3. **生成流程图**:生成 .drawio 文件 |
| 148 | 4. **导出渲染**:根据用户选择导出对应格式 |
| 149 | |
| 150 | ### 格式选择交互 |
| 151 | |
| 152 | 在生成流程图前,使用 `question` 工具询问用户: |
| 153 | |
| 154 | ``` |
| 155 | 请选择要导出的格式: |
| 156 | - ✓ .drawio(可编辑源文件,始终生成) |
| 157 | - □ .png(高清图片) |
| 158 | - □ .svg(矢量图) |
| 159 | - □ .vsdx(Visio格式) |
| 160 | ``` |
| 161 | |
| 162 | **默认行为**:如用户未选择或取消,默认导出 .drawio 和 .png。 |
| 163 | |
| 164 | **注意事项**: |
| 165 | - .drawio 始终生成(可编辑源文件) |
| 166 | - .vsdx 需要 draw.io v26.0.16 或更低版本 |
| 167 | - 选择多个格式会依次导出 |
| 168 | |
| 169 | ### 完整示例 |
| 170 | |
| 171 | ```python |
| 172 | import sys |
| 173 | sys.path.insert(0, "/path/to/flowchart-generator") |
| 174 | from engine import StyleManager, FlowchartBuilder, Renderer |
| 175 | from pathlib import Path |
| 176 | |
| 177 | # 1. 定义流程节点 |
| 178 | nodes_data = [ |
| 179 | {"id": "1", "step": "提交申请", "type": "process", |
| 180 | "swimlane_role": "部门A", "node_role": "申请人", |
| 181 | "output_docs": "申请单", "next_steps": [{"id": "2", "condition": ""}]}, |
| 182 | {"id": "2", "step": "部门经理审批", "type": "process", |
| 183 | "swimlane_role": "部门A", "node_role": "部门经理", |
| 184 | "output_docs": "", "next_steps": [{"id": "3", "condition": ""}]}, |
| 185 | {"id": "3", "step": "财务审核", "type": "process", |
| 186 | "swimlane_role": "财务部", "node_role": "财务", |
| 187 | "output_docs": "", "next_steps": [{"id": "4", "condition": ""}]}, |
| 188 | {"id": "4", "step": "出纳付款", "type": "process", |
| 189 | "swimlane_role": "财务部", "node_role": "出纳", |
| 190 | "output_docs": "付款凭证", "next_steps": []}, |
| 191 | ] |
| 192 | |
| 193 | # 2. 格式选择(默认导出 .drawio + .png) |
| 194 | # 实际使用时由 AI 调用 question 工具询问用户 |
| 195 | export_formats = ['png'] # 用户选择导出 PNG |
| 196 | |
| 197 | # 3. 生成 .drawio(始终生成) |
| 198 | sm = StyleManager(theme_name="governance") |
| 199 | builder = FlowchartBuilder(style_manager=sm, sheet_name="费用报销流程", nodes_data=nodes_data) |
| 200 | xml = builder.generate_xml_content() |
| 201 | drawio_path = Path("费用报销.drawio") |
| 202 | drawio_path.write_text(xml, encoding="utf-8") |
| 203 | |
| 204 | # 4. 根据用户选择导出对应格式 |
| 205 | renderer = Renderer() |
| 206 | |
| 207 | if 'png' in export_formats: |
| 208 | renderer.export_to_png(drawio_path, Path("费用报销.png"), scale=2.0) |
| 209 | |
| 210 | if 'svg' in export_formats: |
| 211 | renderer.export_to_svg(drawio_path, Path("费用报销.svg")) |
| 212 | |
| 213 | if 'vsdx' in export_formats: |
| 214 | # VSDX 需要 draw.io v26.0.16 或更低版本 |
| 215 | renderer.export_to_vsdx(drawio_path, Path("费用报销.vsdx"), auto_install=True) |
| 216 | |
| 217 | print(f"✓ 已生成 .drawio(始终生成)") |
| 218 | if export_formats: |
| 219 | print(f"✓ 已导出: {', '.join(export_formats)}") |
| 220 | else: |
| 221 | print("✓ 使用默认格式: .drawio + .png") |
| 222 | ``` |
| 223 | |
| 224 | ## Visio (VSDX) 导出说明 |
| 225 | |
| 226 | **重要**:draw.io v26.2.2 之后官方已移除 VSDX 导出功能。 |
| 227 | |
| 228 | ### 自动安装(推荐) |
| 229 | |
| 230 | 智能检测版本,如不兼容则自动安装 v26.0.16: |
| 231 | |
| 232 | ```python |
| 233 | renderer.export_to_vsdx( |