【初心者向け】Azure OpenAIとSharePointで作る!1週間で実現する社内RAG型FAQシステム構築ガイド

【初心者向け】Azure OpenAIとSharePointで作る!1週間で実現する社内RAG型FAQシステム構築ガイド

「社内の問い合わせ対応に追われて、本来の業務が進まない…」「マニュアルや規定が色々な場所に散らばっていて、必要な情報が見つからない…」多くの企業が抱えるこんな悩みを、今話題の生成AIを使って解決しませんか?

この記事では、プログラミング初心者の方でも挑戦できるよう、Microsoftが提供するAzure OpenAI Serviceと、多くの企業で利用されているSharePointを組み合わせて、高性能な社内向けFAQシステムを約1週間で構築する方法を徹底解説します。専門用語は避け、図やたとえ話を交えながら丁寧に説明していくので、ぜひ最後までご覧ください。

そもそも「RAG型FAQシステム」って何?

まず、今回作成するシステムの核となる「RAG(ラグ)」という技術についてご説明します。

RAGとは、Retrieval-Augmented Generation(検索拡張生成)の略です。 [1] もっと簡単に言うと、「検索してから、答える」という賢い仕組みのことです。皆さんが普段使っているChatGPTのような生成AIは、非常に賢いですが、学習した時点までの情報しか知らず、社内の非公開情報や最新の情報については答えることができません。 [2]

そこでRAGは、AIが回答を生成する前に、まず社内のデータベース(今回はSharePointに保存したファイル)から関連する情報を探し出します。そして、その見つけ出した情報を「カンニングペーパー」のように参照しながら、正確な回答を生成するのです。 [1, 2]

RAGシステム 仕組み図

この仕組みには、以下のような大きなメリットがあります。

  • ハルシネーション(嘘の回答)の抑制: AIが社内資料という明確な根拠に基づいて回答するため、もっともらしい嘘をつくことを大幅に減らせます。 [2]
  • 最新情報への対応: SharePoint上のドキュメントを更新するだけで、AIの回答も最新の状態に保つことができます。AI自体を再学習させる必要はありません。 [1, 2]
  • 社内固有の質問に回答可能: 就業規則や経費精算フロー、プロジェクト固有の資料など、外部に公開されていない情報に関する質問にも答えられるようになります。
  • 情報源の提示: 「この回答は、〇〇マニュアルのP.5に基づいています」というように、根拠となった情報源を示すことができるため、ユーザーは回答の信頼性を確認し、さらに詳しい情報を自分で調べることもできます。

今回は、このRAGの仕組みをAzureのサービス群を使って構築していきます。

ステップ1:SharePointから情報を取り込む

FAQシステムの「脳」となるAIに知識を教えるため、まずは社内の情報源であるSharePoint上のドキュメントをシステムに取り込む必要があります。

ここでは、初心者向けの簡単な方法と、より本格的な応用の方法を2つ紹介します。

① Azure Cognitive Searchの標準機能を使う(簡易版)

Azureには、Azure Cognitive Searchという非常に強力な検索サービスがあります。このサービスには、SharePoint Online上のファイルを自動で収集し、検索可能な状態にしてくれる「インデクサー」という機能が用意されています(プレビュー機能として提供)。 [3, 4]

この機能のすごいところは、設定さえすれば、あとは自動で動いてくれる点です。

Azureサービス 連携イメージ

主な特徴

  • 多様なファイル形式に対応: PDFやWord、Excel、PowerPointといったOffice文書はもちろん、テキストファイルやHTMLなど、様々な形式のファイルから自動で文字情報を抽出してくれます。 [5] 画像に含まれる文字も読み取ることが可能です(OCR機能)。 [6]
  • 差分更新で常に最新: スケジュールを設定しておけば(例:毎日深夜)、SharePoint上で更新されたファイルや追加されたファイルだけを自動で取り込み、削除されたファイルは検索対象から外してくれます。 [7]
  • 簡単設定: Azureの管理画面(ポータル)から、いくつかの項目を設定するだけで始められます。

注意点

この方法は手軽ですが、まだプレビュー(お試し)段階の機能であるため、いくつかの制限があります。例えば、SharePointの「サイトページ」や「リスト」は直接の対象外で、あくまで文書ライブラリ内のファイルが対象となります。 [8] また、ファイルごとの細かいアクセス権限の引き継ぎが完全ではない点にも注意が必要です。 [9]

