マルチモーダルAIを組み込んだアプリをPower Platform AI Builderで開発する

# はじめに

みなさん、こんにちは。
日本マイクロソフトの佐々木です。

以前、別の記事で生成AIを組み込んだ業務アプリをPower Platformで開発する方法についてご紹介しました。

https://qiita.com/tomoyasasaki1204/items/81f6629a301512a25191

当時は生成AIによる画像処理系のシナリオの場合、基本的にAzure OpenAIと連携する必要がありましたが、AI BuilderのAI プロンプトで処理できるようになっているため、本記事ではこちらの機能を紹介していきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2975138/c80d0ba8-3d85-48a3-8284-a40b33188340.png)


本機能はGAから数か月経過しておりますので、詳細説明は割愛します。
ハンズオン的に紹介していきます。

https://learn.microsoft.com/ja-jp/ai-builder/prompts-overview

# AI BuilderのAIプロンプトとは
AI BuilderのAIプロンプトは、Power Platform内で生成AIを活用するための機能で、カスタムプロンプトを作成、テスト、保存できます。 ​

主な特徴は以下の通りです：

・プロンプトの作成と管理：​ユーザーは自然言語で指示を記述し、特定のタスクに合わせたプロンプトを作成できます。 ​
・再利用性：​作成したプロンプトは保存して再利用でき、他のユーザーと共有することも可能です。​
・統合性：​プロンプトはPower AutomateのフローやPower Appsのアプリ内で活用でき、ビジネスプロセスの自動化やアプリケーションの高度な生成AI機能を実現します。​
・サポートされるタスク：​プロンプトは、画像処理、テキストの要約、データ分類、エンティティ抽出、言語翻訳、感情分析、苦情対応の作成など、多岐にわたるタスクに使用できます。

■**AI プロンプトの作成画面**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2975138/96e83a14-0182-410f-a52e-b79e2e41da38.png)


■**Power Appsから呼び出す_テキスト処理**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2975138/3f9e92bc-87a9-49dc-91f5-b5cf35c774d0.png)

■**Power Appsから呼び出す_画像処理**
まったく別のシナリオですが、マルチモーダルAIですので、画像処理も可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2975138/7fd1e3fd-e67a-4f8b-b727-16db2653eb4d.png)


# 利用できるAIモデル
AI BuilderのAIプロンプトで利用できるGA済みのモデルは2025年3月現在 GPT4oになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2975138/073cc39d-6960-4ef7-a05a-f767a3dd3be8.png)

いわゆるマルチモーダルの仕組みになりますので、入力としてテキストや画像を処理することが可能となります。

https://learn.microsoft.com/ja-jp/ai-builder/prompt-modelsettings#version-of-generative-ai-model


# ハンズオンシナリオ_Power Automateから画像処理するAIプロンプトを呼び出す
設備保全担当者が設備保全の報告業務を効率化するソリューションを構築したいとおもいます。
画像処理系のシナリオとなります。下記が狙いです。

1. AI Builder（AI プロンプト） を活用して生成AIのプロンプトの基本を学習する
1. プロンプトにテキスト、画像、またはドキュメント入力の方法を学習する
1. AI Builder（AI プロンプト） をPower Automateで利用する方法を学習する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2975138/f4412ab5-a064-4042-913a-a08363f09267.png)

## AIプロンプトの作成
下記のような設備トラブル報告書があり、画像やPDFの内容を画像処理し、設備トラブルの報告内容を分析して、結果を出力させます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2975138/46723324-2ab3-4e4a-94ea-1c0e49ce9666.png)

https://learn.microsoft.com/ja-jp/ai-builder/create-a-custom-prompt

https://learn.microsoft.com/ja-jp/ai-builder/add-inputs-prompt



AIプロンプトを作成し、プロンプトを作成していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2975138/145f5d6d-9c79-4484-ad7c-7eceb5860d16.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2975138/303ed711-2a6d-433c-b452-279915bee62e.png)

