Azureリソース構造の確認 / Azure OpenAI リファレンスアーキテクチャ「企業内向けChatと社内文章検索」

この記事の内容

  • デプロイ済みの企業向けChatアプリを構成するAzureリソースを一通り確認します
  • App Service、Azure OpenAI、Form Recognizer、Cosmos DB、Cognitive Search、Storage Accountそれぞれの役割と設定を解説します
  • 現時点ではすべてパブリックアクセス可能な状態であり、今後プライベートエンドポイントによるネットワーク制限を行う予定です
  • GitHubリポジトリの構成とドキュメントインデックス作成スクリプトの処理内容も紹介します
  • 次回以降はネットワーク閉域化の手順を扱います

App Service の構成確認

アプリケーションの実行環境は App Service です。発行モデルは「コード」で、ランタイムスタックは Python 3.x となっており、バックエンドはPythonで動作しています。標準のドメイン名が割り当てられていますが、本番運用ではカスタムドメインを追加することも可能です。

ホスティングプランは App Service Plan(Linux / Standard S1) で動作しており、スケールアップやインスタンス数の増減にも対応しています。デプロイはデプロイセンター経由で行われ、正常に完了している状態です。

ネットワーク面では、現在はパブリックIPが割り当てられており、アクセス制限もプライベートエンドポイントも無効になっています。つまり、インターネット上のどこからでもアクセス可能な状態です。送信時もVNet統合やハイブリッド接続は行っておらず、グローバルIPでインターネット経由で通信します。

企業での本格利用を想定した場合、以下のような構成変更が求められることが多いでしょう。

  • App Service にプライベートエンドポイントを設定してインターネットからの受信を禁止する
  • VNet統合を有効化し、Azure OpenAI・Cognitive Search・Cosmos DBとの通信を仮想ネットワーク内で完結させる

この点については、シリーズの後続動画で扱う予定です。


Azure OpenAI Service の確認

Azure OpenAI Serviceには、GPT-3.5 Turbo が2つデプロイされています(「davinci」「chat」という名前でそれぞれ展開)。モデル名を切り替えることで用途に応じた呼び分けが可能なようです。

ネットワーク設定は現在「すべてのネットワークからアクセス可能」になっています。本番運用に向けては、選択したネットワークのみに絞り込んだり、プライベートエンドポイントを構成して閉域化することが可能です。


Form Recognizer の確認

PDF文書の内容を読み取るために Form Recognizer が利用されています。アプリケーション側から呼び出されて使われるだけの構成です。

こちらも現在はどのネットワークからでもアクセス可能な状態ですが、同様にネットワーク制限を適用できます。


Cosmos DB の確認

Cosmos DBにはチャット履歴が保存されています。コンテナ「ChatHistory」の中の「PromptItems」を確認すると、以下のようなデータが記録されています。

  • ユーザーが入力した質問(例:「ChatGPTについて教えてください」)
  • それに対する回答
  • 社内文書検索(DocSearch)で使用されたクエリと検索結果

認証なしで使用した場合、ユーザーフィールドは空になりますが、認証を有効化すると誰がいつ何を質問したかまで記録されます。

ネットワーク設定は現在パブリックアクセスONです。


Cognitive Search の確認

Cognitive Searchはドキュメントのインデックスを保持しています。インデックス名は gpt-kb-index で、ドキュメント数は93件です。フィールド定義も確認できます。

注目すべき点として、インデクサーもデータソースも定義されていません。これはCognitive Search自体がクロールしに行くのではなく、外部プログラムからインデックスにデータが投入される構成になっているということです。


Storage Account の確認

Storage AccountのBlobコンテナ「content」の中にPDFファイルが格納されています。PDFは1ページずつ分割された形で保存されており、プログラムがこれを読み取ってインデックスを生成する仕組みになっています。ファイル共有・キュー・テーブルは使用されておらず、コンテナのみが利用されています。


Application Insights とアラートルール

App ServiceにはApplication Insightsが連動しており、クエリの件数や異常なリクエスト(大量アクセスなど)をモニタリングしています。アラートルールとして、スマート検出機能が設定されており、異常発生時にはAzure Resource ManagerのロールへメールでAlertが送信されます。


GitHubリポジトリの構成

GitHubリポジトリには以下のような構成が含まれています。

bfsarccorknietpppsnetrrtdnseea/dpprddtoo.ccpsss..1pssh1#####PythonWLiinnduoxw/sMac

prepdocs.ps1 は以下の処理を行います。

  1. Cosmos DBのデータアクションロールを作成・アサイン
  2. Python仮想環境の準備
  3. pip install で依存パッケージをインストール
  4. Pythonスクリプト(prepdocs.py)にオプションを渡して実行

prepdocs.py の処理内容は以下のとおりです。

123456......BPClDooFgbnitivsepclrSPieeDgtaaFeTtrteecDxShoteiccnutdmieeoxnnSteTcetxitcornesateSearchIndex

つまり、PDFの内容を読み取り → 分割し → Cognitive Searchに登録するという一連の処理がこのスクリプトで完結しています。


まとめ

今回は企業向けChatと社内文書検索アプリを構成するAzureリソースを一通り確認しました。App Service(Python / Linux)をアプリの実行基盤とし、Azure OpenAI(GPT-3.5 Turbo)でチャット応答を生成、Form RecognizerでPDFを読み取り、Cognitive Searchでドキュメント検索、Cosmos DBでチャット履歴を保存するというアーキテクチャになっています。

現時点では全リソースがパブリックアクセス可能な状態ですが、本番運用に向けてはプライベートエンドポイントの有効化やVNet統合によるネットワーク閉域化が必要になります。次回の動画では、この閉域化の手順を解説する予定です。