このサンプルはAzure-Samples/azure-search-openai-demoをベースに開発されています。
Note Note:このサンプルで使用されているMicrosoft Graph SDK for Pythonは現在プレビュー段階です。
- Microsoft 365内のドキュメントやサイト、Teamsの投稿などを基にしたLLMによるチャット形式の内部ナレッジ検索
- Microsoft 365でも使用されるMicrosoft Search APIを使用したシンプルかつ高精度なRAGアーキテクチャ
- On-Behalf-Of フローを使用した元データに付与されたユーザーごとの権限に応じた検索
### 現時点での制限
- Citationタブでの参考文書の参照は、ブラウザにMicrosoft Edgeのみで動作します。その他のブラウザはiframeによる認証情報の伝播の制限により動作しません。 (#12)
- 現在はStreamingモードを実装していません。(#9)
- このリポジトリをクローンまたはダウンロード
- Azure OpenAI ServiceまたはOpenAIの準備
- Azure OpenAI Service:GPT-35-turboまたはGPT-4のデプロイ
- OpenAI:APIキーを取得
- ローカル実行を行う場合は以下の環境がローカルマシンに準備されていること
- Python
- Node.js
- Azure CLI
- Azure Portalにログインします。
- Microsoft Entra ID > アプリの登録 の順に選択していき、アプリ登録一覧画面で「新規登録」を選択します。
- 「名前」を入力します。(例:ChatGPT-GraphSearch)
- 「サポートされているアカウントの種類」で「この組織ディレクトリのみに含まれるアカウント」を選択
- 「リダイレクトURI」でプラットフォームを「シングルページアプリケーション(SPA)」、URIを「http://localhost:5173/redirect」に設定します。
- 「登録」をクリックします。
- 登録されたアプリ登録に移動し、ブレードメニューの「APIのアクセス許可」にアクセスします。
- 「アクセス許可の追加」から「Microsoft Graph」>「委任されたアクセス許可」の順に選択していき「Files.Read.All」と「Sites.Read.All」にチェックを入れて「アクセス許可の追加」を選択します。
- アクセス許可一覧に選択したアクセス許可がリストアップされていることを確認します。
- ブレードメニューから「APIの公開」を選択して「アプリケーション ID の URI」の「追加」をクリックします。
- 表示される「api://{UUID}」の状態のまま「保存」を選択します。
- 同ページの「Scopeの追加」を選択します。
- スコープ名に「access_as_user」と入力してその直下に「api://{UUID}/access_as_user」と表示されるようにするします。
- 同意できる対象で「管理者とユーザー」を選択します。
- そのほかの表示名や説明は任意の文章(=初回ログイン時に委任を求める画面で表示される内容)を入力して「スコープの追加」を選択します。
- ブレードメニューから「証明書とシークレット」を選択します。「新しいクライアントシークレット」を選択してクライアントシークレットを任意の説明と期間で追加します。
- 作成されたシークレットの「値」をメモ帳などにコピーします。シークレットの値は作成直後しか表示されません。メモせずに画面遷移をすると2度と表示できないのでご注意ください。
- ブレードメニューから「概要」を選択して表示される次の情報をメモ帳などにコピーします。
- ディレクトリ(テナント)ID
- アプリケーション(クライアント)ID
用途に応じて以下のファイルのsystem_message_chat_conversation
、query_prompt_template
、query_prompt_few_shots
に記述されているプロンプトを調整します。
- 対象のAzure OpneAI Serviceのアクセス制御でローカル実行ユーザーにRBAC「Cognitive Services OpenAI User」ロールを付与します。すでに共同作成者がついている場合でも必ず別途付与してください
- ターミナルで
az login
を実行してAzure OpenAI ServiceのリソースのRBACに登録したアカウントでAzureにログインします。 - ターミナルなどでクローンしたファイルの「src/backend」に移動して「pip install -r requirements.txt」を実行します。パッケージのインストールが完了するまでしばらく待ちます。
- 別ターミナルなどを開きクローンしたファイルの「src/frontend」に移動して「npm install」を実行します。パッケージのインストールが完了するまでしばらく待ちます。
- 「src/backend」内に.envファイルを作成して.env-sampleに記載されている内容をコピーします。
- それぞれの環境変数にメモした情報などを入力します。
- 「src/backend」を開いているターミナルで「quart run」を実行します。
- 「src/frontend」を開いているターミナルで「npm run dev」を実行します。
- ブラウザで「http://localhost:5173/」にアクセスします。
- 画面右上の「Login」ボタンをクリックして、アプリ登録を行ったディレクトリのユーザーアカウントでログインします。ログインに成功したら「Login」と表示されていた部分にユーザーのUPNが表示されます。
- 入力エリアに質問を入力してチャットを開始します。
TBW