Azure OpenAI Service を Logic Apps から気軽に呼び出してみる
※こちらの記事の内容は2023年4月初旬ベースの内容になります。最新の情報は公式ドキュメントもあわせてご参照ください。
ここでやること
- Azure OpenAI Service の API の呼び出し方を確認
- Logic App のワークフローから Azure OpenAI Service の API を呼び出す
- Azure OpenAI Service から返ってきた結果を利用する
Azure OpenAI Service の API の呼び出し方を確認
Azure OpenAI Service の利用開始方法については下記を参照ください。今回は「GPT-35-Turbo」モデルでの利用方法をベースに書きますが、基本的な操作は「GPT-3」モデルでも同様です。
Azure OpenAI Studio の「チャット」のプレイグラウンド画面では、実際に Web 上でチャットのセッションが体験できますが、このチャットで OpenAI のモデルが返答してくれるテキストを API で取得する方法を確認します。
「チャットセッション」の中にある「コードの表示」ボタンをクリックすると、サンプルコードが表示されます。
サンプルコードの種類にて「curl」を選択すると下記画像のような内容になり、実際に Azure OpenAI Service に API リクエストを投げる方法が出てきます。
この中で重要な部分は
- Http エンドポイントの URL
- ヘッダーにて API KEY を指定
- Body にチャットの会話を配列で格納、Role プロパティで発言元を指定
- その他パラメータと会話内容を合わせて Json で送信
となり、これを意識して Logic App のワークフローを組んでいきます。
※API バージョンが変更され、仕様も変わる可能性があるため、最新情報は下記をご確認ください。
Azure OpenAI Service の REST API リファレンス
Logic App のワークフローから Azure OpenAI Service の API を呼び出す
まずは Logic App のリソースを一番安いプランで作成します。
今回は「繰り返し」トリガーを使ってサンプルを作り始めます。
サンプルとして今回は Teams のメッセージを取得し、その内容を要約するワークフローを作成します。(詳細な使い方は今回のスコープではないので省略します)
Logic App のワークフローから Azure OpenAI Service の API を呼び出す画面はこちらです。
※本番システムでは Api-key を直書きせず、Key Vault 等の利用を検討してください。
先ほど Azure OpenAI Studio で確認した項目を「URI」や「ヘッダー」に入れます。また「本文」については Azure OpenAI Studio のサンプルコードで「json」を選択し、そちらを参考に入力してください。
少しだけ JSON の解説をすると
- messages の中にチャットの履歴が配列として格納
- 配列内の各要素は role と content に分かれており、role は system と user の2つ
- message の中の最後の発言が user からのものであれば、そこまでの会話に応じた OpenAI からの応答が返ってくる仕組み(今回は role が user のメッセージを1つだけ配列に入れる形で Logic App の設定をします)
Azure OpenAI Service から返ってきた結果を利用する
後は、Azure OpenAI Service の API から返ってきた応答を Logic App 内で扱える形式に変換した後、今回はサンプルとして Teams のチャンネルに投稿するワークフローを定義します。
JSON の解析部分ですが、実際に API から返ってくる応答を「サンプルのペイロードを使用してスキーマを生成する」に入れてスキーマを生成することも可能です。
念のため今回利用した「https://{your-resource-name}.openai.azure.com/openai/deployments/{deployment-id}/chat/completions?api-version=2023-03-15-preview」で返ってくるスキーマも置いておきます。
{
"properties": {
"choices": {
"items": {
"properties": {
"finish_reason": {
"type": "string"
},
"index": {
"type": "integer"
},
"message": {
"properties": {
"content": {
"type": "string"
},
"role": {
"type": "string"
}
},
"type": "object"
}
},
"required": [
"index",
"finish_reason",
"message"
],
"type": "object"
},
"type": "array"
},
"created": {
"type": "integer"
},
"id": {
"type": "string"
},
"model": {
"type": "string"
},
"object": {
"type": "string"
},
"usage": {
"properties": {
"completion_tokens": {
"type": "integer"
},
"prompt_tokens": {
"type": "integer"
},
"total_tokens": {
"type": "integer"
}
},
"type": "object"
}
},
"type": "object"
}
あとは「トリガーの実行」をクリックするだけです。
問題なければすべて正常に実行され、Teams の指定したチャンネルにメッセージが投稿されるはずです。
まとめ
Logic App で手軽に Azure OpenAI Service と他サービスとの連携ができます。API 呼び出し部分で少し慣れない部分もあるかもしれませんが、コードを基本的に書かなくてよいので、いろいろなプロトタイプを爆速で作る分には良いプラットフォームだと思います。
参考リンク集
- https://learn.microsoft.com/ja-jp/azure/cognitive-services/openai/reference
- https://learn.microsoft.com/ja-jp/azure/cognitive-services/openai/overview
- https://learn.microsoft.com/ja-jp/azure/logic-apps/logic-apps-overview
- https://learn.microsoft.com/ja-jp/azure/logic-apps/quickstart-create-example-consumption-workflow
- https://learn.microsoft.com/ja-jp/azure/connectors/introduction
Discussion