1. システムとオフィスの融合
  2. media
  3. マイクロソフトソリューション Teams Microsoft 365 Copilot
  4. 【Copilot for Microsoft 365】Copilot拡張プラグインを作成してみた!②

QESブログ

【Copilot for Microsoft 365】Copilot拡張プラグインを作成してみた!②

  • LINEで送る
  • このエントリーをはてなブックマークに追加
前回のCopilot for Microsoft 365の拡張プラグインを作成しました。
※前回の記事については以下リンクを参照
【Copilot for Microsoft 365】Copilot拡張プラグインを作成してみた!①

今回は、その続きでもう少しカスタマイズしてみようと考え、日常のシーンで出てきそうな、社員情報を検索するようなものを作成しようと思います。

作成する拡張プラグインの概要

今回検索のもととなる社員情報には、名前や顔写真、保有資格、一言などが含まれているものをサンプルで用意します。プラグインには、入力された情報を元に社員情報を検索してもらい、結果をアダプティブカード(顔写真付)に出力するものを作ることにします。

アダプティブカードは、以下のような構成とします。


作ってみた

以下の手順でベースアプリのコードを拡張していきます。
① 「【Copilot for Microsoft 365】Copilot拡張プラグインを作成してみた!①」で使ったベースとなるプロジェクトを作成します。今回は、名前を「CopilotExApp2」として作成しました。

② アダプティブカードのフォーマットを定義します。ここでは、作成時に含まれている「helloWorldCard.json」をそのまま使い、内容を修正しました。


③ もととなるコードは、検索部分で NuGet のライブラリを検索しているものでした。jsonで受けた戻りをアダプティブカードとして返す実装となっているので、この部分をサンプルデータを返す実装に変更します。アダプティブカードの該当する部分に値を設定できるように、以下のような jsonデータを用意しました。iconUrl は、顔写真ファイルのリンクです。


今回のサンプルデータで登録した人は、このような方々です。※実在しない人物です。

No 氏名 所属 役職
1 福山 雅之 システム営業本部 部長
2 山上 優美 システム営業本部 課長
3 山上 彩加 システム営業本部 チームリーダー
4 松木 龍男 システム開発部  
5 保科 真子 システム開発部  
6 戸塚 孝雄 システム開発部  

 

動作確認してみた

さっそく動かしてみます。いくつかのパターンで Copilot に質問して反応を確認してみます。

① 氏名での検索

 「CopilotExApp2local で山上さんを探して」と質問してみました。

「山上」という人は、2名が該当するので想定通りの回答を得られました。アダプティブカードとして返される内容で、説明付きで返ってきました。

番号部分にマウスを合わせると、ポップアップでアダプティブカードが確認できます。写真付きなので、その人がどんな顔か調べたいときなどにも役に立ちそうです。

② 資格名での検索

 「CopilotExApp2localで、Microsoftの資格を持っている人を探して」と質問してみました。

Microsoft認定を持つとされる「山上 彩加」さんが筆頭に表示されました。今回は該当しないメンバーも説明が加わっていますが、Microsoft資格は持っていないと補足されています。毎回この回答が来るわけではありませんが、内容自体は間違って無さそうです。

③ もっと曖昧な質問

 「CopilotExApp2local を使って好きな食べ物を教えて」と質問してみました。何が聞きたいかも分からない質問ですが、、、

一言コメントで、「メロンが好き」と書いていた、松木さんが抽出されました(回答文が、ちょっと怪しいですが、、)。表示する情報が一つだからなのか、リンクではなくアダプティブカードがそのまま表示されています。


④ 複雑な質問

 「CopilotExApp2localで基本情報技術者を持っていて、果物が好きな人を探して」と条件を増やしてみます。

ここでも条件に該当する人が得られました。

Copilotプラグイン(メッセージ拡張機能)でいい感じに返せれば、簡単なRAG(拡張検索生成)構成が組めているような感じになっているように見えます。このサンプル実装でも上手く行ってそうですが、課題があります。まだ検索部分を考慮していないので少し見ていきます。
※ 他にも、、、Copilotの仕様なのかプレビュー機能が影響しているか分かりませんが、同じ質問をしてもプラグインを呼び出さずに、回答を返すケースもありました。

このサンプル実装では、検索部分を何も考えていません。プラグイン側は、どんな質問が来ても予め定義したサンプルデータを全件を返すだけの実装となっています。10名、20名くらいの規模であれば、全件返して Copilotにいい感じにまとめてもらうという使い方もありかとは思います。

100名、1000名となると、そうも行かないので事前の絞り込みが必要になってきます。検索部分をどう実装するかついては、検討する必要があります。それには、Copilotがプラグイン側にどのような検索キーワードを渡すのか把握する必要がありますので、確認してみました。

No 質問内容 プラグイン側に渡されたキーワード
1 山上さんを探して 山上さん
2 Microsoftの資格を持っている人を探して Microsoft certification
3 好きな食べ物を教えて 好きな食べ物
4 基本情報技術者を持っていて、果物が好きな人を探して basic information technology skills and like fruits

プラグインに渡されるキーワードは、この質問だったらコレが来るとは決まっていません。実行毎に変わってきます。日本語だったり、英語だったり、同じ言語であっても抽出されるキーワードに差が出たり様々です。どんなキーワードが来るか分からないと検索部分の実装は、かなり難しいものになってきます。

現在の実装では、「複雑な質問」にもあるように、複数の条件を指定したとしても 1つのパラメータで渡されます。なぜかと言うと、コマンドの引数定義が 1つだからです。アプリの [manifest.json] に以下のように定義されています。

[searchQuery]というパラメータに「プラグイン側に渡されたキーワード」で確認した値が設定されプラグイン側に渡されています。次回、パラメータの調整を試してみます。

まとめ

いかがだったでしょうか。
プロジェクト生成時に最初から実装されているサンプルコードを少し拡張して、Copilotが知らない社員情報(サンプル)を回答させる動きが確認できました。
プラグインを作成することにより、Microsoft製品内だけでなく社内システムなどの外部システムとの連携や逆に検索対象を絞り込むことができたりと様々なことができそうですね。

また、Copilot for Microsoft365 の具体的な活用方法等のブログもたくさんありますのでご覧ください!

QUICK E-Solutionsでは、「AIチャットボット構築サービス」をはじめとして、各AIサービスを利用したシステム導入のお手伝いをしております。それ以外でも QESでは様々なアプリケーションの開発・導入を行っております。提供するサービス・ソリューションにつきましては こちら に掲載しております。
システム開発・構築でお困りの問題や弊社が提供するサービス・ソリューションにご興味を抱かれましたら、是非一度 お問い合わせ ください。

※このブログで参照されている、Microsoft、Microsoft 365、Microsoft Copilot for Microsoft 365、Microsoft Teams、Azure OpenAI、その他のマイクロソフト製品およびサービスは、米国およびその他の国におけるマイクロソフトの商標または登録商標です。
※その他の会社名、製品名は各社の登録商標または商標です。

  • LINEで送る
  • このエントリーをはてなブックマークに追加

お気軽にお問い合わせください。

ページのトップへ