Power Platform + Azure OpenAI でアダプティブ カードを自動生成する
はじめに
OpenAI の Function Calling は JSON スキーマ情報を入力として渡すことで生成 AI に JSON を生成させる機能です。これを利用して作るのが面倒なアダプティブ カードを作ってもらって作業の効率化をしてみます。
サンプル コード
ソリューション パッケージになっています。Azure OpenAI の各種パラメーターは環境変数になっているので各自でご準備ください。
実行手順
Power Apps
アプリは以下のような感じになります。左側のテキスト入力にサンプルの JSON データを設定して Create Card from JSON ボタンをクリックするとフローを呼び出します。フローでは OpenAI を呼び出してアダプティブ カードを生成しアプリに返します。残念ながら Power Apps ではアダプティブ カードをレンダリングできません。代わりにプレビューのために Send Card to Teams をクリックして Microsoft Teams で生成したアダプティブ カードを送信できるようにしています。
Power Automate
アプリから呼び出されるフローは単純に OpenAI を呼び出すだけです。
プロンプトは以下になります。JSON スキーマの description
にどういうデータなのかを書いてあげると生成 AI が適切に判断してくれるようになります。特に固定値を指定したい場合は有効です。今回であればアダプティブ カードのバージョンを 1.4 にするように指定しています。
{
"messages": [
{
"role": "system",
"content": "You are assistant that generates Adaptive Cards."
},
{
"role": "user",
"content": "@{triggerBody()['text']}"
}
],
"functions": [
{
"name": "AdaptiveCards",
"description": "Adaptive Cards",
"parameters": {
"type": "object",
"properties": {
"$schema": {
"type": "string",
"description": "http://adaptivecards.io/schemas/adaptive-card.json"
},
"type": {
"type": "string",
"description": "AdaptiveCard"
},
"version": {
"type": "string",
"description": "1.4"
},
"body": {
"type": "array",
"items": {
"type": "object"
}
}
}
}
}
],
"function_call": {
"name": "AdaptiveCards"
}
}
実行結果
サンプル データとして MSN Weather コネクタを使って取得できる天気の情報をソースとしてアダプティブ カードを生成します。
これだけだとわからないので Microsoft Teams に送信してみます。サンプル データを使用してアダプティブ カードが生成されていることがわかります。今回は temperature
を指定していないので結果はランダムになり、毎回異なるフォーマットのアダプティブ カードが生成されます。何回か実行してみてよさそうなフォーマットを選択できます。
おわりに
現在使っているのが GPT-3.5 だからなのかわかりませんが、JSON スキーマを細かく指定してもうまく解釈してくれないことがあります。GPT-4 であればもう少し結果が変わる可能性はあります。また Function Calling ではなく Semantic Kernel の skprompt.txt のようなテンプレートでの指定をしたほうが確実そうではあります。
Discussion