社内Chat GPT のプロンプトログをとってみた

エンタープライズでChat GPT を利用する際は、プロンプトログをとることを考えている企業も多いと思います。

今回、Azure Open AI だけでは取得できないプロンプトログを、API Managementを利用してとっていきます。

こちらの記事を参考にさせていただきました。

Azure-Samples/openai-python-enterprise-logging (github.com)

 

 

前提条件

  • Azure OpenAI アプリケーション

→前回の記事(Azure Open AI Serviceで社内ChatGPTを構築してみた | Azure導入支援デスク (nissho-ele.co.jp)

)でAzure Open AI Service からWeb App をデプロイしました。

今回はソースコードを変更する必要があるため、サンプルコードをGitHub、ローカルにForkやクローンして下さい。

 

サンプルアプリケーション:microsoft/sample-app-aoai-chatGPT: [PREVIEW] Sample code for a simple web chat experience targeting chatGPT through AOAI. (github.com)

 

  • Azure Open AI Service

→こちらも前回の記事で説明していますので、事前にデプロイしてください。

 

利用するコンポーネント

  • Azure Open AI
  • Azure Key Vaults
  • API Management

 

構成図

 

ざっくりとこんな構成になっています。

①クライアントからWeb アプリケーションに接続しWeb UI 上でChat GPT と対話ができます。

②App Service は受け取ったテキストメッセージを含めたリクエストをAPI Management 送信します。

③API Management は受け取ったリクエストを中継し、バックエンドのAzure Open AI にリクエストを送信します。リクエスト送信の際にKey Vault に格納したAPI Keyを利用します。また、リクエストとレスポンスの内容(プロンプトメッセージ含め)をLog Analytics に記録します。

 

では作っていきましょう。

Azure Open AI

Azure Open AI の作成

前回の記事を参考にAzure Open AI を作成し、プライベートエンドポイントを設定します。

 

Key Vault

キーコンテナーの作成

Azure Portal > キーコンテナー > 作成と進みます。

 

必須事項を入力したら[ネットワーク]に進みます。

今回は閉域構成の環境となっていますので、プライベートエンドポイントを作成します。

 

プライベートエンドポイントを、前回記事で作成したchatgpt関連サービス用のサブネットに作成します。

最後まで進め[作成]します。

 

事前に作成してあるAzure OpenAI Serviceを開き、[キーとエンドポイント]を開きます。

エンドポイントと、キー1をメモします。

 

キーコンテナーのロール設定

キーコンテナー > アクセス制御(IAM) > 追加 > ロール割り当ての追加をクリックします。

ロール[キー コンテナー シークレット ユーザー]を選択し、メンバーとして自分を選択します。

 

 

ネットワーク > ファイアウォールと仮想ネットワークから[許可するアクセス元]を「特定の仮想ネットワークとIPアドレスからのパブリックアクセスを許可する」に設定します。

ファイアウォールのIPアドレスに自分のIPを入力します。

 

作成したキーコンテナー >  [シークレット]を開きます。

 

[作成/インポート]をクリックします。

アップロードオプション:手動

名前:任意で設定してください。

シークレット値:事前にメモしたAzure OpenAI Serviceのキーを貼り付け、作成をクリックします。

API Management

API Management の作成

Azure Portal > API Management > 作成と進みます。

基本情報を入力し、価格レベルは今回はDeveloperとします。

仮想ネットワークの設定は、一旦「なし」としますが後ほど変更します。

他はすべてデフォルト設定で作成します。

 

名前付きの値の設定

作成したAPI Management > 名前付きの値 > 作成と進みます。

 

名前と表示名は任意で設定します。

種類で[キーコンテナー]を選択し、シークレットの[選択]をクリックします。

 

前の手順でキーコンテナー上に作成したシークレットを選択します。

 

保存し、[はい]を選択します。

 

API Management > Backendに進みます。

 

追加をクリックし、以下追加します。

名前:Azure-OpneAI-Endpoint

種類:カスタムURL

ランタイムURL:AzureOpenAIServiceのエンドポイント/

例:https://xxxx.openai.azure.com/

作成をクリックします。

 

再度、作成したBackendを開き、認可資格情報を開きます。

ヘッダータブで、以下を作成します。

名前:api-key

値:前の手順で作成した「名前付きの値」を選択し、保存します。

 

APIテンプレートの設定

以下のURLからjsonファイルをダウンロードします。

https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/cognitiveservices/data-plane/AzureOpenAI/inference/stable/2023-05-15/inference.json

 

「url」と「default」を自身のAzure OpenAI のエンドポイントに修正します。

 

API Management > API > Add API > OpenAPIをクリックします。

 

Select a file から 先ほど修正したjsonファイルを選択し、Create をクリックします。

 

作成されたAzure OpenAI Service API > All operations を選択します。

 

Backendのコードアイコンをクリックします。

 

以下の通り追記します。

<set-backend-service backend-id=”Azure-OpneAI-Endpoint” />

 

ログの取得設定

All Operation > Settingsと進みます。

 

「here」をクリックして診断設定を有効化します。

 

診断設定を追加するをクリック

 

カテゴリの[Log related to ApiManagement Gateway]にチェックをいれて、Log Analytics ワークスペースを選択し、保存します。

 

再度、Settingsの画面に戻り[override global]にチェックを入れます。

[Number of payload byte to log]を8192に設定しSaveします。

NSGの作成

Azure Portal > ネットワークセキュリティ グループ > 作

必要事項を入力します。

作成後以下のリンクに記載のルールを追加します。

Connect to an internal virtual network using Azure API Management | Microsoft Learn

 

〇受信の規則

インターネット→仮想ネットワーク

API Management→仮想ネットワーク

Azure Load Balancer→仮想ネットワーク

 

〇送信の規則

仮想ネットワーク→ストレージ

仮想ネットワーク→SQL

仮想ネットワーク→Azure Key Vault

 

できたら、対象のサブネットに紐づけます。

 

パブリックIPの作成

IPアドレスの構成から、任意のDNS名を設定します。

 

API Management 内部モードへの変更

サービス更新には15~45分程度かかります。

 

テスト

以下のプロンプトのログが取れているか見てみましょう。

Log Analytics > ログを開きます。

ログは「ApiManagementGatewayLogs」というテーブルに保存されます。

 

以下のクエリを実行すると最新の10件のログを確認することができます。

 

きちんとログが取れていますね。

 

この記事を書いた人

髙橋 和輝
髙橋 和輝
テクニカルマーケターとして、新技術の検証、ブログ執筆、セミナー講師を行っております!
学生時代はアプリ開発に興味がありましたが、インフラ、セキュリティ事業を経て、現在はクラウド屋さんになっております。
コロナ禍前は、月1で海外旅行にいくなどアクティブに活動していましたが、最近は家に引きこもってゲームが趣味になっています。

宜しくお願い致します!