```プロンプトの内容
設備保全の報告内容より要約してください。

#指示
・報告内容を要約します。要約には、日時、発生場所、状況、原因、対応内容など必要な情報を含んでください。
・重要なインシデントか否かを判断してください。判断基準は下記に示します。
・口調は丁寧な表現をしてください。

##判断基準
・設備不具合の原因が人的(ヒューマンエラー)に引き起こされたもの
・現在の状況が改善されていないもの

#入力
  
#出力形式
JSON形式で出力してください。
[]やjsonのような不要な文字列は出力しないでください。
```

今回は画像やPDFを入力の引数として選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2975138/ae840c15-7073-4a61-9b9c-132ebd94426a.png)


プロンプト内に設定した入力引数を設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2975138/d2dfad20-4f9b-4cff-9a23-00dcf6bf1299.png)

### 出力フォーマットを設定する
今回はPower Automateで取り扱いやすいようにJSON形式の出力を設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2975138/51a5b87d-286b-46da-99b5-9e869fcd1802.png)

```JSONフォーマット
{
  "Summary":"",
  "iSIncident":true
}
```


### テストする
生成AIプロンプトを確認し、問題なくAIプロンプトが動作するか確認するためテストを実行します。[画像またはドキュメントをアップロードする]よりサンプルデータをアップロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2975138/7d3136ce-acbf-4f2a-b902-3d25338a9f08.png)

問題なく、JSON形式で出力が確認できました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2975138/a3a454e0-424c-4f73-bca7-72bd6b26e433.png)


問題なければ、[カスタムプロンプト]を保存します。


:::note info
制限事項
画像またはドキュメントの入力の場合、プロンプトにアップロードするファイルのサイズ制限は、すべてのファイルの合計で 25 MB です。
画像またはドキュメントの入力の場合、PNG、JPG、JPEG、BMP、TIFF、PDF 以外の形式のファイルを渡すことはできません。
:::


## Power Automateから呼び出す
今回はPower Automateから作成したAIプロンプトを呼び出します。
もちろん、Power AppsやCopiot Studioから呼び出すことも可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2975138/7ef74115-273e-4d3b-b431-493c3e0475ad.png)

Power Appsから呼び出す際の要領はAzure OpenAIで作成した場合とほぼ同様ですので、今回は割愛します。下記ブログ参照ください。

https://qiita.com/tomoyasasaki1204/items/81f6629a301512a25191

下記のようなフローを作成し、メールの添付ファイルを抜き出し、作成したAIプロンプトを呼び出します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2975138/4981048a-3ad1-4b2d-9cfb-fa24d4bd617a.png)

isIncidentの値を評価して、条件分岐させたいと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2975138/1c2726cb-d076-49f8-a916-d6b0a38ca39d.png)

### テストする
Power Autoamteを経由した際も同様に処理することができました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2975138/55df646e-beb8-40b6-acb3-f48a227acb58.png)


# ほかにもいろいろなシナリオを一気見せします。
AIプロンプトの魅力を伝えるため、色々なシナリオをお見せします。

## Power Apps × 画像処理のサンプルアプリ
### 非構造的な画像
分かりやすいようにプロンプト部分も1画面にまとめていますが、あくまで精度を確認するために参考までに。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2975138/93a90cc1-651e-4570-93fa-a40d1a666238.png)

### 手書き×感情分析
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2975138/7ba47189-41af-4cd7-9245-2f25ff5224f5.png)

### 手書き×項目抽出
こういった手書きの作業日報も処理できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2975138/ca9c3df6-76d1-4f4a-aded-cc2c91875681.png)


## Dataverseグラウンディング機能
Dataverseのテーブルも参照することができます。
このあたりの機能は下記で利用方法を紹介しています。

https://qiita.com/tomoyasasaki1204/items/432e9618ecea45b33a9c#ai-builder-%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88%E3%83%93%E3%83%AB%E3%83%80%E3%83%BC%E3%81%A7%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E5%87%A6%E7%90%86%E6%96%87%E7%AB%A0%E6%A0%A1%E6%AD%A3--%E6%8A%BD%E5%87%BA

https://learn.microsoft.com/ja-jp/ai-builder/use-your-own-prompt-data


# おわりに
いかがだったでしょうか？
AI Builderを活用して簡単に生成AIを活用したPower Platformアプリを開発する方法についてご紹介しました。
ぜひご活用ください。