社内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 の一般公開日が発表