【AI AgentPlus】SharePoint内のファイルを生成AIドキュメント学習する
1.SharePointに格納したファイルを生成AIドキュメント学習する
ドキュメント管理システム「SharePoint Online」に格納したファイルをChatPlusと同期して生成AIドキュメント学習できます。
※AI AgentPlus、AIチャットボットプランをご利用中のご契約でご利用いただけます。
※設定はChatPlusのサイトごとに行います。
ご利用には、先にお客様のMicrosoft 365 (Microsoft Entra ID) 側でChatPlus用のアプリ登録と権限設定が必要です。
Microsoft 365側の作業は、グローバル管理者またはSharePoint管理者の権限をお持ちの方が実施してください。
【設定の流れ】
2.Microsoft 365側の設定 (アプリの登録、アクセス許可、学習対象サイトへの権限付与)
3.ChatPlus管理画面に認証情報を登録
4.ドキュメントの同期・学習
2.Microsoft 365 (Microsoft Entra ID) 側の設定
(1) SharePointサイトの準備
学習対象のファイルを置くSharePointサイトを用意します。新規に作成する場合は「チームサイト」を選択してください。
※既存のサイトを利用することも可能です。

(2) アプリを登録する
Azureポータルで「Microsoft Entra ID」>「管理」>「アプリの登録」>「新規登録」をクリックしてください。

1)名前にChatPlusなど識別しやすい名前を入力してください。
2)サポートされているアカウントの種類を選択してください (通常は「この組織ディレクトリのみに含まれるアカウント」)。
3)リダイレクトURIは空欄のままで構いません。

(3) APIのアクセス許可を追加する
「管理」>「APIのアクセス許可」>「アクセス許可の追加」>「Microsoft Graph」をクリックしてください。

「アプリケーションの許可」を選択し、「Sites.Selected」にチェックを入れて「アクセス許可の追加」をクリックしてください。
※検索フィールドに「Sites」と入力すると絞り込みできます。
※「委任されたアクセス許可」ではなく「アプリケーションの許可」を選択してください。

Sites.Selected は「個別に許可したSharePointサイトのみ」にアクセスできるアクセス許可です。このままではどのサイトにもアクセスできないため、(6) の手順で学習対象のサイトごとにChatPlusアプリを許可します。
(4) 管理者の同意を付与する
「(組織名) に管理者の同意を与えます」をクリックし、確認ダイアログで「はい」をクリックしてください。
状態が「(組織名) に付与されました」になれば完了です。

(5) クライアントシークレットを発行する
「管理」>「証明書とシークレット」>「新しいクライアント シークレット」>「追加」をクリックしてください。
発行直後に表示される「値」列の文字列を控えてください (画面を離れると再表示できません)。
※同じ画面の「シークレットID」列は ChatPlus では使用しません。控えるのは「値」列です。
※有効期限を過ぎるとChatPlusとの同期が停止します。期限前に再発行し、ChatPlus側の登録も更新してください。
※同じアプリの「概要」に表示される「アプリケーション (クライアント) ID」(クライアントID) も、(6)-⑤ と ChatPlus への登録で使用します。あわせて控えてください。

(6) 学習対象のSharePointサイトにChatPlusアプリの権限を付与する
Sites.Selected は、個別に許可したSharePointサイトにのみアクセスできる権限のため、学習対象のサイトごとにChatPlusアプリを許可する操作が必要です。
この操作はMicrosoft Graph APIで行います。ここではMicrosoftが提供するブラウザツール「Graph Explorer」を使う手順を説明します。
※グローバル管理者またはSharePoint管理者、もしくは対象サイトのサイトコレクション管理者のアカウントで実施してください。
① Graph Explorer にサインインする
Graph Explorer (https://developer.microsoft.com/graph/graph-explorer) にアクセスし、右上の人型のアイコンまたは「Sign in to Graph Explorer」から上記の管理者アカウントでサインインしてください。

② アクセス許可の一覧を開く
右上の人型のアイコン>「Consent to permissions」(Modify permissions) をクリックしてください。

③ Sites.FullControl.All に同意する
「Sites.FullControl.All」を検索し、「Consent」をクリックして同意してください。
※この同意はサインインしたご自身のアカウントに対するものです。「組織の代理として同意する」にはチェックを入れないでください。
※ChatPlus用アプリに Sites.FullControl.All を付与するものではありません (アプリ側は Sites.Selected のままです)。
※同意後、行の右にある「Reload」をクリック (またはサインアウト/再サインイン) してトークンを更新してください。

④ 学習対象サイトのサイトIDを取得する
1)メソッドを「GET」にします。
2)URLに次を入力して「Run query」をクリックします。
https://graph.microsoft.com/v1.0/sites/{テナント名}.sharepoint.com:/sites/{サイト名}
例) サイトURLが https://contoso.sharepoint.com/sites/manual の場合
https://graph.microsoft.com/v1.0/sites/contoso.sharepoint.com:/sites/manual
3)レスポンスの「id」の値を控えてください。
例) contoso.sharepoint.com,xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx,yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy

⑤ ChatPlusアプリにサイトへのアクセス権を付与する
1)メソッドを「POST」にします。
2)URLに次を入力します。
https://graph.microsoft.com/v1.0/sites/{④で取得したid}/permissions
3)「Request Body」タブを開き、以下を貼り付けます (URL欄には入れないでください)。
「id」には、2-(2) で登録した ChatPlus 用アプリの「アプリケーション (クライアント) ID」を入力します (2-(5) でクライアントシークレットを発行したアプリと同じものです。確認方法は 2-(7)-2) を参照)。
「displayName」は権限一覧で識別するための表示名です。任意の文字列で構いませんが、2-(2) で登録したアプリ名と同じにしておくと管理しやすくなります。
{
"roles": ["read", "write"],
"grantedToIdentities": [
{ "application": { "id": "{2-(2)で登録したChatPlus用アプリのクライアントID}", "displayName": "ChatPlus" } }
]
}
4)「Run query」をクリックし、「Created - 201」が返れば完了です。
※「write」は、ファイル更新を検知するための通知 (Webhook) をChatPlusが作成するために必要です。
※学習対象のサイトが複数ある場合は、サイトごとに④⑤を繰り返してください。

