🦔

Microsoft Teams から Azure OpenAI が応答する Bot を作成する

2024/03/18に公開

はじめに

Microsoft TeamsAzure OpenAI Service の連携にはいくつか方法があります。本記事では Copilot Studio を使用して Microsoft Teams から Azure OpenAI Service を呼び出す方法を確認します。
記事は 2024 年 3 月 18 日時点の内容を元に執筆しています。常に最新の情報を確認するようにしてください。

Azure OpenAI Service の設定

デプロイ

Copilot Studio から Azure OpenAI Service への接続には、大きく 2 種類の方法があります。2種類の方法を確認するため、事前に 2 種類の Azure OpenAI Service を Azure にデプロイしておきます。Azure OpenAI Service のデプロイは本記事の本筋ではないので割愛します。必要に応じて 公式ドキュメント を確認してください。

以下の Azure OpenAI Service をデプロイしました。

  • openai-makokui-prod-japaneast-001
    gpt-35-turbo-16k をデプロイし、適当な 独自データ を Azure OpenAI に追加します。

  • openai-makokui-prod-japaneast-002
    gpt-35-turbo-16k をデプロイします。独自データは追加しません。

Azure OpenAI Service の応答確認

Azure AI Studio のチャット プレイグラウンドから応答を確認することもできますが、本記事では Copilot Studio から Azure OpenAI Service を呼び出すため REST API で確認します。
Azure AI Studio の「チャット」 - 「コードの表示」からサンプルコードを取得します。言語に Curl を指定し、リクエストパラメータを確認します。  

上から順に以下を確認できます。

  • Request Body
    -d より後ろのパラメータが HTTP Request の Body にセットされます。
  • エンドポイント
  • api-key

Postman で確認

上記で確認したパラメータを使用して Postman で HTTP レスポンスを確認してみます。
Method に POST、エンドポイントに先ほど確認したエンドポイント、Headers に先ほど確認した api-key、及び Content-Type に application/json を指定します。

