Copilot Studio の Upload files 機能に自動でファイルをアップロードする


# はじめに

これまでいくつかの記事で紹介してきた通り、Copilot Studio では、ファイルをアップロードしたり、URL を指定したりするだけで、その情報を基に回答を返してくれるチャットボット (※) を作成できます。

※最近はエージェントとなっていますが、以後エージェントと表現しますが、テーブル名はコパイロットやボットという表現が含まれています

https://qiita.com/Takashi_Masumori/items/77c3f1bcce188f0df869

https://qiita.com/Takashi_Masumori/items/359ba52e5db2ca862d94

個人的に、ノーコードで作成するのであれば、回答の精度、サポートしているファイルの種類、ファイルサイズの上限などの観点から、以下のファイルを直接アップロードする機能をお勧めしています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/5301d562-714b-4aad-ab41-62da50f2aaa7.png)

https://learn.microsoft.com/ja-jp/microsoft-copilot-studio/nlu-documents

ただし、こちらのファイルアップロード、毎回手動でファイルをアップロード、削除する必要があり、ファイルの数が多い場合や、定期的にファイルのメンテナンスをしたい場合面倒です。

そのため、今回は、SharePoint ドキュメントライブラリにファイルをアップしたら、自動で Copilot Studio にファイルアップロードする方法を紹介します。

# 参考情報

まず、今回の方法は、以下からインストールできる Copilot Studio Kit の一部を解析し、試行したものです。マイクロソフトの製品開発チームが提供しているフローを参考にしていますが、Microsoft Learn などで案内されている公式の手順ではないため、その点をご承知おきください。

https://appsource.microsoft.com/ja-jp/product/dynamics-365/microsoftpowercatarch.copilotstudiokit?tab=overview

# エージェント が保存される Dataverse テーブル

まず、Copilot Studio でエージェントを作成した際、エージェントにナレッジを追加した際に Dataverse のテーブルに情報が格納されます。

Copilot Studio Kit 内の「Synchronize files into Copilot Studio Child Flow」内では、以下の二つのテーブルが利用されていました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/b9a6b87f-6fc8-4d10-8f8a-e1b97af561e0.png)

確認してみると、こちらのテーブルにエージェントの一覧があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/95ee8f79-98e0-4d40-ae3e-d132b35955d9.png)

そして、こちらのテーブルに追加したナレッジが格納されていました。コンポーネントの種類を「ボットの添付ファイル」にして、filedata にコンテンツを格納するようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/edd7101e-5c49-45aa-a8df-006c12f2249f.png)

また、実際にこちらにレコードを登録する際は、以下のスキーマ名と parentbotid に注目する必要がありそうです。parentbotid はコパイロットテーブル側のレコードと紐づいていました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/c82f9c5e-81b8-4eff-8b64-e2e42c135ff2.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/1119c88f-917b-473e-8cba-dffabca562c3.png)

# フローの作成

まず、フローの全体像は以下のような感じです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/ec9d984e-dd6b-4638-9b12-223d7884b948.png)

ドキュメントライブラリにファイルがアップロードされたらコンテンツを取得した後、コパイロットテーブルから情報を取得しています。今回は、対象となるエージェントは固定のため、直接 GUID を指定しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/b494ffe3-951e-401a-acd3-d1dfd37cf863.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/70c25a57-0fbe-4a42-b7ac-999495aa3779.png)

そして、コパイロットコンポーネントテーブルに対して行を追加しています。Parentbotid 列にてコパイロットテーブルと紐づけて登録をします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/6c2b2d57-9a3f-42e7-ab1b-3883813ddff5.png)

スキーマ名はよくわかりませんが、Copilot Studio Kit と同じように登録しました。なお、ファイル名に日本語が含まれているとスキーマ名でエラーが発生するため、ナレッジのファイル名は英語にする必要があります。

なお、Dataverse で親レコードと紐づけて Power Automate で登録する方法は、以下のブログを参考にするとよいかと思います。

https://qiita.com/skuramoto/items/11f1111a8eba7673714c#%E6%A4%9C%E7%B4%A2%E5%88%97%E3%81%B8%E3%81%AE%E5%80%A4%E3%81%AE%E6%8C%BF%E5%85%A5

なお、コンポーネントの種類は選択肢になっているようで、「ボットの添付ファイル」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/3432ff2d-e017-408d-ae75-6bca48a0bdbb.png)

一旦行を作成した後、ファイルをアップロードします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/db221f5c-e62c-49aa-b46b-15165373c19b.png)

最後に、削除処理を見越して、リストに Dataverse の行の GUID と、ドキュメントライブラリの行の ID を控えておきたいと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/ff5ccca2-d4b6-4b59-a5f0-ae79fc19f0ae.png)

# 動作確認

問題なくフローが動作しました。
コパイロットコンポーネントテーブルを見てみると、うまく登録できているようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/aed60a03-bab3-4931-8278-32fa79293eee.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/a992a39d-745d-42fd-84b3-5f2608ae9271.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/1d21aa4d-4d3c-446f-942b-a73c1e4473bb.png)

コパイロットテーブルとのリレーションも問題なさそうです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/4ac336dc-6ff8-4ee8-a64a-3475fbd76beb.png)

そして、Copilot Studio で該当のエージェントを開き、ナレッジを見てみると、こちらにもファイルが見えてきており、早速インデックスが作成されているようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/2e3e1afc-7be7-4eed-be82-6edbe3e3004b.png)

# 削除処理

もし、ドキュメントライブラリでファイルを削除した際、コパイロットコンポーネントテーブル側も削除したい場合は、リストに行を保存しておき、削除するようにします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/13493a55-bb76-42a2-a534-112cea0fa6b8.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/35da26ff-a9e1-46df-a2bb-cdb84c5e0a3c.png)

# まとめ

今回は、SharePoint ドキュメントライブラリにファイルをアップしたら、自動で Copilot Studio にファイルアップロードする方法を紹介しました。ファイルの数が多い場合や、定期的にファイルのメンテナンスをしたい場合、全て手動で行うのは手間だと思いますので、一つの代替案になるかもしれません。

あとは、SharePoint のナレッジについて、リストは対象外のため、例えば、Power Apps で問い合わせを受け付けるようなアプリを作成しており、リストにナレッジが蓄積されているような場合は、以下のような運用ができるかもしれません。

① 定期的に Power Automate でリストの情報を CSV に吐き出して、そのファイルをエージェントのナレッジに追加する

② 追加が終わったら通知をして、(余裕をもって翌日くらいでもいいかも) インデックス化が終わっていることを確認して動作確認をしたら再公開する