はじめに
前回 Pega GenAI Blueprintについて は、標準で提供されているテンプレートを用いて Blueprint を作成する方法でした。
標準で提供されているテンプレートを用いて Blueprint を作成する方法は、簡単に素早く Blueprint を作成する方法として優先して試したい方法です。
構築想定のシステム/サービスが、標準で提供されているテンプレートに近いものであれば、標準で提供されているテンプレートをベースに Blueprint を作成してから、微調整するのが簡単です。
標準で多くのテンプレートが提供されているものの、構築想定のシステム/サービスが独自で、あまり近いテンプレートがない場合には、仕様書などを Pega GenAI Bluprint のインプットとして使って、一からBlurprintを作成させることができます。
これには生成AI技術が用いられているので、生成AIに慣れている人は、どのようなインプットをすればどのようなアウトプットが期待できるか、ということは想像できるかもしれません。
今回は、簡単なインプットを行い、アウトプットにどのような変化があるかを見ながら、Pega GenAI Blueprint の活用方法を検討してみます。
1. 基本パターン
(標準テンプレートにない)次のようなケースを考えてみます。OpenWetherのサービスから天気を取得して、承認者が承認したらデータベースに登録する、といったシンプルなケースです。
まず、超シンプルな、次のような要件定義/仕様書を作成します。
# 毎日の天気を保存するケース
運輸業にて安全運航のため、毎日、OpenWeatherMAP APIから天気を取得して、データベースに格納する。
担当者がケースを開始した後、データをAPIで取得した後に、レビューアーが正しく情報が取得されていることを確認の上データベースに格納する。
Pega GenAI Blueprint のページから Blueprint の作成を開始します。「Upload supporting assets」をクリックします。
「Rquirements documents」の枠にファイルをドラッグアンドドロップ、または「choose file」をクリックして作成した要件定義書をアップロードします。アップロードできたら、「Analyze context」をクリックして分析します。
分析が始まり、しばらくすると添付した要件定義書をもとにPega GenAI Blueprintが分析した結果が表示されます。業種、アプリケーションの目的、機能の詳細、ワークフロー、データオブジェクトとインテグレーション、ペルソナが表示されます。(つまり、Pega GenAI Blueprintでは、このあたりがキーになる要素であるということが分かります)「Done」をクリックして分析終了です。
分析した業種が選択され、「View supporting assets」に 1 と、添付したファイルの数が表示されます。「Next」で次に進みます。
さらに分析が行われます。「Organization name」を入力する必要があります。想定する企業の名称を入力します。「Language」は「日本語」を選択します。デモや要件定義など、作成したケースを他の人と共有しながら改善を行う場合、ここでは「日本語」を選択すると、日本語のアプリケーションが生成されます。最終の Blueprint を生成して、製品版のベースとする場合は英語で作成して、製品を多言語化対応することになるかもしれません。
「Next」で進めながら、生成されたケースを確認します。アプリケーションの内容によっては Pega GenAI Blueprint が複数のケースを生成する場合があります。生成されたケースから目的に近いものだけに絞ったり、用途の異なるケースを複数で利用することがあります。
「Next」で進めるとケースタイプが表示されます。GenAI Blueprint により想定したフローに近いイメージが自動的に生成されます。
「Next」で進めると次はデータモデルが表示されます。データモデルを選択すると、モデルに含まれる項目を確認することができます。
次はペルソナです。オペレーター(担当者)とレビュアー(承認者)が作成されました。
最後にサマリーが表示され、PDF でダウンロード、Blueprint としてダウンロード、アプリケーションの作成、などができます。
超シンプルなインプットでも、あっという間に、検討のベースとなるアプリケーションを生成することができました。
2. 要件の精緻化(フロー)
簡単な要件のインプットでも Pega GenAI Blueprint が Blurprint を生成しくれますが、さらに思い通りのアウトプットを得るために、情報を追加してみす。
サンプルとして次のようなフローを BPMN として与えます。
上記のフロー図は BPMN.io で作成したものです。
ソースはこちら、
<?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_0bybk0s" targetNamespace="http://bpmn.io/schema/bpmn" exporter="bpmn-js (https://demo.bpmn.io)" exporterVersion="18.6.1">
<bpmn:collaboration id="Collaboration_0vnii42">
<bpmn:participant id="Participant_0i9opzh" name="担当者" processRef="Process_0193wxh" />
<bpmn:participant id="Participant_0kdayr5" name="OpenWether" processRef="Process_0l2fixn" />
<bpmn:participant id="Participant_1lcukyz" name="リーダー" processRef="Process_0hp8r10" />
<bpmn:messageFlow id="Flow_0hhrr9e" sourceRef="Activity_0q485ol" targetRef="Activity_0toz9nb" />
<bpmn:messageFlow id="Flow_0xv83of" sourceRef="Activity_0s19c7x" targetRef="Activity_13lm4n4" />
<bpmn:messageFlow id="Flow_0omy6xo" sourceRef="Activity_13lm4n4" targetRef="Activity_15h69uc" />
<bpmn:messageFlow id="Flow_0j9o898" sourceRef="Activity_15h69uc" targetRef="Activity_0q485ol" />
<bpmn:messageFlow id="Flow_1noujwk" sourceRef="Activity_0q485ol" targetRef="Activity_0s19c7x" />
<bpmn:textAnnotation id="TextAnnotation_0fdagj7">
<bpmn:text>承認</bpmn:text>
</bpmn:textAnnotation>
<bpmn:association id="Association_0js1tp3" associationDirection="None" sourceRef="Flow_0hhrr9e" targetRef="TextAnnotation_0fdagj7" />
<bpmn:textAnnotation id="TextAnnotation_0pha5b2">
<bpmn:text>否認</bpmn:text>
</bpmn:textAnnotation>
<bpmn:association id="Association_0gp57h7" associationDirection="None" sourceRef="Flow_1noujwk" targetRef="TextAnnotation_0pha5b2" />
</bpmn:collaboration>
<bpmn:process id="Process_0193wxh" isExecutable="false">
<bpmn:laneSet id="LaneSet_0c0q7hz">
<bpmn:lane id="Lane_1ebnhd4">
<bpmn:flowNodeRef>Activity_0s19c7x</bpmn:flowNodeRef>
<bpmn:flowNodeRef>StartEvent_026dzvw</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Event_0ktpvtz</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Activity_0toz9nb</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Activity_15h69uc</bpmn:flowNodeRef>
</bpmn:lane>
</bpmn:laneSet>
<bpmn:task id="Activity_0s19c7x" name="天気取得">
<bpmn:incoming>Flow_0v6h8rb</bpmn:incoming>
</bpmn:task>
<bpmn:startEvent id="StartEvent_026dzvw">
<bpmn:outgoing>Flow_0v6h8rb</bpmn:outgoing>
</bpmn:startEvent>
<bpmn:sequenceFlow id="Flow_0v6h8rb" sourceRef="StartEvent_026dzvw" targetRef="Activity_0s19c7x" />
<bpmn:intermediateThrowEvent id="Event_0ktpvtz">
<bpmn:incoming>Flow_0wqrm5k</bpmn:incoming>
</bpmn:intermediateThrowEvent>
<bpmn:task id="Activity_0toz9nb" name="データ登録">
<bpmn:outgoing>Flow_0wqrm5k</bpmn:outgoing>
</bpmn:task>
<bpmn:sequenceFlow id="Flow_0wqrm5k" sourceRef="Activity_0toz9nb" targetRef="Event_0ktpvtz" />
<bpmn:task id="Activity_15h69uc" name="結果確認" />
</bpmn:process>
<bpmn:process id="Process_0l2fixn">
<bpmn:transaction id="Activity_13lm4n4" name="Openwether API" />
</bpmn:process>
<bpmn:process id="Process_0hp8r10">
<bpmn:task id="Activity_0q485ol" name="承認" />
</bpmn:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Collaboration_0vnii42">
<bpmndi:BPMNShape id="Participant_0i9opzh_di" bpmnElement="Participant_0i9opzh" isHorizontal="true">
<dc:Bounds x="156" y="62" width="732" height="218" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Lane_1ebnhd4_di" bpmnElement="Lane_1ebnhd4" isHorizontal="true">
<dc:Bounds x="186" y="62" width="702" height="218" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_0s19c7x_di" bpmnElement="Activity_0s19c7x">
<dc:Bounds x="310" y="90" width="100" height="80" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_026dzvw">
<dc:Bounds x="232" y="112" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_0ktpvtz_di" bpmnElement="Event_0ktpvtz">
<dc:Bounds x="823" y="112" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_0toz9nb_di" bpmnElement="Activity_0toz9nb">
<dc:Bounds x="671" y="90" width="100" height="80" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_15h69uc_di" bpmnElement="Activity_15h69uc">
<dc:Bounds x="520" y="90" width="100" height="80" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_0v6h8rb_di" bpmnElement="Flow_0v6h8rb">
<di:waypoint x="268" y="130" />
<di:waypoint x="310" y="130" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0wqrm5k_di" bpmnElement="Flow_0wqrm5k">
<di:waypoint x="771" y="130" />
<di:waypoint x="823" y="130" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="Participant_0kdayr5_di" bpmnElement="Participant_0kdayr5" isHorizontal="true">
<dc:Bounds x="156" y="290" width="732" height="160" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_13lm4n4_di" bpmnElement="Activity_13lm4n4" isExpanded="true">
<dc:Bounds x="450" y="310" width="140" height="120" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Participant_1lcukyz_di" bpmnElement="Participant_1lcukyz" isHorizontal="true">
<dc:Bounds x="156" y="460" width="732" height="300" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_0q485ol_di" bpmnElement="Activity_0q485ol">
<dc:Bounds x="590" y="620" width="100" height="80" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Association_0js1tp3_di" bpmnElement="Association_0js1tp3">
<di:waypoint x="721" y="544" />
<di:waypoint x="770" y="501" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Association_0gp57h7_di" bpmnElement="Association_0gp57h7">
<di:waypoint x="340" y="557" />
<di:waypoint x="413" y="550" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0hhrr9e_di" bpmnElement="Flow_0hhrr9e">
<di:waypoint x="690" y="660" />
<di:waypoint x="721" y="660" />
<di:waypoint x="721" y="170" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0xv83of_di" bpmnElement="Flow_0xv83of">
<di:waypoint x="360" y="170" />
<di:waypoint x="360" y="240" />
<di:waypoint x="530" y="240" />
<di:waypoint x="530" y="310" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0omy6xo_di" bpmnElement="Flow_0omy6xo">
<di:waypoint x="570" y="310" />
<di:waypoint x="570" y="170" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0j9o898_di" bpmnElement="Flow_0j9o898">
<di:waypoint x="620" y="130" />
<di:waypoint x="640" y="130" />
<di:waypoint x="640" y="620" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="TextAnnotation_0fdagj7_di" bpmnElement="TextAnnotation_0fdagj7">
<dc:Bounds x="770" y="490" width="100" height="30" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_1noujwk_di" bpmnElement="Flow_1noujwk">
<di:waypoint x="590" y="660" />
<di:waypoint x="340" y="660" />
<di:waypoint x="340" y="170" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="TextAnnotation_0pha5b2_di" bpmnElement="TextAnnotation_0pha5b2">
<dc:Bounds x="390" y="550" width="100" height="30" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</bpmn:definitions>
Pega GenAI Blueprint に、Requirements documents に加えて、Process diagrams を追加します。
ステージの構成が変わりましたが、bpmn のフローに近づいた気がします。
3. 要件の精緻化(モデル)
今度は、1.の基本パターンに、OpenAPI 仕様のデータモデル情報を与えてみます。
OpenWether API の OpenAPI 仕様は こちら にあるものを利用します。
Pega GenAI Blueprint に、Requirements documents に加えて、Data schemas and Integrations を追加します。
ケースタイプに変化があります。
データモデルは OpenAPI 仕様から反映されています。
まとめ
Blueprint 生成時に与える情報を付加する/増やすことで、アウトプットに反映されることが確認できました。
特に以下のようなものが重要な情報としてアウトプットに影響を与えます。
- 業務の属する業種
- アプリケーション/業務の目的
- 処理の説明
- プロセス/処理内容/フローなど
- データモデル
今回は、BPMN や OpenAPI 仕様として情報をアップロードしましたが、(生成AIを使っているという観点からすれば)処理フローやモデルの定義を要件定義書/仕様書に文章として含めても同様の効果が期待できるのではないかと思います。
今後は、生成AI(と人)の理解できる文章が、良いドキュメントということになりそうです。
上記は、こちらから入っていましたが、
https://www.pega.com/blueprint
日本語のページがあるようです、
https://www.pega.com/ja/blueprint