1週間での構築を目指すなら、まずはこの方法で特定のフォルダにあるマニュアルなど、対象を絞って試してみるのがおすすめです。

② Microsoft Graph APIを使う(応用版)

より本格的な運用や、細かい制御が必要な場合は、Microsoft Graph APIという通用口を使って、プログラムでSharePointの情報を取得する方法が推奨されます。 [10, 11]

APIと聞くと難しく感じるかもしれませんが、「SharePointさん、このフォルダにあるファイルをください」とお願いするための公式な命令方法のようなものです。この方法では、取得したファイルを一度Azure Blob Storageというクラウド上の倉庫に保管し、そこからAzure Cognitive Searchに取り込みます。 [12, 13]

この方法は少し手間がかかりますが、アクセス権限の情報も一緒に取得するなど、より柔軟で安定したシステムを構築できるメリットがあります。 [10] Azure Logic Appsという、プログラムを書かずに処理の流れを組み立てられるサービスを使えば、この一連の作業を自動化することも可能です。 [14, 15]

ステップ2:AIが理解できる「ベクトル」に変換する

さて、SharePointからドキュメントを取り込みましたが、このままではただの文章の集まりです。AIが効率よく「この質問と関連性が高いのは、どの文章か?」を判断できるように、文章を「埋め込みベクトル」という形式に変換します。

埋め込みベクトルとは?

埋め込みベクトルとは、文章の意味や文脈を、コンピュータが扱える数値の羅列(ベクトルのこと)に変換したものです。 [16] 難しい言葉ですが、「文章の住所」のようなものだと考えてください。意味の近い文章は、このベクトル空間という地図の上で、ご近所さんになります。 [17]

例えば、「ノートパソコンの購入申請方法」と「PCの買い替え手続きについて」という2つの文章は、使われている単語は違いますが、意味は非常に似ています。これらをベクトルに変換すると、空間上で非常に近い位置にプロットされます。ユーザーが「PCを買いたい」と質問した際に、その質問文もベクトルに変換し、「住所」が一番近い文章を探し出すことで、最適な回答の元ネタを見つけられるのです。

この変換作業は、Azure OpenAI Serviceが提供する「埋め込みモデル(例: text-embedding-ada-002)」を使って行います。 [18, 19]

変換のステップ

  1. 前処理(チャンク分割): 長い文章はそのままでは扱いにくいため、意味のまとまり(段落など)ごとに、短い「チャンク」と呼ばれるかたまりに分割します。 [20]
  2. ベクトル生成: 分割した各チャンクをAzure OpenAIのAPIに送ると、数値の配列(ベクトル)が返ってきます。これをすべてのチャンクに対して行います。 [21, 22]
  3. ベクトルの保存: 生成したベクトルと、元のテキストのペアをデータベースに保存します。Azure Cognitive Searchは、このベクトルを保存し、高速に検索するための専用の機能を持っています。 [23, 24, 25]

このベクトル検索と、従来のキーワード検索を組み合わせた「ハイブリッド検索」も可能で、より精度の高い検索が実現できます。 [26]

ステップ3:ユーザーが質問できる画面(UI)を作る

バックエンドの準備が整ったら、次はいよいよユーザーが実際に質問を入力し、回答を受け取るための画面(UI:ユーザーインターフェース)を作成します。ここでも、初心者向けの簡単な方法から紹介します。

チャットボット UIサンプル

① Azure OpenAI Studioのチャット機能を使う(最速)

Azure OpenAI Studioには、「Azure OpenAI on your data」という、自分のデータを接続してすぐにチャットを試せる機能があります。 [27] これは、プログラミングを一切行わずに、管理画面上のウィザードに従って設定するだけで、WebチャットUIを自動で生成してくれる優れものです。ステップ1と2で作成したAzure Cognitive Searchのインデックスを接続するだけで、即席のFAQシステムが完成します。動作確認や、関係者へのデモに最適です。

② Power Virtual Agents を使う(ローコード)

もう少し本格的なチャットボットを、プログラムを書かずに作りたい場合は、MicrosoftのPower Virtual Agentsが強力な選択肢になります。 [28] このツールでは、対話の流れをブロックを組み合わせるように視覚的に作成できます。

最近のバージョンでは、データソースとしてSharePointサイトのURLを指定するだけで、そのサイト内の情報を自動で検索し、要約して回答してくれる「生成的な回答」機能が搭載されています。 [29, 30, 31, 32] 作成したチャットボットは、Microsoft TeamsやSharePointページに簡単に埋め込めるため、社員が普段使っているツール上で自然に利用できます。 [33]

