ChatGPTにBPMNのフロー図を描かせてみた
最近BPMN2.0の勉強を始めたのだけれど、図形がたくさんあって適切に使うのにまず困るということが分かった。
また、業務の単位を大まかにしたり、細かくしたりもできるので適切な記載も慣れるまでは難しい。(下記のサイトはとても参考になります)
そこで、業務を自然言語で記述したら、自動でプロセスができるようにすれば困らないのではないかと思って、ChatGPT(GPT-4-turbo)、Claude3 Opus、Gemini Advancedにお願いしてみた。
出来た!
<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn">
<bpmn:process id="BarOperationProcess" isExecutable="true">
<bpmn:startEvent id="StartEvent" name="Start">
<bpmn:outgoing>Flow_OrderReceived</bpmn:outgoing>
</bpmn:startEvent>
<bpmn:task id="ViewOrderSite" name="View Order Site">
<bpmn:incoming>Flow_OrderReceived</bpmn:incoming>
<bpmn:outgoing>Flow_CustomerLoginCheck</bpmn:outgoing>
</bpmn:task>
<bpmn:exclusiveGateway id="CustomerLoginCheck" name="Is Customer Logged In?">
<bpmn:incoming>Flow_CustomerLoginCheck</bpmn:incoming>
<bpmn:outgoing>Flow_OrderOriginalBlend</bpmn:outgoing>
<bpmn:outgoing>Flow_OrderRegular</bpmn:outgoing>
</bpmn:exclusiveGateway>
<bpmn:task id="OrderOriginalBlend" name="Order Original Blend">
<bpmn:incoming>Flow_OrderOriginalBlend</bpmn:incoming>
<bpmn:outgoing>Flow_OrderReceivedBySystem</bpmn:outgoing>
</bpmn:task>
<bpmn:task id="OrderRegular" name="Order Regular Drink">
<bpmn:incoming>Flow_OrderRegular</bpmn:incoming>
<bpmn:outgoing>Flow_OrderReceivedBySystem</bpmn:outgoing>
</bpmn:task>
<bpmn:task id="ProcessOrder" name="Process Order">
<bpmn:incoming>Flow_OrderReceivedBySystem</bpmn:incoming>
<bpmn:outgoing>Flow_CheckBlenderOrder</bpmn:outgoing>
</bpmn:task>
<bpmn:exclusiveGateway id="CheckBlenderOrder" name="Is it a Blender Order?">
<bpmn:incoming>Flow_CheckBlenderOrder</bpmn:incoming>
<bpmn:outgoing>Flow_BartenderTask</bpmn:outgoing>
<bpmn:outgoing>Flow_BlendOrder</bpmn:outgoing>
</bpmn:exclusiveGateway>
<bpmn:task id="BartenderTask" name="Bartender Manual Task">
<bpmn:incoming>Flow_BartenderTask</bpmn:incoming>
<bpmn:outgoing>Flow_EndManualTask</bpmn:outgoing>
</bpmn:task>
<bpmn:task id="BlendOrder" name="Blend Order">
<bpmn:incoming>Flow_BlendOrder</bpmn:incoming>
<bpmn:outgoing>Flow_EndBlenderTask</bpmn:outgoing>
</bpmn:task>
<bpmn:endEvent id="EndManualTask" name="End Manual Task">
<bpmn:incoming>Flow_EndManualTask</bpmn:incoming>
</bpmn:endEvent>
<bpmn:endEvent id="EndBlenderTask" name="End Blender Task">
<bpmn:incoming>Flow_EndBlenderTask</bpmn:incoming>
</bpmn:endEvent>
<bpmn:sequenceFlow id="Flow_OrderReceived" sourceRef="StartEvent" targetRef="ViewOrderSite"/>
<bpmn:sequenceFlow id="Flow_CustomerLoginCheck" sourceRef="ViewOrderSite" targetRef="CustomerLoginCheck"/>
<bpmn:sequenceFlow id="Flow_OrderOriginalBlend" name="To Original Blend Task" sourceRef="CustomerLoginCheck" targetRef="OrderOriginalBlend">
<bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">customerLoggedIn == true</bpmn:conditionExpression>
</bpmn:sequenceFlow>
<bpmn:sequenceFlow id="Flow_OrderRegular" name="To Regular Blend Task" sourceRef="CustomerLoginCheck" targetRef="OrderRegular">
<bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">customerLoggedIn == false</bpmn:conditionExpression>
</bpmn:sequenceFlow>
<bpmn:sequenceFlow id="Flow_OrderReceivedBySystem" sourceRef="OrderOriginalBlend" targetRef="ProcessOrder"/>
<bpmn:sequenceFlow id="Flow_OrderReceivedBySystem" sourceRef="OrderRegular" targetRef="ProcessOrder"/>
<bpmn:sequenceFlow id="Flow_CheckBlenderOrder" sourceRef="ProcessOrder" targetRef="CheckBlenderOrder"/>
<bpmn:sequenceFlow id="Flow_BartenderTask" name="To Bartender Task" sourceRef="CheckBlenderOrder" targetRef="BartenderTask">
<bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">BlenderOrder == false</bpmn:conditionExpression>
</bpmn:sequenceFlow>
<bpmn:sequenceFlow id="Flow_BlendOrder" name="To Blender Order" sourceRef="CheckBlenderOrder" targetRef="BlendOrder">
<bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">BlenderOrder == true</bpmn:conditionExpression>
</bpmn:sequenceFlow>
<bpmn:sequenceFlow id="Flow_EndManualTask" sourceRef="BartenderTask" targetRef="EndManualTask"/>
<bpmn:sequenceFlow id="Flow_EndBlenderTask" sourceRef="BlendOrder" targetRef="EndBlenderTask"/>
</bpmn:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="BarOperationProcess">
<bpmndi:BPMNShape id="Shape_StartEvent" bpmnElement="StartEvent">
<dc:Bounds x="100" y="100" width="36" height="36"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Shape_ViewOrderSite" bpmnElement="ViewOrderSite">
<dc:Bounds x="200" y="100" width="100" height="80"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Shape_CustomerLoginCheck" bpmnElement="CustomerLoginCheck">
<dc:Bounds x="400" y="100" width="100" height="80"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Shape_OrderOriginalBlend" bpmnElement="OrderOriginalBlend">
<dc:Bounds x="600" y="50" width="100" height="80"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Shape_OrderRegular" bpmnElement="OrderRegular">
<dc:Bounds x="600" y="150" width="100" height="80"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Shape_ProcessOrder" bpmnElement="ProcessOrder">
<dc:Bounds x="800" y="100" width="100" height="80"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Shape_CheckBlenderOrder" bpmnElement="CheckBlenderOrder">
<dc:Bounds x="1000" y="100" width="100" height="80"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Shape_BartenderTask" bpmnElement="BartenderTask">
<dc:Bounds x="1200" y="50" width="100" height="80"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Shape_BlendOrder" bpmnElement="BlendOrder">
<dc:Bounds x="1200" y="150" width="100" height="80"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Shape_EndManualTask" bpmnElement="EndManualTask">
<dc:Bounds x="1400" y="50" width="36" height="36"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Shape_EndBlenderTask" bpmnElement="EndBlenderTask">
<dc:Bounds x="1400" y="150" width="36" height="36"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Edge_Flow_OrderReceived" bpmnElement="Flow_OrderReceived">
<di:waypoint x="136" y="118" />
<di:waypoint x="200" y="118" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Edge_Flow_CustomerLoginCheck" bpmnElement="Flow_CustomerLoginCheck">
<di:waypoint x="300" y="140" />
<di:waypoint x="400" y="140" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Edge_Flow_OrderOriginalBlend" bpmnElement="Flow_OrderOriginalBlend">
<di:waypoint x="500" y="130" />
<di:waypoint x="600" y="90" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Edge_Flow_OrderRegular" bpmnElement="Flow_OrderRegular">
<di:waypoint x="500" y="150" />
<di:waypoint x="600" y="190" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Edge_Flow_OrderReceivedBySystem_1" bpmnElement="Flow_OrderReceivedBySystem">
<di:waypoint x="700" y="90" />
<di:waypoint x="800" y="140" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Edge_Flow_OrderReceivedBySystem_2" bpmnElement="Flow_OrderReceivedBySystem">
<di:waypoint x="700" y="190" />
<di:waypoint x="800" y="140" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Edge_Flow_CheckBlenderOrder" bpmnElement="Flow_CheckBlenderOrder">
<di:waypoint x="900" y="140" />
<di:waypoint x="1000" y="140" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Edge_Flow_BartenderTask" bpmnElement="Flow_BartenderTask">
<di:waypoint x="1100" y="140" />
<di:waypoint x="1200" y="90" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Edge_Flow_BlendOrder" bpmnElement="Flow_BlendOrder">
<di:waypoint x="1100" y="140" />
<di:waypoint x="1200" y="190" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Edge_Flow_EndManualTask" bpmnElement="Flow_EndManualTask">
<di:waypoint x="1300" y="90" />
<di:waypoint x="1400" y="68" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Edge_Flow_EndBlenderTask" bpmnElement="Flow_EndBlenderTask">
<di:waypoint x="1300" y="190" />
<di:waypoint x="1400" y="168" />
</bpmndi:BPMNEdge>
<!-- DI elements like bpmndi:BPMNShape and bpmndi:BPMNEdge would go here to visually layout the process -->
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</bpmn:definitions>
なお、Geminiはインポートすら失敗していたので、難しいのかもしれない。
上記のファイルを test.bpmnとして下記サイトで読み込むとBPMNの図が表示できます。
このように、生成AIによってビジネスプロセスをBPMN2.0に基づいて書くことができた。
このように、業務プロセスを口頭で話すだけ、もしくはヒアリングした書きおこしを生成AIに入れるだけでビジネスプロセスが可視化できるというのはかなり画期的な気がする。
なぜなら、部門をまたぐ業務や、身体的操作を伴う業務に従事していてBPMNを書くための時間を取れない人が、テンプレートに従って業務を話すだけで業務フローの概要ができるし、さらに、業務の改善提案もできる。
記載したBPMNに対して効率改善と顧客満足度向上の案を出してもらい、改善後のBPMNを書かせることもできるので下手なコンサルは要らなくなる。
何度か試したが、BPMN2.0で定められたように、登場人物別にレーンを分けて表示するにもプロンプトの工夫が必要そうだった。
BPMN のファイルでは図形の位置を絶対値で指定する必要があるようなので、プロセスが長くなったり複雑になったりすると、それぞれの位置関係を認識する必要があり、それが難しいかもしれない。ここはソフトウェア側で解消できそうでもあるし、マルチモーダルの特性を生かして、出力された画像を読み込んでコードを修整するようになれば、位置の調整も改善できるかもしれない。
この分野の発展に期待(というか自分でやりたい)
そうしてできたファイルを読み込んだのが下記。全然できてないぞ。
続いてはClaude3 Opusで。
そうしてできたのが下記のファイル。全然ダメだ。
早く人間を超えて世界から無駄な仕事をなくせるようになってほしいものです。
今回使ったプロンプトは下記。
この記事が気に入ったらサポートをしてみませんか?