1. 从“一句话”到“一张图”:为什么我们需要自动化的业务流程图
“能不能用一句话,就把这个业务流程给我画出来?”
这句话,我相信很多产品经理、技术负责人、甚至一线研发同学都说过,或者在心里想过。尤其是在需求评审、方案设计、或者给新人讲解复杂业务逻辑的时候,面对白板或者绘图工具,我们常常需要花费大量时间,去梳理节点、拖拽图形、调整连线、美化布局。这个过程,不仅耗时,而且容易打断思路。更关键的是,当业务逻辑需要频繁调整时,维护这些图表的成本会急剧上升。
这就是我决定动手折腾“一句话出流程图”这个想法的起点。我的核心目标很简单:让描述业务逻辑的自然语言,直接、快速、准确地转化为结构化的流程图。这听起来像是魔法,但拆解开来,无非是三个核心环节:理解、转换、呈现。理解,就是让机器“听懂”我们描述业务的人话;转换,就是把听懂的逻辑,映射成流程图的标准元素(开始/结束、判断、处理、子流程等);呈现,就是把这些元素,按照合理的布局画出来。
市面上其实已经有不少类似的工具或尝试,比如一些AI绘图工具集成了流程图生成,或者某些低代码平台内置了基于模板的流程设计。但我在实际体验后,发现几个痛点:要么生成的结果过于死板,只能处理极其标准的句式;要么对中文业务描述的语义理解不到位,经常把“如果用户登录成功”和“当用户登录后”识别成完全不同的逻辑;要么就是生成的图布局混乱,根本没法看。
所以,我的方案没有选择从零训练一个大模型,而是走了“组合创新”的路子:用OpenClaw作为理解自然语言的“大脑”,用Skill作为定义和执行绘图规则的“双手”。OpenClaw 在中文语义理解和结构化信息抽取上表现相当不错,而 Skill 则提供了灵活、可编程的图形生成能力。把它们俩“捏”在一起,就构成了一个能听懂人话、并立刻动手画图的“自动绘图员”。
接下来,我就详细拆解一下,这个“自动绘图员”是怎么搭建起来的,其中有哪些关键的技术选型思考、具体的实现步骤,以及我踩过哪些坑、总结出哪些能让它更好用的经验。
2. 技术栈选型:为什么是 OpenClaw + Skill?
在决定技术方案时,我评估了几个方向。最直接的可能是用 OpenAI 的 GPT 系列 API,让它直接生成 Mermaid、PlantUML 这类文本绘图语言的代码。这条路子快,但问题也很明显:首先,成本不可控,尤其是对于需要频繁调用、内部使用的工具;其次,生成结果的稳定性和格式一致性是玄学,今天能生成完美的 PlantUML,明天可能就给你一段无法解析的胡话;最后,它缺乏对“绘图”这个动作本身的可控性,比如我想严格规定某种类型的节点必须用蓝色菱形,GPT 可能不会听我的。
因此,我决定将“理解”和“绘图”解耦,并寻找在各自领域更专精、更可控的组件。
2.1 OpenClaw:专精中文信息抽取的“业务逻辑解析器”
OpenClaw 并不是一个尽人皆知的名字,它更像是一个在特定领域内口碑不错的工具。它的核心能力是给定一段中文文本和一个预定义的 Schema(模式),它能精准地抽取出结构化的信息。举个例子,你定义好一个“业务流程”的 Schema,包含“步骤名”、“执行角色”、“判断条件”、“下一个步骤”等字段,然后把一段需求描述扔给它,它就能输出一个结构化的 JSON 对象,清晰地标明了每个步骤及其关系。
这正好击中了我们的需求。我们不需要一个能写诗、能聊天的通用 AI,我们只需要一个能精准理解业务句子中“谁在什么条件下做什么,然后下一步是什么”的专门工具。OpenClaw 基于微调的中文预训练模型,在这类信息抽取任务上,比通用大模型表现更稳定、更准确,而且因为是本地或私有化部署的方案,数据隐私和调用成本都更友好。
我的使用方式是,预先定义好几个常见的业务流程模式 Schema:
- 线性序列模式:用于“先A,然后B,最后C”这类描述。
- 条件分支模式:用于“如果X,则Y,否则Z”这类描述。
- 并行处理模式:用于“同时进行A和B”这类描述。
- 循环模式:用于“重复执行X直到Y条件满足”这类描述。
OpenClaw 会先对输入的一句话进行意图分类,匹配到最合适的模式,然后再基于该模式进行细粒度的信息抽取。这样,一句“用户提交订单后,系统检查库存,如果充足则扣减库存并生成运单,否则通知用户库存不足”,就会被解析成一个包含开始、处理(检查库存)、判断(是否充足)、两个分支(扣减库存生成运单、通知库存不足)、以及隐含结束的树状结构对象。
2.2 Skill:不只是一个绘图库,而是可编程的“图形引擎”
绘图库的选择很多,从前端经典的 D3.js、mxGraph,到服务端的 Graphviz、Cytoscape。我选择 Skill,是因为它解决了一个关键问题:将绘图逻辑代码化、模块化。
Skill 允许你用一种声明式的方式定义图形元素(节点、连线)的样式、布局规则以及它们之间的逻辑关系。更重要的是,它支持“技能”(Skill)的概念,你可以把“画一个审批流程”、“画一个数据流图”这样的复杂绘图逻辑,封装成一个独立的、可复用的、可配置的技能模块。
这意味着什么?意味着我不需要每次都写一堆冗长的代码去计算节点位置、画路径、调样式。我只需要写好一个“业务流程图”技能,这个技能内部定义好了:
- 开始/结束节点用椭圆,判断节点用菱形,处理节点用矩形。
- 节点之间的连线要带箭头,条件分支的连线要打上“是/否”标签。
- 使用层次布局算法,让流程图自上而下清晰展开。
- 同一层级的节点尽可能对齐。
然后,我只需要把 OpenClaw 解析出来的结构化数据(JSON),按照这个技能要求的输入格式喂给它,它就能自动调用底层的布局算法和渲染引擎,生成一张既符合规范又美观的流程图。如果我觉得菱形不好看,想换成六边形,我只需要修改技能模块里的一个配置项,所有生成的图都会统一改变。
这种“绘图逻辑即代码”的方式,带来了极大的灵活性和可维护性。当业务方提出“能不能把涉及财务的节点标成红色”这种新需求时,我只需要在技能里增加一条基于节点类型的样式规则即可,无需改动核心的解析和生成链路。
2.3 组合的化学反应:1+1>2
单独看,OpenClaw 解决了“听懂”的问题,Skill 解决了“画好”的问题。但它们的组合,产生了额外的价值:
- 流程标准化:通过 Skill 的技能模板,确保了公司内部所有自动生成的业务流程图,其图形规范、样式、布局都是统一的,避免了“千人千图”的混乱。
- 逻辑可验证:OpenClaw 解析出的结构化 JSON,本身就是一份机器可读的业务逻辑描述。我们可以很容易地对这个 JSON 进行校验,比如检查是否有无法到达的节点(死循环),或者是否存在没有出口的判断分支。这相当于在画图之前,就对业务逻辑进行了一次静态检查。
- 迭代效率高:当生成的图不准确时,我们可以清晰地定位问题出在哪一环。是 OpenClaw 的 Schema 定义不够覆盖这种句式?还是 Skill 的技能布局规则在这种复杂分支下会重叠?定位快,修改也快。
这个技术选型,本质上是在精度、可控性、成本之间找到了一个适合内部工具场景的平衡点。
3. 核心实现链路拆解:从文本到图形的流水线
整个系统的工作流,是一条清晰的流水线。下面我以一个具体的例子来贯穿说明。假设输入一句话是:“客户在APP提交退款申请,系统首先验证订单是否在可退款期内,如果是则自动审核通过并原路退款,否则转人工客服审核。”
3.1 第一步:自然语言预处理与意图识别
原始输入文本首先会经过一个简单的预处理环节,包括去除无意义符号、纠正明显的错别字(可以用一个简单的词典映射)、以及分句。虽然我们说是“一句话”,但用户实际输入可能是一个长句,包含多个逗号分隔的短句。预处理会将它们初步分离。
接着,处理后的文本会送入 OpenClaw 的意图分类器。我们预先训练好的分类器会判断这句话最符合哪种业务流程模式。对于上面的例子,分类器会识别出其中包含明显的条件逻辑(“如果是…否则…”),因此将其归类到“条件分支模式”。
实操心得:意图分类的准确性至关重要。初期我们只定义了四五种模式,发现很多复杂句子分类不准。后来我们增加了“混合模式”,并允许一个句子匹配多个模式意图,然后由后续的解析器进行融合。例如,“提交申请后,系统验证并同时通知卖家和买家”,这就包含了“线性序列”和“并行处理”的混合。我们的策略是,优先识别强信号词(如“同时”、“并行”),再处理弱信号。
3.2 第二步:基于 Schema 的结构化信息抽取
确定了“条件分支模式”后,系统会调用为该模式定制的 OpenClaw 抽取模型。这个模型背后有一个定义好的 JSON Schema:
{ "type": "object", "properties": { "start": {"type": "string"}, "condition": { "type": "object", "properties": { "description": {"type": "string"}, "judge_point": {"type": "string"} } }, "true_branch": { "type": "array", "items": {"type": "string"} }, "false_branch": { "type": "array", "items": {"type": "string"} }, "end": {"type": "string"} } }模型会努力将句子中的元素填入这个 Schema。对于我们的例子,它可能输出:
{ "start": "客户在APP提交退款申请", "condition": { "description": "系统验证订单是否在可退款期内", "judge_point": "是否在可退款期内" }, "true_branch": ["自动审核通过", "原路退款"], "false_branch": ["转人工客服审核"], "end": "流程结束" }这里有一个关键点:OpenClaw 的抽取不是简单的关键词匹配,它基于上下文理解。它能知道“自动审核通过”和“原路退款”是“真”分支下顺序执行的两个步骤,而不是两个独立的分支。
踩坑记录:初期 Schema 设计得太死板。比如,最初“true_branch”只定义了一个“action”字段。当遇到“则A并B然后C”这种描述时,信息就会丢失。后来我们将分支定义为步骤数组(
array),并允许嵌套。同时,我们为抽取模型提供了大量包含并列、递进关联词的训练例句,显著提升了其处理复杂句子的能力。
3.3 第三步:结构化数据到图形元素的映射
拿到结构化的 JSON 后,我们需要将其转换为 Skill 技能所能理解的“图形描述语言”。这一步是一个确定的转换规则,我写了一个转换器(Transformer)来完成。
转换规则示例:
start-> 创建一个类型为“start”的节点,内容为 start 字段的值。condition-> 创建一个类型为“decision”的节点,内容为 condition.description。true_branch数组 -> 为数组中的每个元素,按顺序创建类型为“process”的节点。这些节点与 decision 节点用“是”标签的连线连接,并且它们之间用顺序连线连接。false_branch数组 -> 类似,创建“process”节点,与 decision 节点用“否”标签的连线连接。- 最后一个处理节点,连接到
end节点。
转换器输出的,是一个符合 Skill 技能输入格式的配置对象。这个对象描述了有哪些节点、每条连线从哪个节点到哪个节点、以及每个节点和连线的类型、标签是什么。它不关心布局和样式,那是由 Skill 技能内部定义的。
3.4 第四步:Skill 技能执行与图形渲染
转换器输出的配置对象,被传递给名为“BusinessFlow”的 Skill 技能。这个技能内部封装了所有绘图逻辑:
- 节点样式映射:根据节点类型(start, end, decision, process),应用预定义的形状、颜色、边框样式。比如,decision 节点自动使用菱形、浅黄色填充。
- 布局计算:技能调用内置的层次布局算法(如 Dagre)。算法会根据节点间的连线关系,自动计算每个节点的位置,目标是使连线尽可能直、交叉尽可能少、整体布局紧凑且层次清晰。这一步完全自动化,无需手动干预。
- 连线绘制:根据连线类型(普通顺序流、条件流),绘制带箭头的贝塞尔曲线或直线,并在条件连线上添加“是/否”标签。
- 渲染输出:Skill 将计算好的最终图形,渲染成目标格式。在我们的实现中,主要输出两种格式:一是 SVG 矢量图,用于网页前端直接高清显示;二是 PNG 图片,方便插入文档或PPT。
至此,从一句自然语言描述到一张标准业务流程图的全过程就完成了。整个过程可能在几百毫秒到一秒内完成,真正实现了“一句话,一张图”。
4. 提升可用性的关键:处理模糊性与复杂逻辑
如果所有业务描述都像教科书一样规范,那这个世界就太美好了。现实是,用户的输入充满模糊、省略和隐含信息。让这个工具真正“可用”,而不仅仅是“可演示”,关键在于如何处理这些情况。
4.1 指代消解与信息补全
用户经常说:“提交后,它会先验证,如果通过就...” 这里的“它”指代什么?“通过”指代什么条件?这就需要指代消解和信息补全。
我们的策略是结合上下文和领域知识库。系统会维护一个简单的会话上下文(如果是多轮对话)和一个业务实体知识库(例如,在电商领域,“提交”可能指“提交订单”,“验证”可能指“验证库存”)。当 OpenClaw 遇到代词或模糊指代时,会尝试从上下文中找到最近的一个合适的主语或宾语进行关联。对于“通过”这类抽象词,我们会将其与当前环节最常见的判断条件进行关联,例如“验证库存”的“通过”自然关联到“库存充足”。
经验技巧:我们建立了一个可配置的“同义词与隐含逻辑映射表”。例如,当句子中出现“审核”时,映射表提示解析器,这里可能隐含一个“判断”节点,其两个分支可能是“通过”和“驳回”。这个表极大地提升了对口语化、非正式描述的解析能力。
4.2 嵌套与并行逻辑的处理
复杂的业务流往往是嵌套的:“如果A成立,则执行B;B完成后,若条件C成立,则执行D,否则执行E。” 这包含了嵌套的条件判断。
我们的 OpenClaw Schema 支持嵌套结构。true_branch或false_branch里的一个步骤,其本身可以又是一个完整的条件分支模式对象。转换器和 Skill 技能也需要支持这种嵌套。在图形上,这体现为一个子流程图或者一个更复杂的节点群组。Skill 的技能框架允许将一组节点和连线打包成一个“复合节点”,从而在布局上保持清晰。
对于并行逻辑,如“同时通知买家和卖家”,我们将其解析为在同一层级创建两个并行的“process”节点。Skill 的布局算法会尽可能将它们在同一水平线上对齐,并用不同的连线颜色或样式加以区分。
4.3 容错与交互式修正
完全准确的自动解析是理想,我们必须接受一定程度的错误率。因此,系统提供了“交互式修正”界面。
当流程图生成后,会以一个可编辑的图形界面呈现给用户。用户可以:
- 直接拖拽调整节点位置:如果自动布局不够理想,用户可以手动微调。
- 编辑节点文本:直接点击图形上的文字进行修改。
- 补充或删除节点/连线:通过简单的图形化操作添加新的步骤或判断。
- 重新生成:如果解析完全错误,用户可以稍微修改输入文本,再次生成。
所有在界面上的修改,都会反向同步更新到底层的结构化 JSON 数据。这意味着,用户既享受了自动生成的便利,又保留了最终的控制权和修正能力。这个“半自动”模式,在实际应用中接受度最高。
5. 从工具到能力:集成与扩展实践
做出一个能跑通的 Demo 只是第一步,把它变成团队内部甚至跨部门都能用的“能力”,还需要做很多集成和扩展工作。
5.1 多种集成形态
我们提供了几种集成方式,适应不同场景:
- 浏览器书签小工具:最简单的方式。用户将我们的工具页面保存为书签。在任何网页(如 Confluence 需求文档、JIRA Ticket)中,选中一段描述文本,点击这个书签,弹出小浮窗,选择“生成流程图”,图片就直接生成并显示,用户可以复制图片粘贴回文档。
- Confluence /飞书等办公套件插件:在 Confluence 编辑器中,增加一个“/流程图”的斜杠命令。用户输入“/流程图 客户提交退款申请...”,插件在后台调用服务,直接将生成的流程图图片插入到光标位置。
- API 服务:为其他内部系统(如低代码平台、测试用例生成系统)提供 RESTful API。其他系统只需要传入业务描述文本,即可获取流程图图片或结构化数据。
5.2 自定义技能与领域适配
“业务流程图”只是其中一个技能。Skill 的技能架构使得扩展变得非常容易。当其他部门的同事看到这个工具后,他们提出了新需求:
- 时序图技能:研发同学希望根据“用户点击登录,前端发送请求,网关鉴权,服务端查询数据库,返回结果”这样的描述,自动生成 UML 时序图。
- 架构图技能:运维同学希望根据“Web 服务调用 Auth 服务,Auth 服务读写 Redis 缓存和 MySQL 数据库”生成简单的组件架构图。
我们只需要:
- 为新的图形类型(时序图、架构图)设计对应的 OpenClaw Schema(例如,时序图需要抽取“参与者”、“消息”、“时间顺序”)。
- 训练或配置 OpenClaw 针对新 Schema 的抽取模型(如果与业务流程差异大,可能需要补充一些训练数据)。
- 开发一个新的 Skill 技能,定义时序图或架构图的图形元素样式和布局规则(例如,时序图的参与者垂直排列,消息水平箭头)。
很快,我们就拥有了一个“一句话生成多种技术图表”的工具集。这充分体现了 OpenClaw + Skill 这种解耦架构的扩展性优势。
5.3 效果评估与持续优化
如何衡量这个工具是否成功?我们设定了几个指标:
- 生成准确率:随机采样生成结果,由人工判断流程图是否准确反映了文本意图。我们初期准确率约70%,通过优化 Schema 和增加训练数据,半年后提升到了85%以上。
- 使用频率:统计 API 调用次数和各插件的活跃用户数。
- 用户反馈:最重要的指标。我们建立了反馈渠道,鼓励用户提交“生成错误”的案例和“希望支持”的新描述句式。这些案例是我们优化模型和规则的最宝贵材料。
我们定期(如每两周)回顾这些反馈,将常见问题归类。如果是 OpenClaw 解析错误,就针对性补充训练数据;如果是 Skill 绘图不美观,就调整布局算法的参数或节点的样式配置。这个持续迭代的过程,让工具越来越“聪明”,越来越贴合大家的真实使用习惯。
回过头看,把 OpenClaw 和 Skill 组合起来做成自动生成业务图的能力,本质上是一次“让工具理解人,而不是让人适应工具”的尝试。它节省的不仅仅是画图的时间,更是将业务逻辑从模糊的自然语言快速固化为清晰、可讨论、可验证的视觉模型的时间。对于需要频繁沟通、快速迭代的团队来说,这种“提效”虽然看似微小,但汇聚起来,却能显著降低协作的摩擦成本。如果你也在受困于重复、繁琐的绘图工作,不妨也试试这种思路,从解构你的具体需求开始,寻找那些专精而非全能的组件,把它们组合成属于你自己的自动化解决方案。