はじめに
こんにちは。Identity チームと言いつつ最近は Microsoft が次々に発表する AI Service ばかり触っているすかんくです。
今回は Microsoft Teams で Azure OpenAI(以降度々 AOAI)を利用するのに必要な各種機能を、ARM テンプレートを使って自動デプロイしてみます。
ARM テンプレートは Azure リソースをコードで管理し、いわゆる Infrastructure as Code 化することが可能な機能であり、今回であれば 10 分程度の事前準備だけで Microsoft Teams から AOAI を利用することが可能になります。ということで 10 分お付き合いください、ではいきましょう!
事前準備
自動デプロイに必要なものをリスト化で記載します。
| 項目 | 説明 |
|---|---|
| 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 を追っていきたいと思います。ではまた!





