流程图改到崩溃,这事我太熟了。
上个月接了个需求,要改一套系统流程图里的登录锁定策略。图是同事用某个图形化工具画的,节点几十个,连线密密麻麻。我在里面拖一个判断框,结果三分之一的箭头全乱了;想加个分支,得先把附近的节点一个个挪开;想把"锁定15分钟"改成"锁定30分钟",还得双击进去找文字。最崩溃的是保存完第二天,同事说他也改了一版,两个人改的版本根本没法合并——因为导出来是图片,代码仓库里只能看到"文件变了",看不到到底变了什么。
后来我看到现在圈子里大家都在聊一个东西:Skill。核心思路很简单——把流程图的修改从"拖拽图形"拉回"修改文字"。
这句话值得展开说。现在主流的AI编程工具(Claude Code、Codex、Cursor这些)都有自己的Skill机制,你完全可以自己写一个"流程图修改Skill",把业务规则、绘图规范、校验清单全部写成文字规则,然后只要用自然语言说一句"帮我把登录失败锁定策略改成连续5次失败锁定30分钟,并加一个解锁入口",它会直接改好流程图的文本源码,再渲染成图。图形工具里的噩梦,在文字世界里只是一次diff而已。
这篇博文我打算分成六块讲:先从"为什么图形化改图这么痛苦"说起,再把Skill机制用大白话讲清楚,然后手把手教你写一个可用的流程图修改Skill,接着用"用户管理模块流程图"跑一个完整实战,再整理几条我踩过的坑,最后分享几个把Skill从能用变成好用的进阶玩法。适合正在做流程设计、系统分析、或者被流程图折磨的开发、产品、运维同学。
1. 流程图改到崩溃?先搞清楚病根在哪
1.1 图形化改图的三大崩溃现场
在图形化工具里改图,最典型的一幕是:你想把A节点连到C,结果旁边B节点的箭头跟着挪了位;你小心翼翼地拖动一条线,整个画的布局塌了一半。为什么?因为图形工具存储的是坐标和路由信息,每条连线都是基于绝对位置计算的。你动了一个节点,等于动了所有依赖它的定位基准。这种连锁反应在节点超过30个、连线超过50条的系统流程图里几乎是必然的。画一张新图还好,改一张老图才是真正的修罗场。
第二个崩溃点是版本管理。流程图导出成图片,或者存成图形工具的私有格式,代码仓库能看到的只有"二进制文件变动"。你根本不知道同事改了什么,也不知道自己改的版本跟上一版差在哪。想回滚?只能靠"我记得改过这里"。这跟改代码完全是两个世界——代码里一行diff清清楚楚,流程图里全是黑盒。我见过很多团队最后干脆不用版本管理了,直接在共享盘里放"最终版v3"、"最终版v4再也不改"、"最终版v5真不改了"这种命名的文件。
第三个崩溃点是多人协作。设计评审会上,业务提了两个改动点,你分给同事A和同事B各改一块。结果两个人同时打开同一个图形文件,保存时后保存的人把先保存的人覆盖了。图形工具的合并能力约等于零。最后只能一人出一版,另外一个人照着图手工把改动搬过来。这种场景在多角色交叉改图时天天发生:产品改流程、开发改节点、测试补异常分支,三个人三个思路,图却只有一张。
1.2 文本化流程图:业内早就验证过的正解
如果流程图写成文字,上面的问题能简化一大半。写代码的同事对这套再熟悉不过了:用Markdown写文档、用代码管理配置,本质上都是"用纯文本保存信息"。流程图的文本化也一样,Mermaid、PlantUML都是成熟方案。Mermaid的写法很直观:
flowchart TD A[开始] --> B{登录成功?} B -->|是| C[进入系统] B -->|否| D[显示错误]方括号是处理步骤、花括号是判断分支、箭头表示流转。改一个分支就是改一行文字,加一个节点就是加一行代码。改完提交代码仓库,diff里清清楚楚:"第3行从'锁定15分钟'变成'锁定30分钟'"。三个崩溃现场直接消失:布局是自动计算的,版本能diff了,多人合并跟代码合并一样可以做。
1.3 为什么大家都知道却还是崩
那我为什么还要写这篇文章?因为纯文本化有一个门槛:大多数人记不住语法,也不愿意为了画一张图去学一门"编程语言"。产品经理不想学Mermaid语法,业务分析师不想记BPMN的XML,开发自己手写流程文本也嫌麻烦。所以大家宁可继续用图形工具拖拽,一边崩溃一边拖。
这个矛盾,恰恰是Skill出现的价值——使用者不需要写语法,只需要说人话;语法、规范、渲染,全部由Skill包办。这是后面两章的核心逻辑。
2. Skill到底是什么:它是怎么把修改拽回文字世界的
2.1 用大白话理解Skill:它是一本操作手册
先说一个容易混淆的问题:Skill到底是个啥?我在各种群里看了很多讨论,有人把它理解成提示词,有人把它理解成插件,都没说到点子上。
最好用的类比是把AI Agent当成一个刚入职的员工,Skill就是发给这个员工的操作手册。员工本身很聪明,但没看过你们团队的规范,不知道流程图要画到什么粒度、BPMN网关用哪种、命名走什么风格。Skill这份手册把这些全部写清楚:"遇到这类需求,先做什么,再做什么,输出长什么样,哪些红线不能碰"。你给员工一句话"改一下登录锁定策略",他翻出手册,按步骤走,交回来一份完全符合团队规范的产物。
再补一个区分:普通提示词顶多算口头叮嘱,能不能落实看临场发挥;Skill是固化下来的制度,每次调用都按同一套标准执行。这也就是为什么Claude Code、Codex这些工具都在推Skill机制——它把个人技巧沉淀成可复用的团队资产。
2.2 Skill与Agent、插件的区别
很多人把Skill、Agent、Plugin混着用。我整理了一下区别:
| 概念 | 通俗理解 | 作用范围 | 类比 |
|---|---|---|---|
| Agent | 一个能自主规划、多步执行的大模型智能体 | 完成一个较完整的任务闭环 | 员工 |
| Skill | 约束Agent按固定流程和规范干活的知识包 | 被Agent在任务中调用,决定输出质量 | 操作手册 |
| Plugin/Tool | 具体执行某个动作的工具函数 | 单一动作,比如渲染图片、查数据库 | 工具设备 |
一句话概括:Agent拿着Skill这本手册,按需调用Plugin这些工具去执行具体动作。你写一个"流程图修改Skill",本质是把"如何理解流程需求、如何改Mermaid源码、如何校验分支完整性"这些方法论写下来,让Agent照着执行。
2.3 一个流程图Skill能做什么
我把自己写的这个Skill实际用起来之后,总结出三个改变。
第一,修改回归到文字。以前改图要在图形界面里拖拽,现在只需在对话里说"把审批环节加一个技术负责人会签",Skill会自动定位当前Mermaid源码中的审批节点,插入分支节点,更新流程。整个过程不离开文本,变更立刻可diff、可回滚。
第二,规范自动生效。Skill里写死了判断节点必须用问句、分支路径标签必须动词开头、并行分支必须显式标注等规则。Agent输出时天然符合这些规范,不需要人肉把关。
第三,渲染只差一条命令。Skill结尾附带渲染指引,Mermaid源码可以直接在本地或在线工具渲染成图形。改完文字顺手出图,流程是连续的。
但也要说清楚边界:Skill不是自动画图机器人,它更擅长"理解需求、产出文本图源码、按规则修改",至于最终那张图长什么样、布局怎么排,是渲染器的事。把这两件事分开,你实际使用的时候就不会对Skill有过高期望,用起来反而顺手。
3. 手把手做一个"流程图修改Skill":核心规则这样写
3.1 设计游戏规则:输入、输出和判定标准
写Skill之前,先别急着敲文件,先逼自己想清楚三件事:这个Skill收到什么、产出什么、怎么算做对。拿我的"流程图修改Skill"举例:
- 输入:自然语言的流程变更需求,比如"增加一个异常分支"、"把订单状态从'待支付'改为'已关闭'",或者要求新建某模块的流程图。
- 输出:标准Mermaid源码,以及一段200字以内的修改说明,写清楚改了哪里、为什么这么改。
- 判定标准:分支有没有覆盖所有可能情况、结束节点是否可达、命名是否符合规范、渲染是否报错。
这一步想清楚,后面写规则才有依据。我见过不少人一上来就找模板抄,结果Skill在真实场景里完全不干活,因为规则里没写清楚"遇到模糊需求怎么办"。我会在规则里加一条:需求描述含糊时,先列出两种理解让用户确认,确认后再动手。这个"先问再答"机制极大降低了返工率。
3.2 搭建Skill目录:SKILL.md的骨架
目前主流的Skill实现有相对通用的目录规范,核心文件是SKILL.md。以一个标准的Skill目录为例:
flowchart-skill/ ├── SKILL.md # 主规则文件,Skill的核心 ├── references/ # 参考材料,比如绘制规范、示例图 │ └── bpmn-examples.md └── assets/ # 可选的模板、图片等SKILL.md由两部分组成:开头的YAML元信息(name、description)和正文规则。YAML的description尤其关键,它决定了Agent在什么场景下主动调用这个Skill——我写的是:当用户要求创建或修改流程图、时序图、BPMN图、系统流程图、算法流程图时,使用本Skill。这样每次提到"流程图",Agent都会自动加载它。
3.3 把流程图专业知识写进规则
SKILL.md的正文是灵魂。这里贴一个我自己在用的骨架,重点看规则如何约束Agent行为:
--- name: flowchart-modifier description: 创建或修改Mermaid格式的流程图/BPMN/算法流程图/系统流程图 --- # 流程图修改Skill ## 角色 你是资深流程架构师,擅长把业务描述转成精确的流程图文本。 ## 输入处理 1. 收到需求后,先判断流程图类型:BPMN业务流程图、系统流程图、算法流程图、时序图。 2. 若需求有歧义,列出2-3种理解,让用户确认后继续。 3. 提取关键信息:角色/泳道、节点、判断条件、分支路径、开始和结束节点。 ## 输出规范 - 一律输出Mermaid语法,禁止输出图片或伪代码。 - 节点命名用中文,判断条件必须写成问句。 - 每个分支路径必须有明确的路径标签。 ## 绘制规则 - 业务流程图优先使用BPMN式表达:泳道用subgraph表示,网关用菱形判定。 - 算法流程图必须包含开始/结束节点,循环结构标注循环条件。 - 系统流程图需区分外部实体、处理过程、存储。 ## 完成动作 输出修改后的完整Mermaid源码。 附带50-200字修改说明。 最后给出渲染方式建议(如:文本保存为.md后可直接预览)。这份规则初看平平无奇,实际用起来会发现它把很多模棱两可的地方堵死了。举个例子:不写"判断条件必须写成问句",Agent输出的判断节点经常是"登录成功与否"这种半吊子写法,渲染出来很怪;写了之后,输出稳定变成"登录成功?"。不写"分支路径必须有标签",箭头就是裸的,读者根本不知道该往哪走。
我强烈建议在references目录里放一份你自己的案例集,比如把历史上改得好的流程图Mermaid源码存下来,Agent生成时会自动参考。相当于给新员工看老员工的作业,比纯讲规则见效快得多。像求最大公约数的辗转相除法、输入10个数求最大值这类算法流程图,核心是要写出完整的"开始—判断—循环—结束"结构,这些都可以沉淀成示例。
4. 实战演练:一条指令改完用户管理模块流程图
4.1 原始需求:登录锁定策略变更
下面跑个真实场景。假设你现在手上有一份用户管理模块的系统流程图,节选部分长这样:
flowchart TD A[开始] --> B[进入登录页] B --> C{输入账号密码} C --> D{校验成功?} D -->|是| E[进入用户中心] D -->|否| F[提示登录失败] F --> B这时候产品经理过来说:"登录连续失败5次,账号锁定30分钟,锁定期间提示稍后再试,另外加一个管理员手动解锁的入口。"
如果按老办法,你打开图形工具,找到"提示登录失败"节点,开始拉新的分支:加一个计数器、加一个判断、加一个锁定状态、加一个管理员操作入口。你一边拖一边发现画布不够用,连线交叉了五次。这还没算产品中间变卦——"还是锁定15分钟吧",你就得再来一次。
4.2 一条指令触发的完整处理链路
现在用刚才的Skill,只需要在对话里发一条指令:"按需求修改用户管理模块流程图:连续失败5次锁定账号30分钟,锁定期间提示稍后再试,增加管理员手动解锁入口。"
Skill的处理链条是这样的:
第一步,它判定这是"系统流程图",自动加载Mermaid绘制规则。第二步,它理解变更点:需要一个"失败次数计数"、一个"是否达到5次"判断、一个"锁定状态"节点、一个"管理员解锁"分支。第三步,它直接修改源码——改的是文本,所以不存在布局问题。产出结果类似:
flowchart TD A[开始] --> B[进入登录页] B --> C{输入账号密码} C --> D{校验成功?} D -->|是| E[进入用户中心] D -->|否| F[失败计数+1] F --> G{连续失败次数≥5?} G -->|否| H[提示登录失败] H --> C G -->|是| I[账号锁定30分钟] I --> J[锁定期间提示稍后再试] J --> K{是否有管理员操作?} K -->|手动解锁| L[解除锁定] L --> B注意看变化:原来的"提示登录失败"变成了"失败计数+1"和分支判断,新增了锁定和解锁节点,每个分支都带了清晰的路径标签。整个修改过程不需要任何人去拖动节点。
4.3 改完之后,凭什么不再崩
这个例子里,我特别想强调一个细节:这条指令有价值,是因为Skill把"规则"和"动作"分离了。需求改10次,Skill就改10次文本;每次改完都能diff,每次都能回滚,每次生成的新图都和旧图结构一致。
而且随着你积累了更多图纸,站在全局看,用户管理模块、订单模块、权限模块的流程图风格会高度统一——因为都是同一个Skill按同一套规范产出的。这在以前靠人肉拖拽的图形工具时代是不可想象的。团队里来新人,一周内就能看懂所有流程;要是换了个图形工具画的图,新人光对图例就得研究半天。
注意:场景里的流程图保持文本形态,不是说完全不用图形工具了。渲染看图、写方案文档、跟业务评审,都需要图形。我的习惯是:文本源码入库管理,图形只是"编译产物",两头的好处都拿到。
5. 踩坑实录:Skill不听话时,我的排查套路
5.1 Skill输出不符合规范:先写死一段自检清单
我自己最初写Skill时的最大坑,是Agent偶尔不按规则出牌——该写问句的写成陈述句,该加标签的没加,分支漏了一个。后来我在SKILL.md里加了一个自检固定动作:输出前逐项检查分支覆盖率、节点命名词性、渲染语法。把自检写进规则外层之后,几乎不再出现规范性返工。
具体做法是在规则里加一条:"输出前必须逐项确认:所有路径是否有标签;判断节点是否为问句;是否有孤立节点;是否缺少根节点。把确认结果附在输出末尾。"这就相当于给Agent装了一个出厂质检环节,话多但管用。
5.2 Mermaid渲染报错:三类高频问题
渲染报错是另一个高频坑。就算Skill生成很规范,手残脑补的Mermaid代码也会出问题。实测下来高频报错就三类:
| 报错现象 | 最常见原因 | 排查办法 |
|---|---|---|
| 节点内容里的英文冒号或括号导致解析失败 | 被Mermaid当成语法符号 | 内容里的英文符号改成中文符号 |
| 找不到节点 | 节点ID带连字符或中文,引用时没带引号 | 节点ID用大写字母或数字 |
| 分支标签乱掉 | 标签里用了中文标点 | 路径标签统一用双引号包裹 |
这里也提醒一下:如果用的是本地命令行渲染,优先在渲染前跑一遍语法校验;在线预览器可以直接看到报错定位。改文字比改图形靠谱的地方在于,报错会精确告诉你哪一行出了问题,而不是让你在画布里瞎找。
5.3 类型判断错误:强制"先问再答"
还有一个更隐蔽的坑:你让Skill画"用户管理流程图",它可能直接给你画一张业务泳道图,但你要的其实是系统交互时序图。为避免这个问题,我在规则里加了一个"类型确认"前置步骤:动手前先判断图类型,如果跟用户描述不一致,必须追问一次。这样虽然每次多一轮对话,但大幅降低了跑偏概率。
另外值得写清楚的是"业务流程图"和"系统流程图"的区别。很多同事以为它们一样,其实一个画角色和业务活动,一个画系统组件和数据流。规则里不给明确的区别说明,Agent产出的图很容易不伦不类。这些细节都是实际跑需求时被逼出来的。
6. 让Skill从能用变好用:我常用的几个进阶玩法
6.1 接入渲染管线:改完文字自动出图
如果你的工作流里已经用了文本化流程图,可以考虑把Skill再接一层自动化:改完源码后,直接用命令行渲染成SVG或PNG,放到文档或知识库里。我在自己的项目里写了个小脚本:Skill输出Mermaid源码后,自动调用渲染,产出图片并更新到对应文档页。这样业务侧同事看到的永远是"图",但底层驱动是文字,两边都满意。
有人会问,那这跟"纯文本修改"不是矛盾了吗?毕竟用户要看的还是图。其实不矛盾——修改入口在文字,展示出口在图,两者各司其职。真正的价值在协作链路里:所有变更都有记录可追溯,但业务同事拿到的依然是一张能直接评审的图。我试过把图嵌入内部wiki页面,每次改完文字后图片自动刷新,连手工上传都省了。
6.2 团队护栏:把规范和知识库固化进Skill
用得越久你越会发现,Skill本质上是一个团队知识的沉淀容器。把我团队的业务规则写进references:哪些流程必须设审批节点、哪些异常分支必须画出来、命名风格用什么。Skill一更新,全团队画图标准同步更新。
我实际做法是:在项目里维护一份rules.md,里面是团队这半年评审中发现的常见绘图问题,定期整理进references目录。新同学解需求前,先让Skill加载这套规范,产出的图基本一次过审。这比开绘图规范培训会有效率得多。
6.3 从"改流程图"到"改文档":Skill的复用思路
最后分享一个我自己的体会:流程图Skill的思路完全可以复制到别的场景。写代码有"lint规范"、写接口有"API设计规范"、写需求文档有"PRD模板",这些本质上都是SOP,都可以做成Skill。比如写一个"需求文档Skill",让它每次都按公司模板输出、自动检查遗漏字段;写一个"数据库设计Skill",让表名和字段约束自动符合团队规范。
这些通用的套路是我觉得Skill真正有后劲的地方:它不解决某一张图的问题,它解决的是"怎么让AI输出稳定可复用的高质量内容"这个系统性问题。
最后再分享一个小技巧:Skill里的规则不要一次写太满。写得太细,Agent会拘泥于字面,遇到新场景反而僵硬;先把最影响质量的20%规则写清楚,跑几轮真实需求后再迭代。我自己第一个版本的Skill只有10行核心规则,现在已经迭代到60多行,每一次迭代都是被真实需求逼出来的。
说到底,流程图改到崩溃的根源,是把"内容"和"呈现"绑死在了一起。Skill做的事情很简单,就是把两者拆开,让内容回归文字,让呈现交给渲染器。这个思路我用了将近两个月,最大的感受是:以前最怕产品说"再改一下流程",现在这句话反而是最省事的需求——一条指令的事。希望这套玩法也能帮到你。