
干这行久了你会发现画流程图这事特别反直觉越是复杂的逻辑越不能用鼠标一点点拖框框。我最近折腾出一个工作流直接在命令行里敲一句话让AI把流程图画好PDF、PNG、SVG一起出整个过程不用开一张画布不用截一张图体验和“写代码”一样顺滑。这个方案的核心就三个词AI、命令行、流程图。适合谁用日常要画业务流程图、算法流程图、系统时序图的产品经理、研发、测试、运维都算尤其适合那些“脑子里的流程比画出来的快”的人。1. 为什么非要用命令行画流程图三点真实痛点1.1 截图、点击、拖拽这条链路到底慢在哪传统画流程图的方式流程大致是这样先在脑子里把节点和分支理清楚然后打开绘图工具创建画布拖出一个矩形双击改名再拖一个菱形再拖一条带箭头的线把两个图形连起来。如果中间有几条回路、几个判断条件还需要反复调整连线位置对齐、改颜色、调字体。这套动作用熟了其实也不慢但它有一个致命问题思考和表达是割裂的。你脑子里想的是“如果库存不足就走补货分支补货失败转人工”手头却在做“拖拽、改名、拉线”这类机械动作。等图终于画出来脑子里原本清晰的逻辑反而被工具操作打断了好几回。更别提评审会上需求一变整张图要当场重画那个场面真的让人血压升高。截图驱动的方式也好不到哪去。以前很多人是让AI先把流程想好然后用自然语言描述自己照着文字去截图、去绘图。AI负责“想”人负责“画”AI的产出实际上被白白浪费在了中间环节。截图本身也解决不了“怎么把AI的答案变成一个可编辑的文件”这个问题。整个链路里人的时间几乎全花在工具操作上而不是逻辑判断上。我以前画一张中等复杂度的时序图从构思到定稿最快也要二十分钟画完眼睛都是花的。现在同样的内容从敲命令到拿到图片基本控制在两分钟内大部分时间还不占用我的手。1.2 AI加命令行这套组合解决的其实是“表达层”的问题仔细想想画流程图的本质是什么是把一段逻辑结构可视化。逻辑结构是什么是节点、分支、条件、循环、并行。这些内容用文字就能描述得很准确比如“A发生判断B如果B为真走C为假走DC完成后回到A”。问题在于文字和图形之间缺少一座桥。AI刚好能补上这座桥的前半段它能从一句口语描述里提取出完整的逻辑结构还能用标准格式把结构写出来。而命令行工具能补上后半段把这份结构化文字直接渲染成图片甚至按需批量生成不同格式。所以这套组合真正闪光的点在于人和AI都在做自己擅长的事人提供意图AI补全结构机器完成渲染。我只需要告诉AI“我要一张用户登录的流程图”剩下的事情节点有哪些、判断分支怎么画、连线怎么连AI全包了。命令行只是把这些环节拧成一条流水线。这种工作方式还有额外的好处命令是可以回放的。今天画了一张订单流程图改一行描述就能生成一张售后流程图。传统画图软件里你把节点拖到新位置还得重新理一遍连线现在完全不需要。1.3 这套方案有边界别指望它什么都能画得说句公道话。命令行加AI的模式最适合的是逻辑清晰、结构为主的图业务流程图、算法流程图、模块关系图、时序图、状态机图。这些图的信息密度主要在“节点之间的关系”上AI生成结构化文本非常擅长。但它不适合精美度要求很高的场景比如对外宣传用的架构图、带大量UI元素的手绘图、需要精细排版的长图。这类图本质上是平面设计不是逻辑表达AI生成的结果你会嫌它太素不如用专业绘图工具慢慢打磨。另外如果你的团队有固定的画图规范比如必须用某套企业模板、特定颜色体系、流程图必须手绘风格那也得评估一下。自动生成的图是标准风格不一定贴合你们内部的形式要求。我的建议是日常脑暴、评审、写技术方案、做PPT配图直接用对外正式交付物生成之后再花两分钟微调也来得及。2. 一行命令的完整解剖从AI生成到图片落盘2.1 先把“一行命令”拆成四个零件所谓一行命令本质上是把四件事串在一起调用AI接口、传递提示词、接收返回内容、交给渲染工具出图。很多人一听“一行命令”以为是什么魔法脚本实际上拆开看非常朴素。第一件是调用AI。流程图上端用的是OpenAI兼容接口curl直接POST。你当然可以用Python、Node写脚本但论轻巧和透明curl是命令行里最直接的方式一个请求发出去拿回JSON。第二件是组织提示词。提示词决定了AI返回什么格式的内容这一步比选哪个模型还重要。第三件是解析响应。AI返回的内容包在JSON里通常还带着 markdown 之类的代码块标记需要抽出来。jq是这里最顺手的工具专门处理JSON。第四件是渲染。这里的渲染工具是mermaid-cli命令是mmdc它能把文本格式的流程描述渲染成图片。这四个零件在一条命令里用管道和分号串联。管道传数据分号做顺序控制。平时我还会把它们封装成一个函数写在shell配置里这样真正敲出来的命令就只剩一句ai_flow 这是我要画的流程描述。到这里你应该能看出来这个方案没有什么高深的技术全是现成工具的组合。但它解决了一个很实际的问题把“和AI对话”这件事从浏览器里搬到终端里并且让结果直接物化为文件。2.2 环境准备五分钟把工具装齐先说装环境。整个链路依赖三个核心工具curl几乎所有系统和Git Bash都自带、jq、mermaid-cli。curl和jq在macOS和Linux上很常见没装的用包管理器补一下即可。Windows用户需要注意一个小点如果你用的是PowerShellcurl默认是Invoke-WebRequest的别名行为完全不同。我建议Windows用户直接装Git Bash来跑或者用WSL省掉一堆转义和引号的问题。后面的命令示例都以 Bash 为准。mermaid-cli 是一个 npm 包安装命令是npm install -g mermaid-js/mermaid-cli装完之后执行 mmdc --version 看到版本号就说明渲染工具就绪了。这个工具本质上是启动一个无头浏览器把文本渲染成矢量图所以它依赖Chromium。如果你在服务器上安装缺了系统依赖会报错常见的是缺字体库和libnss3用包管理器装上即可。用容器跑的话镜像里直接加中文字体很重要不然后面渲染出来的图片里中文全是方块。jq的安装没有什么讲究Linux用apt或者yummacOS用brewWindows下放进PATH就行。我个人的建议是尽量把 jq 和 curl 也一起放进你要写脚本的机器里不要只在某一台机器上配好不然换台电脑整套流程又得重新搭。2.3 密钥与安全别把令牌写死在命令里调用AI接口必须要密钥但要养成一个习惯密钥永远不写进命令文本用环境变量引用。这样做有两个好处第一是安全命令会留在shell历史里要是含令牌被别人翻出来那就等于直接泄漏第二是方便换个账号或者换套环境只要改环境变量脚本本身不用动。具体做法是在shell配置文件里加一句export LLM_API_KEY你的密钥然后命令里用 $LLM_API_KEY 引用它。按上面的写法密钥只是出现在当前shell会话里history文件不会记录export的赋值内容。如果你实在要落盘就把这只写在只有自己能读的配置文件里并且加上600权限。另外命令行会被系统日志、监控脚本记录有条件的话用密钥管理服务去动态拉取没条件就用环境变量这一步真的别偷懒。2.4 最小可用版本一条命令跑通全流程下面这串命令我留了一个最简版本适合第一次测试。它的作用是把一句话描述发给AI然后提取返回内容存成文件再渲染成PNG。你先拿它跑通再谈扩展。curl -s https://api.openai.com/v1/chat/completions \ -H Authorization: Bearer $LLM_API_KEY \ -H Content-Type: application/json \ -d { model: gpt-4o-mini, messages: [ {role: user, content: 生成一个用户下单的流程图节点要包含登录、选品、下单、支付、确认 } ] } | jq -r .choices[0].message.content | sed /^\\\/d flow.mmd mmdc -i flow.mmd -o flow.png我解释下这里面的几个关键点。curl的 -s 是静默模式不带进度条-H 是请求头-d 是请求体。jq -r 是把JSON里的纯文本取出来-r 表示raw输出不加的话字符串会带引号。sed那一步是去掉AI返回内容里的代码块围栏。注意我这里用的sed模式里引号里的反引号在Bash的普通字符串里不需要转义但如果你把这个命令粘到Markdown里记得保持单引号防止shell做命令替换。如果一切正常你会在当前目录看到一个 flow.png。第一次跑通的时候你会有一种“这居然就搞定了”的感觉但实际上后面还藏着一堆可以细调的地方。3. 实操过程三类流程图的完整落地记录3.1 业务流程图从口述需求到成品图我先拿一个最常见的业务场景来演示仓库发货流程。需求描述只用一句话用户下单仓库接收到订单后检查库存有货就打包出库没货就通知采购采购完成后再次检查库存最终发货。我在命令行里敲的就是这条ai_flow 用户下单后仓库发货的业务流程接收订单、检查库存、有货则打包出库无货则采购补货采购完成后回到库存检查全部完成后发货封装好的函数会自动在提示词里要求AI用标准流程描述并把所有条件分支和回环都体现出来。几十秒后当前目录下就生成了流程图。我在编辑器里打开能清晰看到几个关键分支库存检查是一个判断节点分出两条路径补货完成后有一个回到检查节点的回环。这一步我特别想提醒的是流程描述越口语化AI出图越稳。不用刻意说“决策节点”“分支路径”这些术语就按你脑子里想事情的方式说清楚“什么情况下怎么走”AI会把它翻译成合适的图结构。描述里最忌讳的是省略默认情况比如只说“有货就发货”不补“没货干嘛”AI虽然能脑补但这种补出来的逻辑未必是你想要的回头检查反而更费劲。3.2 算法流程图给一段代码快速出结构图第二个场景更偏技术从一段算法逻辑生成流程图。比如给AI一段排序代码的描述让它画算法流程图。这里我一般用另一套提示词要求AI按算法流程图的标准结构输出开始、输入、循环判断、递归调用、结束并且把所有循环和条件路径标清楚。实际操作中我经常给AI的直接不是文字而是一小段伪代码甚至真实代码。AI能把代码里的 if、for、while 结构识别成流程分支。这个场景特别适合做技术方案评审前的自我检查让AI把代码的逻辑结构拉出来有时候真能发现你没注意到的分支。我这里实测的一个例子输入一个数组要求找出重复元素并统计次数。AI生成的流程里包含了初始化、外层循环、内层判断、计数累加、输出结果几个节点连“遍历到末尾”的退出条件都标注了。比起自己在白板上推演这种方式更像是在“读”代码的执行路径。3.3 用户管理模块设计把系统模块画成图第三个场景是偏系统设计的图比如用户管理模块的功能流程图。这类图往往是给开发评审用的不要求特别炫但要逻辑完整。描述里要尽量把模块涉及的操作列全用户注册、信息校验、登录鉴权、角色分配、权限校验、账号锁定、注销。我用的描述是“画用户管理模块的流程图包括注册、登录、权限校验、角色分配、账号管理五个子模块重点画出登录鉴权和权限控制的分支。”生成的图上登录鉴权后面接了一个判断通过进入主流程失败提示错误并返回登录页权限控制分支则区分管理员和普通用户。这种带模块拆分的图特别能体现AI的价值因为自己画的时候很容易漏节点AI会把常见的子功能补出来你再人工增删等于有了一个初稿保底。3.4 格式问题SVG、PNG、PDF一次全出渲染格式这件事很多人容易忽略。mermaid-cli默认能输出PNG和SVG两个格式各有用途PNG适合放进文档和PPTSVG适合网页和矢量编辑PDF适合打印和交付。我平时会要求组件一次性生成多个格式省得来回跑命令。命令的扩展也不难就是在mmdc那一步多加几个参数mmdc -i flow.mmd -o flow.svg mmdc -i flow.mmd -o flow.png mmdc -i flow.mmd -o flow.pdf这里有个小坑如果流程图比较大比如几百个节点PDF生成过程会明显变慢而且PDF分页布局有时候要手动调不能全靠默认。所以我通常默认只生成PNG和SVGPDF看心情。SVG这点我很喜欢它是矢量的放大不糊嵌到内部技术文档里显示很干净。4. 提示词设计让AI不废话直接出图4.1 为什么AI经常“答非所问”先回到一个容易被忽略的问题同样一个需求有的人让AI出图一路顺畅有的人让AI画流程AI却回了一段大道理或者画成了时序图。差别基本全在提示词。AI的默认行为是“回答问题”而不是“执行任务”。你说“帮我画一个登录流程”它可能真的给你描述一遍流程或者用文字列表的形式输出因为它觉得这样是在回答你。只有当你明确约定输出格式它才会按结构化文本的规范生成。我用下来最稳的思路是给AI一个角色指令加格式约定告诉它你是专业的流程架构师你必须调整优先级先输出完整逻辑然后配上结构文本其他一切文字说明都不要。这样它就不会在生成的流程里夹带一堆解释。4.2 一个可复用的提示词模板与解析下面这个模板我实际用了大半年改过几轮稳定性很高你可以直接抄走你是一个资深流程架构师。请根据我的描述生成一个流程图的文本描述。 要求 1. 严格使用标准流程图语法。 2. 节点用简洁中文不要加解释性文字。 3. 条件分支要有明确判断依据。 4. 循环需要标出入口和出口。 5. 只输出结构代码不要任何解释和围栏以外的内容。 我的描述是{{在这里粘贴你的需求}}这里面的关键细节我逐个拆解。“节点用简洁中文”是为了保证渲染出来的图不臃肿节点文字太长了会把图拉得很宽。“条件分支要有明确判断依据”是为了让条件节点旁边能看清“是/否”背后真正的判断条件。“循环需要出口”这点尤其重要很多AI生成的图循环看起来像是无限循环缺少返回条件的描述拿到流程图里就有问题。最后一个要求“不要任何解释”是血泪教训。AI默认喜欢在代码前后加“好的这是你需要的流程描述”然后才给代码。这些废话在终端渲染时不会造成致命问题但会污染文件还得用sed过滤不如从一开始就让它闭嘴。4.3 温度参数与上下文对生成质量的影响除了提示词文本调用AI接口时还有一个参数值得花时间调temperature也就是温度。这个参数控制AI输出的随机性取值范围一般是零到二之间。数值越低输出越稳定越倾向于沿用常见结构和标准表达数值越高输出越多样但结构出错的概率也越高。画流程图这件事我要的一直是稳定。所以我所有接口调用都设了比较低的温度通常是0.2。设成0虽然最稳定但有时候会有“过于规范而缺少灵活性”的问题比如你给它一个模糊描述它可能只会按最常规的模板套。0.2是我的习惯值它能保证大部分输出在结构上是严谨的。还有一点是上下文长度。如果你在同一个对话里连续让AI画了好几张图前面几张图的风格会影响后面。这是好事可以用它来统一多张图的风格但也有翻车的时候比如它会把上次图里的节点内容混进来。所以我每条命令实质上都是独立请求不带对话历史只靠提示词里的描述。这样做牺牲了一点点上下文感换来的是每次结果的不可预测性大大降低。5. 常见问题与排查技巧实录5.1 高频问题速查表我把这半年用下来踩过的问题整理成一张表你在跑同一个流程的时候可以对照排查问题表现根本原因解决方案渲染结果为空白AI返回的内容不是合法结构文本把命令输出的文件打开检查找AI要规范结构中文全是方块无头浏览器缺中文字体安装字体包或用puppeteer配置指定字体路径报找不到 mmdcnpm全局目录不在PATH用 npx mmdc 调起或把npm全局目录导出到PATHcurl请求超时网络访问慢或接口地址不对检查网络出口、确认接口地址支持当前区域输出带一堆markdown标记没有要求AI去掉围栏sed过滤或在提示词里写明“不要输出围栏”图片布局混乱节点重叠节点太多默认布局算法不理想切换布局方向手动分组或拆成子流程命令卡住不退网络请求没有设置超时给curl加 --max-time给mmdc配合超时控制这些问题里我最想再展开说两个。第一个是中文乱码。这个问题在不同环境下表现不一样macOS上通常没事Linux服务器上大概率遇到。解决路径是给系统装中文字体并确保Chromium能找到。你可以先跑一下 fc-list :langzh如果没有输出任何中文字体就安装 wqy-zenhei 或 noto-cjk。装完之后如果还乱就需要微调无头浏览器的配置了。第二个是布局混乱。当节点特别多的时候默认布局会很难看。这时候我一般会在提示词里要求AI“把主流程放在左侧异常分支放在右侧”虽然AI不能直接控制渲染坐标但结构顺序变了布局也会跟着改善。更靠谱的做法是手动把大图拆成几个子流程每个子流程单独生成最后再用主图把子流程串起来。5.2 现场还原一次失败渲染的完整排查过程有一次我跑完命令发现生成的PNG尺寸很大但图的内容基本没法看所有节点叠在一起。我当时第一反应是“AI抽风了输出不合法”结果打开flow.mmd文件一看内容完全正常节点、连线、分支都在那问题就出在渲染环节。我先换了一种布局方向也就是在提示词里要求AI调整为从上到下还是从左到右不行再检查字体没问题最后定位到是无头浏览器窗口尺寸太小渲染大图的时候默认视口只有800乘600图形全部挤在一起。解决方式是给mmdc增加参数或者通过配置文件把视口调大。这一步操作起来就是写一个puppeteer配置指定window尺寸和字体路径。真实排查过程中我强烈建议先把中间的 .mmd 文本文件打开看一遍它是AI原始输出和渲染结果之间的“断层扫描区”。绝大部分问题只要看这个文件就能定位到是AI的问题还是渲染的问题根本不用瞎猜。5.3 三个习惯让我少踩无数坑第一个习惯是每条命令都输出到独立目录。我把每个流程的文件都放在自己单独的文件夹下避免mmd文件重名覆盖。一次评审会改了三版流程旧版还能找到回滚非常方便。第二个习惯是给文件命名时带日期和版本号。我的习惯是 flow-20250101-v1.png 这样的格式看着不高级但真到需要给同事解释“我改了什么”的时候非常有底气。第三个习惯是保留生成文本文件。很多人跑完命令就只留下PNG把flow.mmd删掉感觉很干净但下次要改节点间距、调整分支还得重新让AI生成一遍。文本文件就是流程图的源文件留着它图片随时能重新渲染而且能直接用文本编辑器批量替换节点名称这可比点鼠标快多了。最后补一个我自己的使用体会。这套工作流用顺之后我不光把画图这件事交给了命令行连“要不要画图”的判断标准也变了。以前是先画图再检查逻辑现在是先让AI把逻辑理成结构文本我看着顺眼了再出图。很多时候甚至不用出图直接看文本结构就能发现需求里的漏洞。这个习惯也是用命令行画图之后才慢慢养成的。