エンタープライズ向けAzure OpenAIアプリ基盤の参照アーキテクチャのデプロイ方法の詳細を示すリポジトリ。
- 責任あるAI利用のためのプロンプトと応答監視。 ログ情報には、ユーザーがモデルに送信しているテキストと、モデルから受信されているテキストが含まれます。これにより、モデルが企業環境内およびサービスの承認されたユースケース内で責任を持って使用されるようになります。
- 利用制御とスロットリング制御により、 さまざまなユーザグループに対してきめ細かなアクセス制御が可能になります。
- 高可用性構成により、 トラフィックが 1 つの Azure OpenAI サービスの制限を超えた場合でも、ユーザー要求が満たされるようにします。
- 高セキュリティを実現するために、最小特権の原則に従ってAzure Active DirectoryのRBACを活用します。
このプロジェクト フレームワークは、次の機能を提供します:
- OpenAI 使用状況メトリックのエンタープライズログ:
- トークン利用
- モデル利用
- プロンプト入力
- ユーザー統計
- プロンプト応答
- リージョンのフェールオーバーによるOpenAI サービスの高可用性
- 最新のOpenAIライブラリとの統合
アーティファクトのプロビジョニングは、まず、次に示すソリューションアーティファクトをプロビジョニングします:
- Azure OpenAI Cognitive Service
- Azure API Management
- Azure Monitor
- Azure Application Gateway
- Azure Virtual Network
-
まずは、Azure OpenAIのリソースをプロビジョニングします。現在のプライマリリージョンは米国東部であり新しいモデルと容量は他のリージョンよりも先にこの場所でプロビジョニングされることに注意してください。 リソースのプロビジョニング
-
リソースがプロビジョニングされたら、選択したモデルを使用してDeploymentを作成します: モデルのデプロイ
-
モデルがデプロイされたら、OpenAI スタジオに遷移して、新しく作成したモデルをスタジオのプレイグラウンドでテストします。 oai.azure.com/portal
-
Azure ポータルを使用してプロビジョニングできます :リソースのプロビジョニング
-
API Management サービスがプロビジョニングされたら、サービスの OpenAPI 仕様を使用して OpenAI API レイヤーをインポートできます。
- インポート手順
- [APIM - API] ブレードを開き、既存の API の [ インポート ] オプションを選択します。
- [ 更新 ] オプションを選択して、API を現在の OpenAI 仕様に更新します。
-
すべての API 操作のために:
- 設定 で、OpenAI ライブラリの仕様と一致するように サブスクリプション - ヘッダー名] を "api-key" に設定します。
- "set-headers" のinbound ruleを構成して、"api-key" ヘッダーパラメーターを OpenAI サービスからの API シークレットキーの値で追加/上書きします。OpenAIキーを見つけるための手順はここにあります: キーを取得する
- デプロイされたOpenAIサービスのエンドポイントにバックエンドサービスを
/openai
として構成し、既存のエンドポイントを必ず上書きしてください。- 例: https://< yourservicename >.openai.azure.com/openai
- エンドポイントの取得
- 診断ログの設定を構成します:
-
APIのテスト
API Management を使用すると、API プロバイダーは API を不正使用から保護し、さまざまな API 製品レベルの価値を生み出すことができます。API 管理レイヤーを使用して受信要求を調整することは、Azure API 管理の重要な役割です。要求の速度または転送された要求/データの合計を制御することによって。
APIM レイヤーの構成の詳細: https://learn.microsoft.com/en-us/azure/api-management/api-management-sample-flexible-throttling
- API 管理レイヤーを構成したら、サブスクリプション キー パラメーターをcompletion要求に追加することで、API レイヤーを使用するように既存の OpenAI Python コードを構成できます。 例:
import openai
openai.api_type = "azure"
openai.api_base = "https://xxxxxxxxx.azure-api.net/" # APIM Endpoint
openai.api_version = "2023-03-15-preview"
openai.api_key = "APIM SUBSCRIPTION KEY" #DO NOT USE ACTUAL AZURE OPENAI SERVICE KEY
response = openai.Completion.create(engine="modelname",
prompt="prompt text", temperature=1,
max_tokens=200, top_p=0.5,
frequency_penalty=0,
presence_penalty=0,
stop=None)
- OpenAI 要求が Azure Monitor サービスへのログ記録を開始したら、Log Analytics クエリを使用してサービスの使用状況の分析を開始できます。
- テーブルの名前は "ApiManagementGatewayLogs"テーブルの名前は
- BackendResponseBody フィールドには、テキスト補完、トークンおよびモデル情報を含む OpenAI サービスからの json 応答が含まれています。
- IP とモデルによってトークンの使用状況を識別するクエリの例:
ApiManagementGatewayLogs
| where OperationId == 'completions_create'
| extend modelkey = substring(parse_json(BackendResponseBody)['model'], 0, indexof(parse_json(BackendResponseBody)['model'], '-', 0, -1, 2))
| extend model = tostring(parse_json(BackendResponseBody)['model'])
| extend prompttokens = parse_json(parse_json(BackendResponseBody)['usage'])['prompt_tokens']
| extend completiontokens = parse_json(parse_json(BackendResponseBody)['usage'])['completion_tokens']
| extend totaltokens = parse_json(parse_json(BackendResponseBody)['usage'])['total_tokens']
| extend ip = CallerIpAddress
| where model != ''
| summarize
sum(todecimal(prompttokens)),
sum(todecimal(completiontokens)),
sum(todecimal(totaltokens)),
avg(todecimal(totaltokens))
by ip, model
- プロンプトの完了を監視するクエリの例:
ApiManagementGatewayLogs
| where OperationId == 'completions_create'
| extend model = tostring(parse_json(BackendResponseBody)['model'])
| extend prompttokens = parse_json(parse_json(BackendResponseBody)['usage'])['prompt_tokens']
| extend prompttext = substring(parse_json(parse_json(BackendResponseBody)['choices'])[0], 0, 100)