はじめに
こんにちは。Identity チームと言いつつ最近は Microsoft が次々に発表する AI Service ばかり触っているすかんくです。
今回は Microsoft Teams で Azure OpenAI(以降度々 AOAI)を利用するのに必要な各種機能を、ARM テンプレートを使って自動デプロイしてみます。
ARM テンプレートは Azure リソースをコードで管理し、いわゆる Infrastructure as Code 化することが可能な機能であり、今回であれば 10 分程度の事前準備だけで Microsoft Teams から AOAI を利用することが可能になります。ということで 10 分お付き合いください、ではいきましょう!
参考元・謝辞
本記事内で用いる ARM テンプレートは、Azure Integration Services Blog Community にて Drac Zhang 氏が公開された ARM テンプレートをベースに、私が使いやすいよう若干のカスタマイズをしたものとなります。Drac Zhang 氏にはこの場を借りて感謝申し上げます。
事前準備
自動デプロイに必要なものをリスト化で記載します。
項目 | 説明 |
---|---|
Azure サブスクリプション及びリソースグループ | デプロイ先に用いるサブスクリプション(及びリソースグループ)及びその管理権限 |
Azure OpenAI Endpoint | AOAI サービスの API エンドポイント URL |
Azure OpenAI API Key | AOAI サービスの API キー |
Teams チャネル ID | GPT を利用する Teams チャネル |
Teams グループ ID | GPT を利用する Teams チャネルのグループ ID |
Teams Bot ユーザー | GPT 利用時の宛先に用いる Bot ユーザー |
Azure ストレージアカウント名 | Azure ストレージアカウント上に作成したコンテナ名(チャットログを保存するリソース) |
Azure ストレージアカウントKey | Azure ストレージアカウント上に作成したコンテナ名(チャットログを保存するためのアクセスキー) |
Azure コンテナー名 | Azure ストレージアカウント上に作成したコンテナー名(チャットログの実質的な保存先) |
Azure サブスクリプション管理者
- 対象となる機能群をデプロイするサブスクリプション(及びリソースグループ)と紐づく管理ユーザーを準備してください
Azure OpenAI Endpoint / Azure OpenAI API Key
- Azure OpenAI Studio より、[チャット] > [コードの表示] をクリックし、[エンドポイント] および [キー] に記載されている情報を取得してください
- [エンドポイント]は “https:// ~ api-version=yyyy-mm-dd-preview” までとなります
- AOAI のアップデートによって、[エンドポイント] に表示されるパスが一部のみになっているケースがあります
- そのような場合には、コードを “curl” 等に変更して、コード内に表示される [エンドポイントURL] をコピーしてあげてください
Teams チャネル ID / グループ ID
- デプロイするチームとチャネルを作成し、[・・・] > [チャネルへのリンクを取得] をクリックします
- 取得したリンクに対して以下の処理を実施し、情報を保管します
- チャネル ID:取得したリンクの ”channel/” 以降(“19” から始まり “tacv2” まで)を取得し、以下の置換処理を行う
- “%3a” を “:” に置き換え
- “%40” を “@” に置き換え
- グループ ID:取得したリンクの “groupID” から始まるハイフン込み 36 桁のGUID
- チャネル ID:取得したリンクの ”channel/” 以降(“19” から始まり “tacv2” まで)を取得し、以下の置換処理を行う
Teams Bot ユーザー
- Bot 用ユーザーを作成し、Teams ライセンスを付与
- デプロイ先チャネルにメンバーとして追加する
- 利用者が Bot だと分かり易い [表示名] や [アイコン] にすることを推奨
Azure ストレージアカウント名 / アクセス Key / コンテナー名
- チャットログを保管する “Azure ストレージ アカウント” を作成し、名前を保管します
- 作成したストレージ アカウントにて、[コンテナー] からチャットログ保管先のコンテナーを作成し、名前を保管します
- 作成したストレージ アカウントにて、[アクセスキー] から [key1 または key2] を取得します
自動デプロイ
リストに記載した情報がすべて揃ったら以下の作業を実施します。
① 以下 URL にアクセスし、[Deploy to Azure] をクリックする
②以下のような画面が表示されるため、取得した情報を入力します
- 以下補足情報
- [Logicapp_name] には任意の LogicApps アプリ名を入力します
- デフォルトでは “AOAIinTeams” となっています
- [Openai_role] には AOAI にどのような動作を期待するかを指示するための、システムプロンプトを入力します
- デフォルトでは “アシスタントツール” として動作するようシステムプロンプトが入力されています
- [Container_name] はデフォルトでは “gpt” となっています
- [Connections_teams_name] や [Location] は既定値から変更不要です
- [Logicapp_name] には任意の LogicApps アプリ名を入力します
③必要情報を入力したら、[確認と作成] > [作成] の順で進めます
④デプロイが完了したら、[作成したロジック アプリ] のリソースに移動し、[手動作業] を実施します
手動作業
①移動した LogicApps リソースから [API 接続] > [teams] をクリックします
②[API 接続の編集] > [承認する] をクリックし、Teams Bot ユーザーにて認証を行います
③接続が完了したことを確認し、[保存] をクリックします
動作確認
- デプロイ先チャネルで Teams Bot ユーザーに対してメンション付きでメッセージを送信し、適切な応答が得られることを確認します
- デプロイ時に指定した Azure ストレージアカウントのコンテナーを確認し、チャットログがスレッド毎に保管されていることを確認します
以上で動作確認も完了です!全体通して慣れれば 10 分で終わりそうな作業ですね(?)
利用上のポイント
Good
- Teams チャネルごとにシステムプロンプトを指定することが可能なため、窓口を用途毎に分散することで応答精度の向上が図れます
- ログの保管先は1カ所のコンテナーに集約したり、チャネルごとに分散保管するなど、柔軟な対応が可能です
Bad
- 現時点では、個人チャット(DM)での利用には対応していません
その他
- デプロイ後にフロー修正などはご自由にどうぞ!!
- 個人的には AOAI の応答に多少の時間が掛かることから、フローのトリガー後に “回答を準備中です…” とスレッドに投稿するなどの微調整は必要だなと考えています
- 実際に弊社で利用している Slack-in-GPT では、回答準備中にそのような投稿をしてくれ、ユーザー体験として品質が高いなと感じるので、継続的に改善していきたいと思います
まとめ
いかがだったでしょうか?Azure OpenAI を機に AWS 使ってたけど Azure 利用を始めた組織の方々も多くいらっしゃるかと思います。この機に是非 ARM テンプレートを用いた Infrastructure as Code にチャレンジしてみてはいかがでしょうか?
引き続き Microsoft の AI Service を追っていきたいと思います。ではまた!