⑥ (推奨) Graph Explorer への同意を取り消す
作業が終わったら、Azureポータル「Microsoft Entra ID」>「エンタープライズ アプリケーション」>「Graph Explorer」>「アクセス許可」から、付与した Sites.FullControl.All を取り消すか、アプリケーション自体を削除してください。
※取り消しても、⑤でサイトに付与したChatPlusアプリの権限はそのまま残ります。
(7) ChatPlusに登録する情報を控える
1)テナントID:Azureポータル「Microsoft Entra ID」の概要画面に表示されます。

2)クライアントID:「アプリの登録」>作成したアプリ>概要の「アプリケーション (クライアント) ID」
「アプリの登録」の一覧では「アプリケーション (クライアント) ID」列に表示されます (下図)。

クライアントシークレット:(5) で控えた「値」 (「シークレットID」ではありません)

3)フォルダURL:学習対象のSharePointフォルダのURL。サイト全体を対象にする場合はサイトのトップページのURLを指定します。
※(6) で権限を付与したサイト内のURLを指定してください。権限を付与していないサイトのURLは学習できません。

3.ChatPlus管理画面に認証情報を登録
(1) 管理画面左の「外部連携」>「アプリ」をクリックします。

(2) アプリ一覧「AI AgentPlus」の「SharePoint」をクリックします。

(3) 以下を入力し、「登録」ボタンをクリックしてください。
テナントID (必須)…2-(7)-1) で控えた値
クライアントID (必須)…2-(7)-2) で控えた値
クライアントシークレット (必須)…2-(7)-2) で控えた値 (証明書とシークレット画面の「値」列の文字列。「シークレットID」ではありません)
フォルダURL (必須)…学習対象のSharePointフォルダURL。複数指定する場合は「+ フォルダURLを追加」をクリックしてください。
除外フォルダURL…学習から除外したいフォルダのURL。指定したフォルダとその配下のファイルはすべて学習対象外になります。
除外ファイルURL…学習から除外したいファイルのURL。指定したファイルは学習対象外になります。
自動学習…チェックを入れると、SharePointにアップロード・更新されたファイルを自動的に学習します (AI AgentPlusのみ)。
画像認識を用いて学習する…チェックを入れると、PDFファイル内の画像情報をテキスト化して学習します。(ただし、生成AIのAPIは通常より多く使用します。1ページ当たり約0.13$ほど)

(4) 「SharePoint連携が正常に設定されました」と表示されれば登録完了です。エラーが表示される場合は、下記「よくあるエラー」をご確認ください。
4.ドキュメントの同期・学習方法
(1) 管理画面左の「AI連携」をクリックします。

(2) 「生成AI-ドキュメント」の「SharePoint」をクリックします。

(3) 画面右の「同期」をクリックします。

5.よくあるエラー
■ Graph Explorer で「400 Empty Payload. JSON content expected」
→ Request Body タブに本文が入っていません。URL欄ではなく「Request Body」タブにJSONを貼り付けてください。
■ Graph Explorer で「403 Access denied」
→ 2-(6)-③ の Sites.FullControl.All に同意していない、または同意後にトークンが更新されていません (Reload か再サインインをしてください)。
→ 実行しているアカウントがSharePoint管理者でも、対象サイトのサイトコレクション管理者でもない場合も発生します。管理者権限を持つ方に実行を依頼してください。
■ ChatPlusの登録時に「webhook creation failed」等のエラー
→ 学習対象サイトへの権限付与 (2-(6)) が未実施、または read のみで write が付与されていません。2-(6)-⑤ を該当サイトに対して実施してください。
■ ChatPlusの登録時に「SharePoint validation error: Cannot access site」
→ クライアントID・クライアントシークレットの取り違えが最も多い原因です。クライアントID には「アプリケーション (クライアント) ID」、クライアントシークレット には「値」列の文字列を入力してください (「シークレットID」やシークレットの値をクライアントIDに入れると発生します)。
→ 権限を付与したサイト (2-(6)) と、フォルダURLに指定したサイトが一致しているかも確認してください。
■ ChatPlusの登録時に認証エラー
→ テナントID / クライアントID / クライアントシークレットの誤り、またはシークレットの期限切れです。値を再確認し、期限切れの場合は再発行して更新してください。
■ 一部のフォルダが学習されない
→ フォルダURLが権限を付与していないサイトのものになっているか、除外フォルダ / 除外ファイルの設定に含まれています。
6.補足:アクセス許可の選び方
Sites.Selected (本記事の手順)…ChatPlusがアクセスできるのは個別に許可したSharePointサイトのみ。2-(6) のサイトごとの権限付与が必要です。
Sites.ReadWrite.All…ChatPlusがテナント内のすべてのSharePointサイトにアクセス可能。2-(6) の作業は不要です。
セキュリティの観点から、本記事では Sites.Selected を推奨しています。Sites.ReadWrite.All を選択する場合は、ChatPlusが実際に読み取るのはフォルダURLで指定した範囲のみですが、権限としてはテナント内のすべてのサイトにアクセス可能となる点をご了承のうえ、貴社のセキュリティポリシーに従ってご判断ください。