Body に先ほど確認した request body を貼り付けます。Curl サンプルではダブルクォート (") がエスケープされています。ダブルクォートを追加し、以下のように修正します。また、チャットメッセージの応答確認のため、{"role": "user", "content":"こんにちは!" } を追加してみます。
REST API の詳細仕様は 公式ドキュメント から確認できます。

Send ボタンをクリックし、応答が得られることを確認します。ここで取得した応答は、Copilot Studio でも使用するのでどこかにメモしておきます。

Copilot Studio から Azure OpenAI Service を呼び出す

あらかじめ Copilot Studio にアクセスできることを確認しておきます。

方法1: 独自データを使用した Azure OpenAI Service を呼び出す

Azure AI Studio から「配置先」-「Copilot Studio での新しいコパイロット」をクリックします。

Copilot Studio の新規コパイロット作成画面が開くので、「コパイロットの名称」を指定して「作成」ボタンをクリックします。これだけです。(非常に楽ちんです。)
この方法が使用できるのは、独自データを使用した Azure OpenAI Service のみです。

規定で様々なトピックが有効化されているため、必要に応じて無効化した方がよいですが、そのままで使える状態になっています。

「トピック」-「システム」-「Conversational boosting」からデプロイされた詳細フローを見ることもできます。

「生成型の回答を作成する」の中身を見てみると、先ほどの Azure OpenAI Service に接続されていることが確認できます。

方法2: 独自データモデル未使用の Azure OpenAI Service を呼び出す

こちらが本記事のメイントピックなります。今度は上記とは別の方法として、Copilot Studio から Azure OpenAI Service を呼び出すフローを作成してみます。

新規コパイロット作成

Copilot Studio の「チャットボット」より「新しい コパイロット」をクリックします。
ここでは、「OpenAI Copilot」と命名します。

作成後、「設定」-「生成 AI」より「生成型の回答で会話の対象範囲を拡大します」を有効化し、「保存」します。

「生成型の回答で会話の対象範囲を拡大します」の有効化により、システムトピックに「Conversational boosting」が追加されます。

フローの作成

「Conversational boosting」をクリックすると、規定で以下のフローが作成されます。

今回は「生成型の回答を作成する」以下の処理を使用しないので、削除します。

Azure OpenAI Service への要求送信

REST API で OpenAI を呼び出すため、トリガーの直下に「HTTP要求の送信」を作成します。

Azure AI Studio の「サンプルコード」で確認したエンドポイントを URL に入力し、メソッドに Post を指定します。
次に「ヘッダーと本文」の「編集」をクリックし、ヘッダーに以下を指定します。

  • api-key: Azure AI Studio で確認した API Key
  • Content-TYpe: application/json

「本文」には「JSON コンテンツ」を指定し、「式の編集」から「式」を指定します。

事前検証時に Postman の Body に指定した Json データを貼り付けます。
ここはちょっとしたハマりどころかもしれません。Postman で指定した Body から以下を変更する必要があります。

  • 要素名からダブルクォート (") を外す
    例: "messages": -> messages:
  • 必要に応じて可変パラメータに変更
    ここでは、content に System.Activity.Text を指定し、チャットで入力した値をそのまま組み込んでいます。
  • Power Fx のお作法に沿ってパラメータを更新
    例えば、null は指定できないので、Blank() 関数を使用します。

次に Azure OpenAI Service からの応答に関わる設定を行います。応答のデータ タイプに「サンプル データから」を指定し、「サンプル JSON からスキーマを取得する」を選択します。

JSON には事前検証の Postman で取得した応答データをそのまま貼り付け、「確認」ボタンをクリックします。

「スキーマを編集する」に JSON のスキーマ定義が反映されることを確認します。

応答データを格納する変数を新規に作成して指定します。ここでは、Output としておきます。

Azure OpenAI Service からの応答データの加工

先の「HTTP要求の送信」処理で「Output」変数に応答データ (Json) が格納されています。そのままではチャットで返信させることができないので、Azure OpenAI Service からの応答メッセージを抜き出します。
「HTTP要求の送信」処理の直下に「変数管理」-「値を解析する」を追加します。

「計算式」を指定し、先ほどの AOAI からの応答データ (Json) からのメッセージデータのみを抽出します。データ構造上、複数の message.content が返される可能性があるので、そのまま結合します。
Concat(Topic.Output.choices,message.content,"")

結合したメッセージは新規に作成した変数 Messages に格納します。

チャットへの応答

「値を解析する」の直下に「メッセージを送信する」を作成し、さきほど格納した Messages 変数を応答に指定します。その後のフローは必要ないので削除します。

全体フロー

フローの全体像は以下のようになります。

その他設定変更

他のトピックが反応しないよう必要に応じて無効化しておくとよいでしょう。

動作確認

念のため、テストします。チャットコンソールから応答をみておきます。

Copilot Studio のコパイロットを Microsoft Teams に接続する

認証設定の確認

Copilot Studio からデプロイするコパイロットを指定し、「設定」-「セキュリティ」- 「認証」を確認します。規定で「Teams と Power Apps のみ」となっているはずです。

コパイロットの設定確認

「概要」の「コパイロット の詳細を編集する」、もしくは「設定」-「コパイロットの詳細」より必要な設定を行います。

チャットボットの名前やアイコンを変更することができます。この設定がそのまま Teams に反映されます。

Microsoft Teams への接続

まず、「公開」より、コパイロットを公開します。

「設定」-「チャネル」より「Microsoft Teams」を指定します。

「Teams を有効にする」をクリックします。

「ボットを開く」、もしくは「可用オプション」をクリックします。

「可用性オプション」クリック時は「リンクのコピー」から Microsoft Teams へのリンクを取得します。

Microsoft Teams に作成したアプリが表示されるので「追加」します。

これで Microsoft Teams チャットより Azure OpenAI Service と会話することができるようになりました。

まとめ

Microsoft Teams から Azure OpenAI Service に接続する、ということをテーマに確認を行いましたが、およそ 1 時間程度で構成することができました。セキュリティ強化やログ出力、例外対応など、まだ検討の余地は残っていますが、非常に簡単に Azure OpenAI Service と連携させることができます。

(2024/04/01 追記)
続編として、Copilot Studio から Azure OpenAI Services に会話履歴を連携する を纏めました。

GitHubで編集を提案
Microsoft (有志)

Discussion