🤖

Microsoft 365 Copilot 取得 API を使って RAG データを取得する

に公開

はじめに

Microsoft Build 2025 で発表された Microsoft 365 Copilot 取得 API を、ようやく自分の環境で試せるようになったため、動作を確認します。取得 API はすでに一般提供されており、v1.0 エンドポイントで試せます。

https://learn.microsoft.com/ja-jp/microsoft-365-copilot/extensibility/api/ai-services/retrieval/overview?WT.mc_id=M365-MVP-5002941

Microsoft 365 Copilot 取得 API は、Microsoft 365 Copilot のセマンティック インデックスを使用します。セマンティック インデックスは、すべてのファイル形式に対応しているわけではないため、注意してください。

https://learn.microsoft.com/ja-jp/microsoftsearch/semantic-index-for-copilot?WT.mc_id=M365-MVP-5002941

今回は、サンプルとして Microsoft Online サービスの SLA ドキュメント (Word ファイル) を使用します。ファイルは、あらかじめ SharePoint のドキュメント ライブラリにアップロードしておきます。

Microsoft Graph 検索 API

まず、通常の Microsoft Graph 検索 API を実行します。https://graph.microsoft.com/v1.0/search/query に対して、「メールの稼働率はどのくらいですか」という質問で検索します。

結果として、次の JSON が返されます。自然文をキーワードに分割して検索していますが、検索結果はありませんでした。

{
 "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#Collection(microsoft.graph.searchResponse)",
}  "value": [
    {
      "searchTerms": [
        "メール",
        "の",
        "稼働",
        "率",
        "は",
        "どの",
        "くらい",
        "です",
        "か"
      ],
      "hitsContainers": [
        {
          "total": 0,
          "moreResultsAvailable": false
        }
      ]
    }
  ]

Microsoft 365 Copilot 取得 API

次に、Microsoft 365 Copilot 取得 API を実行します。https://graph.microsoft.com/v1.0/copilot/retrieval に対して、同じ質問で検索します。

結果として、次の JSON が返されます。先ほどとは異なり、検索結果が返ります。内部でチャンク化されているため、同じファイルでも一致する複数の部分が返却されます。

