Copilot for Microsoft 365 について (1)

# Copilot for Microsoft 365 とは

多くのビジネス関連記事で紹介されている「Copilot for Microsoft 365 (以下「Copilot for M365」という)」ですが、マイクロソフト社の主力製品である「Microsoft 365」内で OpenAI 社の技術を活用した生成 AI を使用して、組織内のデータを元にした情報や Office 文書の生成などが行える新しい製品です。

[Copilot for Microsoft 365 の概要](https://learn.microsoft.com/ja-jp/microsoft-365-copilot/microsoft-365-copilot-overview)

現状、上記のような機能面の紹介が多い反面、サービスの構造 (アーキテクチャ) に関する情報が少なく、ブラックボックスのように感じられている方が多いのではないでしょうか？
この記事では、現在公開されているマイクロソフト社の情報を元にできる限りその構造に迫ってみたいと思います。

![Copilot for Microsoft 365 アーキテクチャー図](https://learn.microsoft.com/ja-jp/microsoft-365-copilot/media/microsoft-365-copilot-flow.png#lightbox)

まず、以下は上図にも記載されている Copilot for M365 のデータフローに関する大まかな流れとなります。
1. Microsoft 365 Apps からのユーザープロンプトが Copilot に送信される
1. Copilot が前処理のためにグラフとセマンティックインデックスにアクセス
1. Copilot が修正したプロンプトを LLM (大規模言語モデル) に送信
1. Copilot が LLM の応答を受信
1. Copilot が後処理のためにグラフとセマンティックインデックスにアクセス
1. Copilot が応答とアプリコマンドを Microsoft 365 Apps に送り返す

この 1 〜 6 の中でも特に 2 〜 5 の処理が今回ご説明したいポイントとなります。

# RAG (Retrieval-Augmented Generation)

この 2 〜 5 の処理は、生成 AI のアプリケーション開発において「RAG (Retrieval-Augmented Generation) 」と呼ばれている手法となります。
これは現在、生成 AI を活用したアプリケーションを開発する際に主流となっている手法で、外部ソースから取得した情報を用いて、生成 AI モデルが生成するアウトプットの精度と信頼性を向上させることができます。

RAG について詳しくは、マイクロソフトと生成 AI の分野で連携している NVIDIA社の記事を参照してください。

[Retrieval-Augmented Generation (RAG) とは？](https://blogs.nvidia.co.jp/2023/11/17/what-is-retrieval-augmented-generation/)

生成 AI では、この RAG の手法を活用して、任意の情報を元にした生成を行うケースが多いのですが、その開発の際に最もよく使用されるフレームワークが「LangChain」と呼ばれるオープンソースのライブラリです。

[LangChain：Introduction (英語サイト)](https://python.langchain.com/docs/get_started/introduction)

この LangChain は開発者に以下のような機能を提供します。
- Model I/O (モデル入出力)：
このモジュールは、言語モデルとのインターフェースを提供します。言語モデルへの入力と出力の管理を担当し、ユーザーがモデルと対話するための基盤を形成します。これにより、様々な言語モデルを共通のインターフェースを通じて操作することが可能になります。
- Retrieval (検索)：
このモジュールは、アプリケーション固有のデータとのインターフェースを提供します。これにより、言語モデルが特定のアプリケーションやユースケースに関連するデータを取得し、それを処理することができます。例えば、特定のトピックに関する情報をインターネットから検索したり、オンプレミスのデータベース内の情報にアクセスしたりする場合に使用されます。
- Agents (エージェント)：
このモジュールは、モデルが高レベルの指示に基づいてどのツールを使用するかを選択することを可能にします。これは、言語モデルが単にテキストを生成するだけでなく、特定のタスクを遂行するために必要なリソースやツールを選択し、それらを使って課題を解決するための処理を行います。

この内容からもご想像頂けるかも知れませんが、RAG の処理の中ではユーザーが入力したプロンプトを解析した上で検索を行い、必要な処理を呼び出し、LLM (大規模言語モデル) による生成を行うなど一連の処理を行います。

また、その事前処理として処理の対象としたいデータをチャンク化 (分割) し、エンベディング (埋め込み) と呼ぶベクトルデータの埋め込み処理を行い、ベクトル・データベースに格納しておきます。

この事前処理ですが、Copilot for M365 の場合、「セマンティック・インデックス (Semantic Index)」の作成となります。
これは、Microsoft 365 内で行われている活動を記録したデータベースである「Microsoft Graph」とテナント上に保存されているデータを元に作成されたベクトル・データベースということができます。
このインデックスを元に RAG を活用した生成を行うことで Copilot for M365 の機能が実現されています。

このように RAG で行う処理の内容はアプリケーションの要件ごとに異なりますが、単に LLM にプロンプトを投げて生成されたものを受け取るだけではないということを覚えておいて頂ければと思います。

# Semantic Kernel

そして、この LangChain と同様の処理を行うのがマイクロソフト社が開発した「Semantic Kernel」です。

[What is Semantic Kernel? (英語サイト)](https://learn.microsoft.com/en-us/semantic-kernel/overview/)

この記事の中でも Copilot for M365 を構成する「Copilot スタック」の中心として RAG にあたるオーケストレーションの処理に Semantic Kernel が利用されていることが述べられています。
以下は、同様に Microsoft Learn のページに記載されている図ですが、AI モデルの選択やプロンプトの処理、LLM や必要なサービスの呼び出しが Semantic Kernel を中心に行われていることをご確認頂けるかと思います。

![Understanding the kernel in Semantic Kernel](https://learn.microsoft.com/en-us/semantic-kernel/media/the-kernel-is-at-the-center-of-everything.png)

このようなプロセスを経て、Microsoft 365 に生成 AI の機能を付加している Copilot for Microsoft 365 ですが、重要な仕組みはこれだけではありません。
次回は、Copilot for M365 のもうひとつの重要な機能である Office 文書の作成に関連する構造に触れたいと思います。