Power Virtual Agents は、2023年11月にMicrosoft Copilot Studio に名称が変更となりました。
Copilot Studio を用いると、生成型のAI (GPT) を利用したボット作成を容易に行うことができます。
今回はこちらの機能を用いて、ユーザー認証をさせ、そのユーザーの権限の範囲内でSharePoint ドキュメントライブラリのインデックス情報を検索して回答するボットを作成しようと思います。
Copilot Studio のトライアルを実施したい方はこちらをごらください。
目次
前提条件
- テナントに有効なCopilot Studio のライセンス (メッセージのライセンス) が含まている必要があります。
- Copilot を作成するユーザーにはCopilot Studio のユーザーライセンスが割り当てられている必要があります。
- Copilot を作成するユーザーには環境作成者またはシステム管理者のDataverse セキュリティロールが必要です。
- SharePoint 連携を実現するには、Graph API の設定、Microsoft Entra ID でのアプリの登録権限が必要です。
セキュリティロールの詳細はこちらに紹介があります。
チャットボットで他のユーザーと共有およびコラボレーションする (ビデオを含む) – Microsoft Copilot Studio | Microsoft Learn
ボットの作成
Copilot から新しいCopilot を選択します。こちらから新しいボットを作成することができます。

ボットに名前をつけます。
言語は日本語でも対応できるようになりました。日本語用のCopilot を作成される場合は日本語で進めてください。

System トピック
ボットの作成が完了したら、トピックを選択してSystem タブを開きます。
Conversation Start は「会話が開始したとき」というイベントで利用されるトピックです。日本語で作成した場合日本語で作成されますが、変更したい場合は対応します。

まずはMessage として、SharePoint の情報を回答してくれそうなメッセージをユーザーに送るところから行ってみようと思います。
こんにちは!社内のSharePoint の情報をまとめて回答しますよ。

こちらで一旦保存します。

Fallback
回答の作成に失敗したときに発動するトピックを準備しておきます。

3回未満のとき、それ以上のときはエスカレーションするようになっています。
ここでは、生成型の回答の失敗が3回未満のときは「別の言い方をしてくれませんか?」と促すようにしてみます。

Fallback のトピックを保存します。

データソースの接続
データソースを接続するために、System トピックを選択します。
Convertional boosting を選択します。

SharePoint のサイト構造は2回層までを記載できます。
「生成型の回答を作成する」のステップの中にある、データソースを選択します。

検索対象としたいドキュメントが配置されているSharePoint のサイトを指定します。

URLの最初の ‘https://’ を除くことはベストプラクティスになっています。
生成型の回答に SharePoint または OneDrive for Business のコンテンツを使用する – Power Virtual Agents | Microsoft Learn
英語のドキュメントを配置しておきます。
数秒~数分でインデックスが貼られます。
サンプルドキュメント: Xbox ワイヤレスアダプター(英語)

トピックを保存します。

認証設定前のボットのテスト
セッションをリセットします。


この段階では認証を設定しておらず回答が返ってきません。

認証機能の設定
Copilot Studio での設定
セキュリティから認証の設定を行います。

「手動」で設定します。

Azure ポータルでの操作
Azureポータルを開き、Microsoft Entra ID を開きます。
2023年7月にAzure ADはMicrosoft Entra ID に名称が変更されました。
App registration(アプリの登録) をクリックします。
この操作により、Copilot Studio というアプリからサインインを行ったユーザー権限の委任を受けて同じ権限で情報を取りに行くというアプリを登録することができます。

名前をつけて登録します。このアプリの名前は任意です。

概要に移ります。
アプリケーションIDを取得しておきます。

証明書とシークレットを選択します。



値の方を取得しておきます。

認証からプラットフォームを選択して構成します。

リダイレクト URIには以下のURI を入力するようにします。
https://token.botframework.com/.auth/web/redirect

アクセス許可の設定
ボットというアプリにユーザーの権限を委任する範囲を設定します。
API のアクセス許可をクリックします。

Microsoft Graph に対して次の委任されたアクセス許可を含める必要があります。
- Files.Read.All
- Sites.Read.All
上記のアクセス許可を追加していくためにアクセス許可の追加をクリックします。

Microsoft Graph を選択します。

ユーザー権限を委任するために「委任されたアクセス許可」を選択します。

SharePoint およびOneDrive の保存されているファイルについて許可を行います。

SharePoint サイトについても追加します。

OpenId のアクセス許可を展開して、openid と profile をオンにします。

このように操作します。

管理者の同意を事前に与えておきます。

スコープを追加しておきます。この同意できるときの操作を誰が行えるか、また操作の表示名を指定しておきます。

Copilot Studio でのEntra ID での設定情報の登録
これまでに取得しておきました、クライアントIDとクライアントシークレットの値を入力します。

認証を行わせるトピックの設定
トピック間の追跡を行いつつ、ログインのトピックを生成するためセッションをリセットします。

トピックを追跡させると、現在適用されているトピックが何なのかわかります。

日本語に変更しておきます。
サインインして会社の情報にアクセスします。

トピックを保存します。

認証設定後の動作テスト
トピック間の追跡をリセットします。

ログインの指示文が日本語になりました。

Loginボタンを押し、アカウントを選択してログインします。すると委任アクセス許可が表示されます。
この委任のアクセス許可は一回のみ表示されます。次回からはすぐに検証コードが出力されます。

新しいタブで検証コードが出力されますのでボタンからコピーします。

チャットで検証コードを送信します。

最初のメッセージが返答します。

サインインまでの設定が無事に完了しているとログインを行うことができます。
質問をしてみます。
英語で設定したのにも関わらず日本語で質問すると日本語で回答を得ることができます。
回答が得られました。

これでボットを無事動作させることができました。
ご参考になれば幸いです。
『SharePoint 連携を実現するには、Graph API の設定、Microsoft Entra ID でのアプリの登録権限が必要です。』と記載がありますが、それぞれ具体的にどこで権限を設定できるのかご教示お願いできますでしょうか。
また、Azureのアプリの登録ですが、Copilotを作成した時点で同名(Copilotの名称の後ろに「 (Power Virtual Agents)」が自動付与される)でアプリ登録がされているようです。この既登録に対しシークレットIDを発行するのでも問題ないでしょうか。