{
  "retrievalHits": [
    {
      "webUrl": "https://karamem0.sharepoint.com/Shared Documents/OnlineSvcsConsolidatedSLA(WW)(Japanese)(November2025)(CR).docx",
      "extracts": [
        {
          "text": "  \r\n**追加条件:** お客様は、お客様が Duet Enterprise Online User SL の前提条件として購入した SharePoint Online Plan 2 User SL のサービス クレジットの適用を受けることができる場合に限り、Duet Enterprise Online のサービス クレジットの適用を受けることができます。  \r\n[目次](\\l \"TOC) / [定義]()  \r\nExchange Online  \r\n**ダウンタイム:** ユーザーが Outlook Web Access を使用して電子メールを送受信することができない期間。このサービスには予定されていたダウンタイムはありません。  \r\n**稼働率:**稼働率は次の式を使用して計算されます。  \r\nユーザー時間  \\( 分 \\) \\-  ダウンタイム   ユーザー時間  \\( 分 \\)  x 100   \r\nダウンタイムは、ユーザー時間単位で測定されます。つまり、各当該期間につき、ダウンタイムは、当該期間に発生した各インシデントの期間 \\(分\\) の合計に、かかるインシデントの影響を受けたユーザーの数を乗じた時間となります。  \r\n**サービス クレジット:**\r\n<table>\r\n<tr>\r\n<th>  \r\n稼働率\r\n</th>\r\n<th>  \r\nサービス クレジット\r\n</th>\r\n</tr>\r\n<tr>\r\n<td>  \r\n99.9% 未満\r\n</td>\r\n<td>  \r\n25%\r\n</td>\r\n</tr>\r\n<tr>\r\n<td>  \r\n99% 未満\r\n</td>\r\n<td>  \r\n50%\r\n</td>\r\n</tr>\r\n<tr>\r\n<td>  \r\n95% 未満\r\n</td>\r\n<td>  \r\n100%\r\n</td>\r\n</tr>\r\n</table>\r\n\r\n  \r\n**OWA 可用性サービスレベルは、次のような状況には適用されません。**  \r\nサービス妨害攻撃 \\(DoS\\)  \r\nMicrosoft 365 テナントの誤構成  \r\nMicrosoft 365 の境界外のネットワークの問題  \r\nMicrosoft 365 送受信制限の超過  \r\n拡張機能 \\(テナントのカスタム ポリシーやアプリなど\\) による問題  \r\n第三者によるインシデント \\(ISP、OnPrem など\\)  \r\n**Exchange 電子メール配信時間の稼働率**  \r\n**M365 内部電子メール配信**  \r\nM365 内部電子メール配信は、Microsoft 365 の境界内の当該期間中の秒単位で計測されたメッセージの上位 95% として定義され、次のような状況に適用されます。  \r\n**着信から Microsoft 365 クラウドでホストされているメールボックスまで:**メールが Microsoft 365 の境界に入った時点から、Microsoft 365 クラウドでホストされているメールボックスに配信されるまでの経過時間。  \r\n**テナント内の Microsoft 365 から Microsoft 365 クラウドでホストされているメールボックスまで \\(テナント間は除外\\):**Microsoft 365 クラウドでホストされているメールボックスからメールが送信された時点から、そのメールが別の Microsoft 365 クラウドでホストされているメールボックスに配信されるまでの経過時間。  \r\n**Microsoft 365 クラウドでホストされているメールボックスから外部の受信者まで:**Microsoft 365 テナントの境界内で遅延が障害として特定された場合に、Microsoft 365 クラウドでホストされているメールボックスから外部の受信者にメールが送信された時点からの経過時間。  \r\n**Microsoft 365 **",
          "relevanceScore": 0.76488797333149
        },
        {
          "text": "  \r\n**リレーから外部の受信者まで:**Microsoft 365 の境界内で遅延が障害として特定された場合に、メールが着信コネクターを経由してお客様のオンプレミス環境から Microsoft 365 の境界に入り、Microsoft 365 テナントの境界を出るまでの経過時間。  \r\nM365 内部電子メール配信は計測され、経過時間順に並べ替えられます。上位 95% の計測値を使用して、当該期間の平均配信時間を作成します。  \r\nお客様は、当該期間の電子メール配信の上位 95% が次のしきい値を超えた場合、サービス クレジットの適用を受けることができます。\r\n<table>\r\n<tr>\r\n<th>  \r\n\t平均電子メール配信時間\r\n</th>\r\n<th>  \r\nサービス クレジット\r\n</th>\r\n</tr>\r\n<tr>\r\n<td>  \r\n1 分を超える\r\n</td>\r\n<td>  \r\n25%\r\n</td>\r\n</tr>\r\n<tr>\r\n<td>  \r\n4 分を超える\r\n</td>\r\n<td>  \r\n50%\r\n</td>\r\n</tr>\r\n<tr>\r\n<td>  \r\n10 分を超える\r\n</td>\r\n<td>  \r\n100%\r\n</td>\r\n</tr>\r\n</table>\r\n\r\n  \r\n**保証電子メール配信**  \r\nMicrosoft 365 の境界内での保証電子メール配信は、送信に成功した電子メールのメッセージ数を指します。これについて予定されたダウンタイムはなく、M365 の境界内の障害にのみ適用されます。  \r\n稼働率:稼働率は次の式を使用して計算されます。  \r\n月の総時間  \\( 分 \\)\\- ダウンタイム 月の総時間  \\( 分 \\)   x 100   \r\nダウンタイムは、利用できなかったサービスの割合を乗じた時間数 \\(分単位\\) を歴月にわたって合計したものです。  \r\n**サービス クレジット:**\r\n<table>\r\n<tr>\r\n<th>  \r\n稼働率 \r\n</th>\r\n<th>  \r\nサービス クレジット \r\n</th>\r\n</tr>\r\n<tr>\r\n<td>  \r\n99.9% 未満 \r\n</td>\r\n<td>  \r\n25% \r\n</td>\r\n</tr>\r\n<tr>\r\n<td>  \r\n99% 未満 \r\n</td>\r\n<td>  \r\n50% \r\n</td>\r\n</tr>\r\n<tr>\r\n<td>  \r\n95% 未満 \r\n</td>\r\n<td>  \r\n100% \r\n</td>\r\n</tr>\r\n</table>\r\n\r\n  \r\n**M365 電子メール送受信の可用性 **  \r\nM365 電子メール送受信の可用性は、M365 境界内の問題のため M365 が電子メールを送受信できない期間と定義されます。これには予定されていたダウンタイムはありません。  \r\n可用性は 2 種類に分かれます。   \r\n M365 の問題による恒久的な拒否   \r\n M365 の問題による暫定的な拒否   \r\n**稼働率 **  \r\n M365 の問題による恒久的な拒否   \r\n稼働率は次の式を使用して計算されます。  \r\n月の総時間  \\( 分 \\)\\- ダウンタイム 月の総時間  \\( 分 \\)  x 100   \r\nダウンタイムは、利用できなかったサービスの割合を乗じた時間数 \\(分単位\\) を暦月にわたって合計したものです。  \r\nM365 の問題による暫定的な拒否  \r\n**稼働率**  \r\n月の総時間  \\( メッセージ \\)\\- 影響を受けたメッセージ   月の総時間  \\( メッセージ \\)  x 100   \r\n影響を受けるメッセージは、問題の期間中に 10 分を超えて遅延したメッセージを、暦月にわたって合計したものであると定義されます。",
          "relevanceScore": 0.8056889989911922
        },
        ...
      ],
      "resourceType": "listItem",
      "resourceMetadata": {
        "title": "OnlineSvcsConsolidatedSLA(WW)(Japanese)(November2025)(CR)",
        "author": "Takashi Shinohara"
      }
    }
  ]
}

おわりに

Microsoft 365 のデータを RAG で利用する場合、Microsoft AI Search のインデックスを作成すると、データ サイズや権限の制約が発生します。Microsoft 365 Copilot 取得 API は、この課題を解決できる点が大きなメリットです。チャット UI だけでなく、AI エージェントでの利用も想定されるため、有効に活用したいです。

Discussion