APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

【Azure OpenAI Service】ChatBot構築入門

はじめに

お久しぶりです。

約5ヶ月前にPMやってみた記事を投稿しました、ACS事業部の佐藤です。

techblog.ap-com.co.jp

今回は技術ブログらしく(?)Microsoft Teams から Azure OpenAI Service (以下、Azure OpenAI) を呼び出して ChatBot を構築しようとして躓いたポイントについて、参考記事の紹介と共にお話させていただきます。

ChatBot作成の概要

何ができる?

Microsoft Teams の特定チャネルで新規メッセージを投稿すると、同チャネルでそのメッセージに対して Azure OpenAI が返答してくれます。 ただし、 Azure OpenAI 自身の返答を新規メッセージ扱いしないという制約を設けます。

ダメな例:下手に実装するとOpenAIが英語で独り言をし始め、課金されます

大まかな実装手順

ここでは詳細な手順は記載しません。鬼門は Azure Logic Apps でした

  1. Microsoft Teams のチャネルを準備する
  2. Azure OpenAI を作成する
  3. Azure Logic Apps を作成する
  4. Microsoft Teams でメッセージを送信し、正常に動作するか確認する

一見すると簡単なようで、いくつか躓きポイントがあります。

躓きポイント

Azure OpenAI を作成する時は クォータの制限 に気を付けよう

結論から述べると、1つのサブスクリプションにおいては 同一リージョンに 3 つまでしか Azure OpenAI はデプロイできません

私はデプロイされない Azure OpenAI が使えるようになるまで一生待機した挙げ句、エラー文を見てこの事実に気付きました。

この場合、"EastUS" リージョンに追加の Azure OpenAI をデプロイできません

公式ドキュメントにクォータの制限について他にも記載があるため、以下をご確認ください。

learn.microsoft.com

Azure Logic Apps で Azure OpenAI にアクセスするには HTTP を用いると良い

Azure Logic Apps の ロジックアプリデザイナー で OpenAI を検索するといくつかヒットします。

しかし、これらは OpenAI 公式の方に繋ぎに行こうとする(api キー しか指定できない&Azure OpenAI へのアクセスには URL と api キー が必要)ため、 Azure OpenAI の場合は HTTP で作成すると良さそうです。

今回非常に苦戦した部分でしたが、以下の記事で解決しました。今回一番参考になった記事です。

zenn.dev

Azure Logic Apps で条件分岐させる時は null に気を付けよう

Azure OpenAI 自身の返答を新規メッセージ扱いしないという制約があるため、bot の返答か否かを判定し、分岐させる必要がありました。 しかし、いざトリガーしてみると以下のエラーが発生しました。

どうやら null が条件分岐の際に参照されるとエラーとなるようです。
そういう訳で、一時的な対処ですが bot の場合に "メッセージ from" が "null" になることを利用し "メッセージ from" 値の長さが "0" の場合(つまり bot の場合)に Logic Apps を終了するよう実装しました。

本音としては bot か否かを判定させたいのですが、どのパラメータが実際にどんなデータを持っているのかは未調査のため後日また紹介できればと思います。
こちらに関して参考にさせていただいた記事は以下になります。

rksoftware.hatenablog.com

おわりに

単純な実装の場合は Azure OpenAI よりも Azure Logic Apps の方が意外と難しい、という話でした。
今回は最低限動くChatBotの構築を目指していたために api-key をそのまま Azure Logic Apps 上に直書きしていたり、条件分岐が甘かったり、RBACによるアクセス制御を考慮していないといった課題もあるため、本記事の手順だけを参考に本番環境の実装を行うことは非推奨です。ちょっとした動作確認目的で参考にしていただければ幸いです。

ちなみに、未検証ですが本家の OpenAI を利用する場合は簡単に出来そうな感触があるため、本記事の反応が良ければ検証の上、改めて紹介させていただくかもしれません。

また、余談ですが Google Bard が日本語対応したそうです。(試験運用段階 & もうご存知の方も多いかと思いますが)

将来、 Bard にAPI連携機能が実装された折には「Teams から複数の ChatBot に同時に質問して回答を比較する」といった使い方も出来るようになるかもしれません。期待が広がります。

ACS事業部のご紹介

私達ACS事業部はAzure・AKSなどのクラウドネイティブ技術を活用した内製化のご支援をしております。
www.ap-com.co.jp また、一緒に働いていただける仲間も募集中です!
今年もまだまだ組織規模拡大中なので、ご興味持っていただけましたらぜひお声がけください。 www.ap-com.co.jp

本記事の投稿者: 佐藤光
AKSをメインにインフラ系のご支援を担当しています。