はじめに
同僚の休職に伴い一番困るのが、「休職した同僚しか詳しく知らない仕様」や「過去に同僚がユーザやベンダーと仕様そのものや背景」の確認です。自分がを設計書を探す、過去のメールを見返す、ベンダーに問い合わせるはコストと時間がかかりすぎます。
そこで、メール本文に仕様のやり取りが残っていることが多いので、休職者が送受信に含まれるメールをデータ化してSharePointに集約し、それをCopilot Studioで読み込ませることで、問い合わせに即座にアドバイスをくれる「仮想同僚AIエージェント」を構築しました。
仕様概要と処理の流れ
休職者の知識(メールの送受信のテキスト内容)をAIが参照できる形式(Excel)に変換し、毎日自動で最新化してCopilotに読み込ませる仕組みを作っています。
なおExecelかよと思われるかもしれませんが、sSharePointリストですとCopilot Studio のコネクタだとうまく読み込むことができなかったので、精度高く読ませることができたExcelを採用しました。
なお全ての処理の根幹はPowerShellです。
Exchange Onlineからメール取得
本当なら対象者(休職者)のメールボックスから抜きたいところですがモラル・コンプライアンス的にあまりよろしくないなで、ほぼCCに含まれているので、自分のメールボックスにある対象者からの送信が含まれるという条件を組み込み、処理が重すぎて止まらないギリギリのレベルで取得件数を絞り込んで抽出します。
※注意点:挿入図や添付は対象外です。
SharePointリストへアップサート
取得したメールの「メッセージID」を一意キー(プライマリキー)とし、SharePointリストへ最新の送受信結果をアップサート(新規追加・更新)します。
Excel化してドキュメントライブラリへ格納
アップサートしたSharePointリストからデータをローカル環境でExcelに転記し、そのExcelファイルをSharePointドキュメントライブラリへ自動アップロードします。
日次での自動実行
上記の処理を毎日自動実行させ、常に最新の対応ナレッジが更新される状態を保ちます。
ナレッジソースとしてCopilot StudioでAIボット作成
Copilot Studioのナレッジソースとして、アップロードされたExcelを指定。プロンプトで「あなたは〇〇(休職者)の知識を持つアシスタントです。過去の問い合わせ履歴から正確に回答してください」といった感じで条件をつけていき役割を明記します。
これで、ユーザーから問い合わせが来た際にAIボットに投げるだけで、過去の同僚の対応結果が残っていればそれをもとに知見を数秒のうちにまとめてくれます。
当処理の実装・運用における注意点
実際に構築するにあたり、以下の2点には注意が必要です。
SharePointリストの「5000件問題(閾値制限)
SharePointリストはアイテム数が5,000件を超えることは非推奨です。メッセージIDでアップサートをかけてるので、返信履歴はアイテム数の増加を抑えてはおり、なかなか現実的に超えることはなさそうですが、仮に超える場合は新規リストを作り、件数制限に引っかからないように意識する必要があります。
Entra IDアプリの権限とモラル
メール取得処理はEntra IDに登録したアプリケーション権限(Graph API等)経由で実行していますが、管理者権限を付与して行なっており、全アカウントのメールボックスに対して読み取りができてしまう権限を持ちます。
技術的に「他人のメールを見ようと思えば見れてしまう」状態になるため、運用側のモラルが非常に重要です。(※私自身は自アカウントのみで運用してます。)
まとめ
以上で、『【ひとり情シスソリューション】仮想同僚ナレッジで手抜きする「Copilot Agent × SharePoint × ExchangeOnline」』でした。
ナレッジソースまではプログラム通りですので期待通りできますが、AIボットの有用性は指示内容次第です。ここの指示次第で精度は変わってきますので、Copilotに相談しながら作りたい仮想同僚を作り上げればよいと思います。