③ サンプルアプリをカスタマイズする(本格開発)

より自由にUIをカスタマイズしたい、独自の機能を追加したいという場合は、MicrosoftがGitHub上で公開しているサンプルアプリケーションを活用するのが近道です。 [34, 35] React(JavaScriptのライブラリ)で作られたチャット画面と、PythonやC#で書かれたバックエンドのプログラム一式が用意されています。 [36] これを自分のAzure環境に展開(デプロイ)し、設定を書き換えるだけで、高機能なRAGチャットアプリが手に入ります。 [37] ゼロから作るよりも遥かに早く、高品質なシステムを構築できます。

ステップ4:見せたくない情報は見せない「権限制御」

社内システムを構築する上で、絶対に忘れてはならないのが「権限制御」です。例えば、役員しか見られない資料や、人事部限定の情報を、一般社員が検索できてしまったら大問題です。SharePoint上ではファイルごとにアクセス権が設定されていますが、データをAzure Cognitive Searchにコピーした際に、その設定を正しく引き継ぐ必要があります。

セキュリティフィルタリングの実装

Azure Cognitive Searchの標準インデクサーは、デフォルトではSharePointのアクセス権情報を引き継ぎません。 [38, 39] そのため、誰でも全ての情報を検索できてしまう可能性があります。

これを解決するためには、「セキュリティフィルタリング」という仕組みを実装します。 [40, 41] これは、検索インデックスに「閲覧可能なユーザーID」や「閲覧可能なグループID」といった特別なフィールドを追加しておく方法です。 [42, 43]

そして、ユーザーが検索を実行する際に、「現在ログインしているユーザーが閲覧可能なドキュメントだけを対象にする」というフィルター条件をクエリに加えることで、権限のない情報が結果に含まれないようにします。 [44, 45]

この実装には、SharePointからアクセス権情報を取得してインデックスに登録するという追加の開発が必要になります。 [46, 47] 短期間で構築する場合は、まずは全社公開されている情報のみを対象とし、機密情報を含めない運用から始めるのが現実的でしょう。

一方で、前述のPower Virtual AgentsとSharePointを直接連携させる方法では、チャットボットがユーザーの権限を自動的に認識して検索を行うため、この問題を比較的簡単にクリアできる場合があります。 [48, 49]

まとめ:1週間で進めるための構築ステッププラン

最後に、このプロジェクトを1週間でやりきるための、具体的なステッププランをまとめました。

期間 主なタスク ポイント
Day 1-2 環境準備と計画
– Azure OpenAI, Cognitive Searchリソース作成
– 対象とするSharePointドキュメントの選定
– 必要なAzure ADアプリの登録 [50, 51]
まずは範囲を絞る。「全社共通マニュアル」など、権利関係がシンプルなものから始めましょう。
Day 2-3 データ取り込み実装
– Cognitive SearchのSharePointインデクサーを設定 [52] – 実際に数件のファイルがインデックス化されるかテスト
プレビュー機能でうまくいかない場合は、応用版への切り替えも検討します。
Day 3-4 ベクトル生成と検索ロジックの検証
– 取り込んだテキストから埋め込みベクトルを生成 [53] – ベクトルインデックスにデータを保存 [54] – テスト用の質問で類似文書が検索できるか確認
Azure OpenAI Studioのプレイグラウンドで、検索と回答生成の流れを手動で確認します。
Day 5-6 フロントエンド(UI)構築
– Azure OpenAI StudioのWebアプリ機能でUIを公開
– (または) Power Virtual Agentsでボットを構築
まずは最速の方法で動くものを作り、関係者に見せてフィードバックをもらいましょう。
Day 7 テストと権限確認
– 想定される質問でテストを実施
– 回答が見つからない場合の挙動を確認
– (必要であれば) 権限のないユーザーでアクセスし、情報が漏れないか検証 [55]
うまくいかない質問や、改善点をリストアップし、次の改修計画に繋げます。

いかがでしたでしょうか。Azureの強力なサービス群を組み合わせることで、一見難しそうに見えるRAG型FAQシステムも、手順を踏めば短期間で構築することが可能です。 [56, 57] まずは完璧を目指さず、小さな範囲からでも実際に動くものを作ってみることが、成功への一番の近道です。この記事が、皆さんの業務効率化への第一歩となれば幸いです。