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 ではなくプロンプトで指定したほうが確実な場合もあります。
Discussion