社内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やクローンして下さい。
- 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ファイルをダウンロードします。
「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 2 |
ApiManagementGatewayLogs | take 10 |

きちんとログが取れていますね。
この記事を書いた人

- 髙橋 和輝
-
テクニカルマーケターとして、新技術の検証、ブログ執筆、セミナー講師を行っております!
学生時代はアプリ開発に興味がありましたが、インフラ、セキュリティ事業を経て、現在はクラウド屋さんになっております。
コロナ禍前は、月1で海外旅行にいくなどアクティブに活動していましたが、最近は家に引きこもってゲームが趣味になっています。
宜しくお願い致します!
この投稿者の最新の記事
- 2024年3月25日ブログOracle Database@Azureが東日本リージョンに展開されることが発表されました!
- 2024年3月22日ブログAzure SQL DatabaseでCopilotがプレビュー公開!
- 2024年3月18日ブログAzureリソースの誤削除を防ぐ「ロック」機能とは
- 2024年3月14日ブログCopilot for Security の一般公開日が発表
