Power Virtual Agents と Cognitive Services によるボット開発

### Power Virtual Agents

Power Virtual Agents は、Microsoft が提供している、ノーコード、ローコードでインテリジェントなチャットボットを作成できるサービスです。
Microsoft Teams と連携し、自然言語で質問に回答できるチャットボットを作成でき、Power Automate により、他サービスとの連携も可能となります。
Microsoft Teams に限定されたプランと、Web アプリとしても利用可能なプランがあり、前者は Teams を利用していれば無償で利用可能です。Microsoft Teams にアプリとして追加し、Microsoft Teams 上でチャットボットの開発が行えます。
ただし、ボットが使用できるコネクタなどに制限があります。詳細は[MS Learn のドキュメント](https://learn.microsoft.com/ja-jp/power-virtual-agents/requirements-licensing-subscriptions#power-virtual-agents-for-microsoft-teams-plan)など、 Microsoft さんのドキュメントを確認ください。
後者のプランでは、有料のスタンドアロン Power Virtual Agents サブスクリプションが必要です。

### FAQ ボットを Power Virtual Agents で開発する

社内の FAQ データを使って、社員の質問に回答する FAQ ボットを  Power Virtual Agents を使って Teams 上に作成してみます。
Power Virtual Agents は、トピックという単位で、どのようなフレーズを受けてどのようなアクションを行うかを定義します。
例えば、下図のトピックでは、朝礼の日時に関する質問のフレーズをトリガーに、回答のメッセージを表示しています。

![スクリーンショット_20230217_173033.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3104149/7f64cad3-b68f-94ce-07b4-c9f24bdcf78f.png)


このトピックは新規に作成する以外に、既存の FAQ データから作成することも可能です。
ただし、現状では、下記のような条件があり、ファイルのアップロードはできず、ログインが必要な Web ページからもトピックの作成ができません。この点は導入する上での障害になるかもしれません。

- Web ページまたはサポートされているファイルの種類を指している
- インターネット上の誰でもアクセス可能
- ユーザーがログインする必要はない
- HTTPS を使用している (https:// で始まる)

試しに、下図のような FAQ サイトの URL をデータとして渡してみます。

![スクリーンショット_20230217_162013.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3104149/de5cc860-6fc4-1214-3c41-0424cbde1589.png)

Power Virtual Agents のポータル（または Microsoft Teams のアプリ）で任意名称のチャットボットを作成します。
チャットボットの作成が完了した後、「トピック」メニューの「トピックの提案」を選択し、FAQ サイトの URL を入力してインポートを開始します。

![スクリーンショット_20230217_161930.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3104149/157e960e-cf67-c2be-072d-66b0e0d61437.png)

データが読み込まれ、「トピックの提案」に質問をトリガーとして回答をメッセージで返すトピックが追加されました。
これらを選択して「トピックに追加」を実行すると、新しいトピックが追加されます。

![スクリーンショット_20230217_162923.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3104149/564cc5a6-a265-8272-fff8-c5fd77205581.png)

トピックに追加後、質問として入力した文字列、またはそれに近似した内容を入力すると、対応する回答がメッセージとして返ってきます。

![スクリーンショット_20230217_163733.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3104149/e5a3a24f-491d-94f4-e02c-c3ed783f7b11.png)

このボットを公開し、チャネルとして Microsoft Teams を有効にすると、Teams からこの FAQ ボットが利用可能となります。

### Azure Cognitive Services for Language

Azure Cognitive Services for Language には、自然言語処理（NLP）を使って、カスタムのナレッジベースから適切な回答を見つけ出す、カスタム質問応答（Custom question answering）という機能があります。
従来、この機能は、QnA Maker というサービスで提供されていましたが、現在はAzure Cognitive Services for Language に統合されており、2022/10/1 以降は新たに QnA Maker リソースを作成できなくなっています。
カスタム質問応答では、トピックではなく、基本的には、下図のように質問と応答がペアとなったナレッジベースを予め作成しておき、AI が質問から適切な回答を見つけ出す流れになります。

![スクリーンショット_20230217_183236.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3104149/985d2591-21f2-e683-93ea-4c4eda2818ca.png)

ナレッジベースには既存の FAQ データからデータを追加することが可能です。Web ページから追加できる他、ファイルのアップロードによる追加も可能です。データのエクスポートも可能です。

### FAQ ボットを Power Virtual Agents とカスタム質問応答で開発する

Power Virtual Agents からカスタム質問応答のナレッジベースを使って質問に回答することが可能です。
詳細は[MS Learn のドキュメント](https://learn.microsoft.com/ja-jp/azure/cognitive-services/language-service/question-answering/tutorials/power-virtual-agents)にあり、手順が長いためここでは説明を割愛しますが、処理の流れとしては、Power Virtual Agents のトピックは使わず、システムフォールバックトピックという任意の質問を受け付けるトピックを利用し、このトピックから Power Automate のフローを利用してカスタム質問応答に質問を渡し、逆の流れで質問者に回答を返す形になります。

手順に従って構築したFAQボットに、元データの質問とは異なる質問をしてみました。

元データの質問：「オフィスの入退室はどうすればいいですか。」
入力した質問：「オフィスの入り方」

元データの質問：「出張時にセキュリティカードがない場合はどうすればいいですか。」
入力した質問：「セキュリティカードはどうやって借りればいい」

Power Virtual Agentsのみで構成した場合は、対応するトピックが見つからない旨を回答する動作となりましたが、カスタム質問応答と連携した場合は、関連性の高い回答が返ってきました。

![スクリーンショット_20230218_091420.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3104149/cbf3d5bf-82e6-4c47-c33d-9009c8a3b1db.png)

なお、Microsoft Teams の Power Virtual Agents アプリで試したところ、ここで作成した Power Automate のフローとつなぐことはできませんでした（Web アプリからはつなぐことができました）

### Power Virtual Agents とカスタム質問応答の仕組みの違い

FAQ ボットの構成として、Power Virtual Agents のみで構成する場合と、カスタム質問応答を含める場合をご紹介しました。
前者は機密性の高い FAQ データのインポート方法や FAQ データの他システムとの連携、後者はライセンスや構成の複雑さが難点となるように思いますが、トピックやナレッジベース以外にも仕組みの異なる点があるため、今後も比較調査してみたいと思います。