流程图改到崩溃?Skill机制让修改回到文字里

📅 发布时间:2026/10/15 14:24:05
流程图改到崩溃?Skill机制让修改回到文字里
干了这么多年流程设计和代码评审我发现自己最怕的从来不是把流程图画出来而是把画好的流程图改掉。尤其是一个项目跑到中期业务规则开始膨胀产品今天说“采购审批要多加一个分支”明天说“销售节点要提前”——你永远在拖节点、拉连线、重新对齐布局每改一次整个图的排版就崩一次。后来我接触到了Skill这个概念准确说是AI编程工具里的那一套Skill机制Claude Code Skill、Cursor Skill都算猛然反应过来一件事流程图的修改其实应该回到文字里。这不是文艺说法是真正的解法把流程图当成一段有结构的文本用文字描述去驱动AI重新生成图而不是在画布上手工做几何变换。这篇文章我就把这个思路完整拆开讲从“为什么会崩溃”到“Skill怎么写、怎么用”一次性说透。1. 为什么流程图会让你改到崩溃1.1 流程图的连锁爆炸困境先说一个我自己踩过无数次的坑。你画一张业务流程图的初版可能只需要半下午。节点不多主线清晰画完还很整洁。但真实项目里的流程图永远不会停留在初版。举个例子我接手过一个采购到销售的系统流程梳理。最初的结构很简单采购申请 → 供应商确认 → 生成采购订单 → 入库 → 销售出库。五六个节点一条直线下来画完感觉神清气爽。然后需求开始变化。采购要区分“普通采购”和“紧急采购”于是第一个节点后分出一条分支。紧接着销售侧说出库前要加一道“信用额度检查”不通过要退回销售经理确认。再后来财务要求在所有环节后记录“资金占用标记”。每一次改动表面上只是“加一个节点”或“加一条连线”实际上整张图的布局逻辑都被打乱了分支位置不对、连线交叉、节点间距失衡、泳道错位。我算过一笔账一张包含30个节点的流程描述图在传统图形化工具里做一次“插入分支型”修改至少要移动或重连10到15个元素。“改图一小时移动半小时”不是段子是每一位流程设计者的日常。传统流程图工具还有一个让人抓狂的隐藏问题文本信息与图形元素脱节。你在Visio或Draw.io里画一个“审批节点”节点的名称、描述、负责人、规则说明都散落在不同的属性面板里。别人拿到这张图只能看到方块和箭头看不到背后的逻辑判断依据。而当你需要把这些信息汇总给开发团队或评审会时只能重新对着图一个个抄低效且容易漏。1.2 传统工具为什么越改越乱刨根问底的话“越改越乱”的根源可以归结为三个词布局算法缺失、逻辑与视觉耦合、版本对比困难。先看布局。大多数图形化工具并没有像Graphviz那样成熟的自动布局引擎用户需要手工安排每个节点的坐标。你加了一个分支就必须自己决定这个分支往哪儿画、怎么绕过已有节点。手一抖全图就乱了。就算做对齐操作也只能基于“视觉规整”而不是“语义层级”改着改着图的阅读顺序就和真实流程顺序脱节了。再看逻辑与视觉耦合。图形化编辑的本质是“所见即所得”但这也意味着你的每一次逻辑调整都必须同时完成视觉调整。你能优雅地描述“如果订单金额大于一万则进入财务复核”但你在画布上不光要写这句话还要画出一个判断菱形、两条出口连线、两个子流程块。逻辑一句话视觉三分钟这种一倍的逻辑成本被放大了很多倍。最后是版本对比。工程团队用Git管理代码天经地义但流程图文件呢Draw.io的XML文件倒是能进Git可两个版本的diff基本不可读。你只知道“供应商确认”这个节点变了至于它从普通方框变成了带超时处理的子流程光靠肉眼diff根本看不出来。代码里一行文字变更可以精确定位图里一次逻辑变更淹没在几十个坐标改动里。2. 把流程图变成文字从根源解决问题2.1 文字描述流程图的底层思路既然图形化的问题出在“视觉修改”和“逻辑修改”绑死在了一起那解法就很清晰了把逻辑从视觉里剥离出来先用文字把流程定义清楚再用程序把文字渲染成图。这个思路专业一点叫“文本化流程描述”散步在Mermaid、PlantUML、Graphviz DSL这些工具里也藏在BPMN 2.0 XML规范里。用文字描述流程图本质上是在做三件事给每个节点一个可标记的身份给每条连线一个明确的语义给每个分支一个可计算的判断条件。举个例子用Mermaid描述“判断一个数n能否同时被3和5整除”flowchart TD A([开始]) -- B[输入n] B -- C{n % 3 0?} C -- 否 -- F([输出不能被3和5同时整除]) C -- 是 -- D{n % 5 0?} D -- 否 -- F D -- 是 -- E([输出能被3和5同时整除]) E -- G([结束]) F -- G这段文字里每个节点都有代号A、B、C、D、E、F、G每一条箭头都对应一个转移条件。改逻辑的时候你只需要改箭头指向、改判断表达式剩下的排版渲染全部交给工具去做。这就是“修改回到文字里”的真实含义你改的是逻辑文本而不是画布坐标。同样的思路可以套用到算法流程图上。比如“依次输入10个数输出其中最大数”这道经典题目它的文本化形式是这样的循环变量i从1到10每次读入一个数x与当前最大值max比较如果x max则更新max。如果你需要把它转换成N-S流程图也完全用文字表达初始化max为第一个数 → 循环九次比较 → 输出max。N-S图恰恰是为了消除传统流程图的“随意跳转”而生的它的结构化特点和文本化表达天然契合。再比如“求两个数m和n的最大公约数”用辗转相除法描述文字三行就能写完输入 m, n 当 n ≠ 0 时r m mod n, m n, n r 输出 m这段文字怎么看都比一张后退箭头乱飞的图形更接近算法本质。BPMN流程设计里同样如此采购、生产、销售的全链路流程早就有BPMN 2.0的XML文本形式。网关Gateway在BPMN图上是菱形但在XML里只是一个带type属性的节点。你改网关类型从“排他网关”改成“并行网关”在图形工具里要删掉旧连线重画在XML/text里就是一个属性值的替换。2.2 从算法题到业务系统文本化表达的通用价值有人可能会说算法流程图结构简单当然可以用文字描述但真实业务系统里的流程图复杂得多节点有角色、有超时、有回调文字能表达吗答案是能而且BPMN 2.0本身就是干这件事的。拿采购到销售的全链路来说传统画法是一张巨大的泳道图采购员、供应商、仓库、生产计划、销售五个泳道每个泳道里塞一堆节点。改一次流程光是拖动泳道边界就能让人崩溃。换成文本化描述后每个环节对应的“责任人”“触发条件”“后续动作”都变成了结构化字段。比如节点采购订单审批 负责人采购经理 条件订单金额 50000 通过后生成采购订单 → 同步生产计划 拒绝时退回采购员修改这里没有坐标、没有连线但流程的所有信息都在。渲染成图是几秒钟的事更重要的是它能直接进入代码评审环节评审人员直接看这段文字检查条件是否完备、流转逻辑是否有漏洞比围着图猜语义高效得多。还有一个很常见的痛点代码评审流程图。传统方式是从代码里提取调用关系然后手工排布成图。代码每次改动图就得重新排一次。文本化之后生成逻辑直接绑定到代码解析结果上——只要代码结构变了重新跑一遍解析脚本新的流程图文本自动生成再渲染成图。整个过程的重点始终是代码本身而不是图。3. Skill是什么它如何让修改回到文字里3.1 Skill的本质给AI一套可复用的流程设计规范到这里读者大概已经认同“文字描述流程图”的思路了。但光有Mermaid和BPMN还不够——你依然需要自己把复杂的业务逻辑翻译成规范的文本语法。这一步的熟练度门槛把很多业务人员挡在了门外。而Skill的出现恰恰解决了“翻译”的问题。Skill这个词近一年在AI编程工具里频繁出现。Claude Code有SkillCursor有SkillOpenAI的Codex也有Skill机制。它本质上是一个“预定义的提示词包”一堆规则文件 示例文件 指令文件告诉AI在某些任务下应该如何思考、应该遵守什么格式、应该输出什么结构。用一个生活类比Skill就像你给实习生写的工作手册。你没时间每次都重新讲一遍“流程图的标准应该是什么样”于是把手册丢给实习生说“按这个来”。手册里写了节点怎么命名、分支怎么表示、特殊情况怎么处理、输出格式是什么。实习生看到手册就能产出和你期望一致的结果。关于Skill和Agent的区别我见过不少困惑。其实可以这么理解Agent是“自行决策要做什么、怎么做”的执行体面向目标Skill是“某个特定任务应该怎么做”的约束集合面向规范。Skill不决定“要不要画流程图”它决定“一旦开始画流程图就应该用这套标准来画”。所以Skill和Agent是配合关系Agent调度任务Skill约束执行细节。3.2 从书到技能到“仓颉Skill”Skill机制的落地形态顺着热搜词里“book to skill”“仓颉skill”这类概念走一圈你会发现Skill的形态正在变得越来越丰富。 “book to skill”代表一种思路把已有的文档、规范、“书”转化为AI可复用的技能规则本质上是知识的结构化沉淀。“仓颉skill”则反映出把某种领域专用语言或符号体系封装成Skill的尝试——仓颉造字是“给事物命名”Skill做的就是“给流程命名、给规则命名”。放在流程图场景里一个流程设计Skill应该包含哪些东西我总结为四层第一层语法规范层。定义用哪种文本格式描述流程Mermaid、PlantUML、BPMN XML还是自定义DSL。如果有自定义DSL需要给出完整的语法说明和关键词表。第二层结构模板层。针对常见流程类型给出可直接套用的模板。业务审批流程、算法流程、系统架构流程、N-S结构化流程各有各的模板。第三层转换规则层。定义如何把一段口语化需求翻译成规范文本以及如何把文本还原成可读的业务描述。这一步决定了“文字→图”和“图→文字”能否双向打通。第四层质量校验层。规定流程图的基本正确性标准节点是否有唯一的ID、分支是否有明确的出口条件、循环是否有终止条件、是否存在不可达节点。AI在输出图之前先用这套规则自检一遍。这四层一旦封装成Skill你的流程图修改就彻底摆脱了视觉排版噩梦。改流程时只描述“把节点C和D之间的判断条件从A改成B”AI根据Skill规则重新生成整段文本再渲染成图。你从头到尾都没有碰过画布。4. 实操从零构建一个“流程设计Skill”4.1 第一步定义你的文本流程图语法我建议先以一个简单但完整的语法起步而不是一上来就上BPMN XML。参考Mermaid flowchart和PlantUML的语法我常用的一种“轻量DSL”长这样节点定义N1[描述文本], N2[描述文本] 连接关系N1 - N2 条件分支N1 - N2 {条件金额50000} 并行网关N1 - N2 N3 循环结构loop(次数或条件) { ... } 结束标记END这套语法的设计原则有三个。一是“一行一个关系”保证每条边都可追踪。二是“条件写在箭头旁”保证分支语义和图形语义不分离。三是“层级用缩进表示”对应子流程或泳道的嵌套关系。你完全可以按自己的项目习惯扩展。比如增加泳道标识[部门采购]增加节点类型标记(审批|执行|网关)增加异常出口标记(超时|拒绝)。语法不追求一次到位先满足当前项目的表达需要再逐步扩充。4.2 第二步编写Skill的规则文件确定了语法接着把它封装成Skill。以Claude Code的Skill目录结构为例一个流程设计Skill的典型结构是flow-design-skill/ ├── SKILL.md ├── syntax.mdc ├── templates/ │ ├── approval-flow.md │ ├── algorithm-flow.md │ └── system-flow.md └── examples/ ├── purchase-to-sales.bpmn └── max-number.flow骨架里最关键的是SKILL.md它负责告诉AI“什么时候该启用这个Skill、输出什么、注意什么”。一个示意版本的SKILL.md可以写成这样# 流程设计技能 在任何涉及绘制、修改或评审流程图的对话中启用本技能。 ## 输入约定 - 用户可能提供口语化流程描述、现有图的文本、BPMN XML或代码调用关系。 - 当用户说“画一下流程图”“加一个分支”“改成并行网关”时按本规则执行。 ## 输出约定 - 默认输出轻量DSL文本并在代码块后给出对应的Mermaid渲染代码。 - 禁止直接输出坐标或布局信息。 - 每个节点必须有唯一ID和明确的描述文本。 - 每个分支必须写明判断条件禁止无条件的模糊箭头。 ## 流程 1. 解析用户的流程需求提取节点、分支、循环、参与角色。 2. 选用合适的模板审批流/算法流/系统流。 3. 生成DSL文本调用自检规则检查结构完整性。 4. 输出可渲染代码和一段“变更说明”解释本次改了什么。SKILL.md越具体AI的表现越稳定。你甚至可以加入一个“错误示例”区块列几条AI常犯的错误写法比如“分支条件写在节点内部”“节点ID重复”“输出纯图没有文本”。这比单纯说“注意质量”有效得多。4.3 第三步完整实操一个“修改需求”理论说再多不如直接跑一遍真实场景。我拿最初提到的“采购到销售”流程演示一次用Skill完成修改的完整链路。原始流程的DSL文本是S1[接收采购申请] - A1[供应商确认] - A2[生成采购订单] - A3[入库] - A4[销售出库] - END现在业务方提出采购申请需要区分普通采购和紧急采购紧急采购要跳过供应商确认直接进入生成采购订单同时销售出库前增加“信用额度检查”检查不过则退回销售经理确认确认后仍可出库。在传统工具里这又是一次“连线大挪移”。但使用Skill我只需要以口语形式描述需求AI会根据SKILL.md自动把新DSL文本生成出来S1[接收采购申请] S1 - A0{是否紧急采购?} A0 --|否| A1[供应商确认] A0 --|是| A2[生成采购订单] A1 - A2 A2 - A3[入库] A3 - A4{信用额度检查} A4 --|通过| A5[销售出库] - END A4 --|不通过| A6[销售经理确认] A6 - A5 A6 --|确认失败| END(流程终止)这段文本的变化一目了然新增了A0判断节点、A4判断节点、A6处理节点。用Mermaid渲染后生成一张结构紧凑的新图不需要手工拖拽任何东西。更重要的是评审团队拿着这份DSL去和业务方确认时双方讨论的是“判断条件写得对不对”而不是“这条线有没有跨过那个框”。我再补充一个复用场景算法流程图。用Skill处理“依次输入10个数输出最大数”的需求时启用algorithm-flow模板AI按模板输出INIT: max 第一个输入数, i 2 LOOP: i 10 READ: x IF: x max THEN: max x i i 1 END_LOOP OUTPUT: max渲染成传统流程图或N-S图都只需要一条渲染命令。代码结构和算法逻辑完全一致评审者可以直接把这个文本和实际代码做逐行对照。5. 常见问题与排查技巧实录5.1 文字到底在什么时候会“卡脖子”任何方案都有边界。我自己用了这套“文字化流程 Skill”的组合一段时间后遇到的第一个典型问题是当流程图的复杂度超过某个阈值时纯文本变得极难阅读。一张包含80个节点、十几条交叉分支的业务流程图文字描述排出来可能有一千多行。人眼在纯文本里找一条跨泳道的连线的效率未必比在图上找要高。我的建议是用文字驱动流程设计但并不排斥出图。Skill的定位应该是“保证文字和图形随时可互相转换”而不是“消灭图形”。复杂流程的评审阶段还是要把DSL渲染成图来看修改阶段再回到文字操作。把两者当成同一份流程描述的两种视图才是最佳状态。第二个常见问题AI生成的DSL里分支条件偶尔会丢失。表现为图上两个节点之间有一条没有条件的箭头但业务逻辑实际是有条件的。我排查后发现问题往往出在用户描述需求时漏掉了条件信息。所以我在SKILL.md里加了一条强制规则如果一条连线缺少明确条件AI必须追问“这条连线是否有隐含条件”宁可多问一次不要输出残缺逻辑。第三个问题来自团队协作团队成员对DSL的熟练度不一致有人会用有人习惯拖图形。我的落地经验是在项目初期安排一次30分钟的DSL语法培训把“轻量DSL Mermaid渲染”讲透。培训结束后绝大多数成员能接受这种模式因为修改效率的提升是即时可见的。真正坚持“必须用鼠标画图”的成员极少他们担心的只是“文字描述是否准确”而准确性问题恰恰是Skill的校验规则可以兜底的。5.2 问题速查表与避坑心得常见现象排查方向推荐解法DSL能渲染但图的分支顺序不对检查生成规则是否按“先发现则”排序分支在SKILL.md里规定左侧分支先列条件书写统一“满足条件→出口”节点编号混乱评审对不上号检查ID分配规则用“前缀序号”强制规则A表示业务活动G表示网关S表示开始/结束修改后旧分支仍在图上检查AI是否基于“全量重写”而非“增量修改”调高输出完整度要求每次都输出全量DSL不输出“只改一处”的描述BPMN网关类型转换失败检查网关语义是否清晰排他网关用“每次只走一条线”并行网关用“多条线同时执行”在DSL中显式标注多人协作时DSL风格不统一缺少统一的Skill规则建立团队级SKILL.md强制缩进、命名、条件写法规范图渲染出来太宽横向滚动布局算法自动换行失效用Mermaid的LR或TB方向参数控制或拆分子流图避坑心得里我最想强调的一条是不要把Skill写成“一套万能的流程生成咒语”。Skill的规则文件越简单越好重点在于边界清晰什么归DSL语法管什么归业务规则管什么归渲染展示管各司其职。我在早期往SKILL.md里塞了一堆“业务审批的人事规范”结果AI在生成算法流程图时也开始输出审批节点闹出不少笑话。后来把所有业务字段移到模板层SKILL.md只保留生成规则和校验规则问题立刻消失。6. 我个人后来越用越顺的几个小技巧回到开头那个结论流程图修改回到文字里不是一种情怀而是一种工程效率上的必然。我之后在项目里又摸索出了一些让这套机制更顺手的细节。第一把“变更说明”和“DSL变更”绑定输出。每次让AI改流程时要求它不仅输出新DSL还必须列出“相对上一版改了哪些节点、哪些连线”。这样代码评审时大家先看变更说明再核对新DSL最后看渲染图全程信息是分层的不会淹没在图形堆里。第二让Skill顺带生成“流程校验清单”。比如检查是否每个分支都有出口、是否存在等价条件合并的空间、循环是否能终止。这些检查项在传统流程图中很难自动完成但在文本层用规则扫描很容易实现。我甚至把ALNS算法这种带启发式搜索的复杂逻辑画成流程图后用校验清单扫描了一遍还真找出一个“重复更新解导致的死循环分支”。第三给流程图加“语义锚点”。一个节点在DSL中的ID不要用纯数字用“业务代号序号”比如PO-APPROVE-01。这样即使流程图改了几十版评审人员依然能从ID的字面含义里快速定位到业务环节。这招在大型跨部门评审时尤其好用。第四遇到特别复杂的系统流程图别把整个图塞进一个DSL文件。拆成“主流程文件 子流程文件”主流程引用子流程的编号。这个思路和代码工程里的“模块化”一脉相承主图保持简洁子图按需展开渲染。最后再分享一个团队协作层面的经验。我和团队花了两周时间用这套“流程Skill 文字驱动”方案把我们手里的一个采购到销售全链路流程重构了一遍生成的DSL总共两千多行。两周后业务方提了一次涉及三个节点的流程变更——这次我们只花了不到半天就完成多版调整加多轮评审。换作以前用纯图形工具一次这样的改动至少要一到两天。流程设计的未来方向大概率不是“画的图更多”而是“画的图更少但更准”。文字承载逻辑图承载呈现Skill承载规则三者各干各的专长。如果你也正被流程图的新版本折磨得焦头烂额不妨按我上面的步骤从定义一个轻量DSL开始给自己的AI配一个流程设计Skill。先用一个小流程图练手跑通“文字→图→改文字→再改图”的循环你会发现流程图修改这件事原来可以这么清爽。