次の方法で共有


Azure AI サービスでモデルのコンテンツ フィルター (プレビュー) を構成する方法

重要

この記事で "(プレビュー)" と付記されている項目は、現在、パブリック プレビュー段階です。 このプレビューはサービス レベル アグリーメントなしで提供されており、運用環境ではお勧めしません。 特定の機能はサポート対象ではなく、機能が制限されることがあります。 詳しくは、Microsoft Azure プレビューの追加使用条件に関するページをご覧ください。

Azure AI サービスに統合されたコンテンツ フィルタリング システムは、コア モデルと共に実行されます。 これは、一連の複数クラスの分類モデルを使用して、有害なコンテンツの 4 つのカテゴリ (暴力、憎悪、性的、自傷行為) をそれぞれ 4 つの重大度レベル (安全、低、中、高) で検出します。 これは、パブリック リポジトリ内の脱獄リスク、既存のテキスト、コードを検出するためのオプションのバイナリ分類子を提供します。 コンテンツ カテゴリ、重大度レベル、コンテンツ フィルタリング システムの動作の詳細については、次の記事を参照してください

既定のコンテンツ フィルタリング構成では、プロンプトと入力候補の両方で、4 つの有害なコンテンツ カテゴリすべてに対して重大度しきい値が中でフィルタリングするように設定されています。 したがって、重大度レベルが中または高として検出されたコンテンツはフィルター処理されますが、重大度レベルが低または安全として検出されたコンテンツはフィルター処理されません。

コンテンツ フィルターは、リソース レベルで構成し、1 つ以上のデプロイに関連付けることができます。

前提条件

この記事を完了するには、以下が必要です。

カスタム コンテンツ フィルターを作成する

カスタム コンテンツ フィルターを作成するには、以下の手順に従います。

  1. Azure AI Foundry ポータルに移動します。

  2. [安全性 + セキュリティ] を選択します。

  3. [コンテンツ フィルター] タブを選択し、[コンテンツ フィルターの作成] を選択します。

  4. [基本情報] で、コンテンツ フィルターに名前を付けます。

  5. [接続] で、プロジェクトに接続されている [Azure AI サービス] リソースへの接続を選択します。

  6. [入力フィルター] で、要件に応じてフィルターを構成します。 この構成は、要求がモデル自体に到達する前に適用されます。

  7. [出力フィルター] で、要件に応じてフィルターを構成します。 この構成は、モデルの実行後に適用され、コンテンツが生成されます。

  8. [次へ] を選択します。

  9. 必要に応じて、作成されたコンテンツ フィルターに特定のデプロイを関連付けることができます。 関連付けられているモデル デプロイはいつでも変更できます。

  10. デプロイが完了すると、新しいコンテンツ フィルターがモデル デプロイに適用されます。

コード内のコンテンツ フィルタリング用のアカウント

コンテンツ フィルタリングがモデル デプロイに適用されると、入力と出力に応じてサービスによって要求を取得できます。 コンテンツ フィルターがトリガーされると、トリガーされたルールの説明と共に 400 エラー コードが返されます。

pip のように、パッケージ マネージャーを使用してパッケージ azure-ai-inference をインストールします。

pip install azure-ai-inference>=1.0.0b5

警告

Azure AI サービス リソースには、Python のバージョン azure-ai-inference>=1.0.0b5 が必要です。

その後、パッケージを使用してモデルを使用できます。 次の例では、チャット入力候補を使用してクライアントを作成する方法を示します。

import os
from azure.ai.inference import ChatCompletionsClient
from azure.core.credentials import AzureKeyCredential

model = ChatCompletionsClient(
    endpoint="https://<resource>.services.ai.azure.com/models",
    credential=AzureKeyCredential(os.environ["AZUREAI_ENDPOINT_KEY"]),
)

サンプルを確認し、API リファレンス ドキュメントを参照して、作業を開始してください。

次の例は、コンテンツの安全性をトリガーしたチャット入力候補要求に対する応答を示しています。

from azure.ai.inference.models import AssistantMessage, UserMessage, SystemMessage
from azure.core.exceptions import HttpResponseError

try:
    response = model.complete(
        messages=[
            SystemMessage(content="You are an AI assistant that helps people find information."),
            UserMessage(content="Chopping tomatoes and cutting them into cubes or wedges are great ways to practice your knife skills."),
        ]
    )

    print(response.choices[0].message.content)

except HttpResponseError as ex:
    if ex.status_code == 400:
        response = json.loads(ex.response._content.decode('utf-8'))
        if isinstance(response, dict) and "error" in response:
            print(f"Your request triggered an {response['error']['code']} error:\n\t {response['error']['message']}")
        else:
            raise ex
    else:
        raise ex

ベスト プラクティスに従う

反復的な特定 (レッド チーム テスト、ストレス テスト、分析など) と測定のプロセスを通じてコンテンツ フィルタリング構成の決定を通知し、特定のモデル、アプリケーション、デプロイ シナリオに関連する潜在的な損害に対処することをお勧めします。 コンテンツ フィルタリングなどの軽減策を実装した後、測定を繰り返して有効性をテストします。

Microsoft Responsible AI Standard に基づいた Azure OpenAI の Responsible AI に関する推奨事項とベスト プラクティスについては、「Azure OpenAI の Responsible AI の概要」を参照してください。

重要

この記事で "(プレビュー)" と付記されている項目は、現在、パブリック プレビュー段階です。 このプレビューはサービス レベル アグリーメントなしで提供されており、運用環境ではお勧めしません。 特定の機能はサポート対象ではなく、機能が制限されることがあります。 詳しくは、Microsoft Azure プレビューの追加使用条件に関するページをご覧ください。

Azure AI サービスに統合されたコンテンツ フィルタリング システムは、コア モデルと共に実行されます。 これは、一連の複数クラスの分類モデルを使用して、有害なコンテンツの 4 つのカテゴリ (暴力、憎悪、性的、自傷行為) をそれぞれ 4 つの重大度レベル (安全、低、中、高) で検出します。 これは、パブリック リポジトリ内の脱獄リスク、既存のテキスト、コードを検出するためのオプションのバイナリ分類子を提供します。 コンテンツ カテゴリ、重大度レベル、コンテンツ フィルタリング システムの動作の詳細については、次の記事を参照してください

既定のコンテンツ フィルタリング構成では、プロンプトと入力候補の両方で、4 つの有害なコンテンツ カテゴリすべてに対して重大度しきい値が中でフィルタリングするように設定されています。 したがって、重大度レベルが中または高として検出されたコンテンツはフィルター処理されますが、重大度レベルが低または安全として検出されたコンテンツはフィルター処理されません。

コンテンツ フィルターは、リソース レベルで構成し、1 つ以上のデプロイに関連付けることができます。

前提条件

この記事を完了するには、以下が必要です。

カスタム コンテンツ フィルタリングを使用してモデル デプロイを追加する

Azure AI Foundry ポータルを使用するか、Bicep を使用してコード内でコンテンツ フィルターを作成することをお勧めします。 カスタム コンテンツ フィルターの作成またはデプロイへのカスタム コンテンツ フィルターの適用は、Azure CLI を使用する場合はサポートされていません。

コード内のコンテンツ フィルタリング用のアカウント

コンテンツ フィルタリングがモデル デプロイに適用されると、入力と出力に応じてサービスによって要求を取得できます。 コンテンツ フィルターがトリガーされると、トリガーされたルールの説明と共に 400 エラー コードが返されます。

pip のように、パッケージ マネージャーを使用してパッケージ azure-ai-inference をインストールします。

pip install azure-ai-inference>=1.0.0b5

警告

Azure AI サービス リソースには、Python のバージョン azure-ai-inference>=1.0.0b5 が必要です。

その後、パッケージを使用してモデルを使用できます。 次の例では、チャット入力候補を使用してクライアントを作成する方法を示します。

import os
from azure.ai.inference import ChatCompletionsClient
from azure.core.credentials import AzureKeyCredential

model = ChatCompletionsClient(
    endpoint="https://<resource>.services.ai.azure.com/models",
    credential=AzureKeyCredential(os.environ["AZUREAI_ENDPOINT_KEY"]),
)

サンプルを確認し、API リファレンス ドキュメントを参照して、作業を開始してください。

次の例は、コンテンツの安全性をトリガーしたチャット入力候補要求に対する応答を示しています。

from azure.ai.inference.models import AssistantMessage, UserMessage, SystemMessage
from azure.core.exceptions import HttpResponseError

try:
    response = model.complete(
        messages=[
            SystemMessage(content="You are an AI assistant that helps people find information."),
            UserMessage(content="Chopping tomatoes and cutting them into cubes or wedges are great ways to practice your knife skills."),
        ]
    )

    print(response.choices[0].message.content)

except HttpResponseError as ex:
    if ex.status_code == 400:
        response = json.loads(ex.response._content.decode('utf-8'))
        if isinstance(response, dict) and "error" in response:
            print(f"Your request triggered an {response['error']['code']} error:\n\t {response['error']['message']}")
        else:
            raise ex
    else:
        raise ex

ベスト プラクティスに従う

反復的な特定 (レッド チーム テスト、ストレス テスト、分析など) と測定のプロセスを通じてコンテンツ フィルタリング構成の決定を通知し、特定のモデル、アプリケーション、デプロイ シナリオに関連する潜在的な損害に対処することをお勧めします。 コンテンツ フィルタリングなどの軽減策を実装した後、測定を繰り返して有効性をテストします。

Microsoft Responsible AI Standard に基づいた Azure OpenAI の Responsible AI に関する推奨事項とベスト プラクティスについては、「Azure OpenAI の Responsible AI の概要」を参照してください。

重要

この記事で "(プレビュー)" と付記されている項目は、現在、パブリック プレビュー段階です。 このプレビューはサービス レベル アグリーメントなしで提供されており、運用環境ではお勧めしません。 特定の機能はサポート対象ではなく、機能が制限されることがあります。 詳しくは、Microsoft Azure プレビューの追加使用条件に関するページをご覧ください。

Azure AI サービスに統合されたコンテンツ フィルタリング システムは、コア モデルと共に実行されます。 これは、一連の複数クラスの分類モデルを使用して、有害なコンテンツの 4 つのカテゴリ (暴力、憎悪、性的、自傷行為) をそれぞれ 4 つの重大度レベル (安全、低、中、高) で検出します。 これは、パブリック リポジトリ内の脱獄リスク、既存のテキスト、コードを検出するためのオプションのバイナリ分類子を提供します。 コンテンツ カテゴリ、重大度レベル、コンテンツ フィルタリング システムの動作の詳細については、次の記事を参照してください

既定のコンテンツ フィルタリング構成では、プロンプトと入力候補の両方で、4 つの有害なコンテンツ カテゴリすべてに対して重大度しきい値が中でフィルタリングするように設定されています。 したがって、重大度レベルが中または高として検出されたコンテンツはフィルター処理されますが、重大度レベルが低または安全として検出されたコンテンツはフィルター処理されません。

コンテンツ フィルターは、リソース レベルで構成し、1 つ以上のデプロイに関連付けることができます。

前提条件

この記事を完了するには、以下が必要です。

  • Azure CLI をインストールします。

  • 次の情報を特定します。

    • Azure のサブスクリプション ID。

    • Azure AI サービス リソース名。

    • Azure AI サービス リソースがデプロイされているリソース グループ。

    • デプロイするモデル名、プロバイダー、バージョン、SKU。 これは、Azure AI Foundry ポータルまたは Azure CLI を使用して特定できます。 この例では、次のモデルをデプロイします。

      • モデル名:: Phi-3.5-vision-instruct
      • プロバイダー: Microsoft
      • バージョン:2
      • デプロイの種類: グローバル標準

カスタム コンテンツ フィルタリングを使用してモデル デプロイを追加する

  1. テンプレート ai-services-content-filter-template.bicep を使用して、コンテンツ フィルター ポリシーを記述します。

    ai-services-content-filter-template.bicep

    @description('Name of the Azure AI Services account where the policy will be created')
    param accountName string
    
    @description('Name of the policy to be created')
    param policyName string
    
    @allowed(['Asynchronous_filter', 'Blocking', 'Default', 'Deferred'])
    param mode string = 'Default'
    
    @description('Base policy to be used for the new policy')
    param basePolicyName string = 'Microsoft.DefaultV2'
    
    param contentFilters array = [
      {
          name: 'Violence'
          severityThreshold: 'Medium'
          blocking: true
          enabled: true
          source: 'Prompt'
      }
      {
          name: 'Hate'
          severityThreshold: 'Medium'
          blocking: true
          enabled: true
          source: 'Prompt'
      }
      {
          name: 'Sexual'
          severityThreshold: 'Medium'
          blocking: true
          enabled: true
          source: 'Prompt'
      }
      {
          name: 'Selfharm'
          severityThreshold: 'Medium'
          blocking: true
          enabled: true
          source: 'Prompt'
      }
      {
          name: 'Jailbreak'
          blocking: true
          enabled: true
          source: 'Prompt'
      }
      {
          name: 'Indirect Attack'
          blocking: true
          enabled: true
          source: 'Prompt'
      }
      {
          name: 'Profanity'
          blocking: true
          enabled: true
          source: 'Prompt'
      }
      {
          name: 'Violence'
          severityThreshold: 'Medium'
          blocking: true
          enabled: true
          source: 'Completion'
      }
      {
          name: 'Hate'
          severityThreshold: 'Medium'
          blocking: true
          enabled: true
          source: 'Completion'
      }
      {
          name: 'Sexual'
          severityThreshold: 'Medium'
          blocking: true
          enabled: true
          source: 'Completion'
      }
      {
          name: 'Selfharm'
          severityThreshold: 'Medium'
          blocking: true
          enabled: true
          source: 'Completion'
      }
      {
          name: 'Protected Material Text'
          blocking: true
          enabled: true
          source: 'Completion'
      }
      {
          name: 'Protected Material Code'
          blocking: false
          enabled: true
          source: 'Completion'
      }
      {
          name: 'Profanity'
          blocking: true
          enabled: true
          source: 'Completion'
      }
    ]
    
    resource raiPolicy 'Microsoft.CognitiveServices/accounts/raiPolicies@2024-06-01-preview' = {
        name: '${accountName}/${policyName}'
        properties: {
            mode: mode
            basePolicyName: basePolicyName
            contentFilters: contentFilters
        }
    }
    
  2. テンプレート ai-services-deployment-template.bicep を使用して、モデル デプロイについて説明します。

    ai-services-deployment-template.bicep

    @description('Name of the Azure AI services account')
    param accountName string
    
    @description('Name of the model to deploy')
    param modelName string
    
    @description('Version of the model to deploy')
    param modelVersion string
    
    @allowed([
      'AI21 Labs'
      'Cohere'
      'Core42'
      'DeepSeek'
      'Meta'
      'Microsoft'
      'Mistral AI'
      'OpenAI'
    ])
    @description('Model provider')
    param modelPublisherFormat string
    
    @allowed([
        'GlobalStandard'
        'Standard'
        'GlobalProvisioned'
        'Provisioned'
    ])
    @description('Model deployment SKU name')
    param skuName string = 'GlobalStandard'
    
    @description('Content filter policy name')
    param contentFilterPolicyName string = 'Microsoft.DefaultV2'
    
    @description('Model deployment capacity')
    param capacity int = 1
    
    resource modelDeployment 'Microsoft.CognitiveServices/accounts/deployments@2024-04-01-preview' = {
      name: '${accountName}/${modelName}'
      sku: {
        name: skuName
        capacity: capacity
      }
      properties: {
        model: {
          format: modelPublisherFormat
          name: modelName
          version: modelVersion
        }
        raiPolicyName: contentFilterPolicyName == null ? 'Microsoft.Nill' : contentFilterPolicyName
      }
    }
    
  3. メイン デプロイ定義を作成します。

    main.bicep

    param accountName string
    param modelName string
    param modelVersion string
    param modelPublisherFormat string
    param contentFilterPolicyName string
    
    module raiPolicy 'ai-services-content-filter-template.bicep' = {
      name: 'raiPolicy'
      scope: resourceGroup(resourceGroupName)
      params: {
        accountName: accountName
        policyName: contentFilterPolicyName
      }
    }
    
    module modelDeployment 'ai-services-deployment-template.bicep' = {
        name: 'modelDeployment'
        scope: resourceGroup(resourceGroupName)
        params: {
            accountName: accountName
            modelName: modelName
            modelVersion: modelVersion
            modelPublisherFormat: modelPublisherFormat
            contentFilterPolicyName: contentFilterPolicyName
        }
        dependsOn: [
            raiPolicy
        ]
    }
    
  4. デプロイを実行します。

    RESOURCE_GROUP="<resource-group-name>"
    ACCOUNT_NAME="<azure-ai-model-inference-name>" 
    MODEL_NAME="Phi-3.5-vision-instruct"
    PROVIDER="Microsoft"
    VERSION=2
    RAI_POLICY_NAME="custom-policy"
    
    az deployment group create \
        --resource-group $RESOURCE_GROUP \
        --template-file main.bicep \
        --parameters accountName=$ACCOUNT_NAME raiPolicyName=$RAI_POLICY_NAME modelName=$MODEL_NAME modelVersion=$VERSION modelPublisherFormat=$PROVIDER
    

コード内のコンテンツ フィルタリング用のアカウント

コンテンツ フィルタリングがモデル デプロイに適用されると、入力と出力に応じてサービスによって要求を取得できます。 コンテンツ フィルターがトリガーされると、トリガーされたルールの説明と共に 400 エラー コードが返されます。

pip のように、パッケージ マネージャーを使用してパッケージ azure-ai-inference をインストールします。

pip install azure-ai-inference>=1.0.0b5

警告

Azure AI サービス リソースには、Python のバージョン azure-ai-inference>=1.0.0b5 が必要です。

その後、パッケージを使用してモデルを使用できます。 次の例では、チャット入力候補を使用してクライアントを作成する方法を示します。

import os
from azure.ai.inference import ChatCompletionsClient
from azure.core.credentials import AzureKeyCredential

model = ChatCompletionsClient(
    endpoint="https://<resource>.services.ai.azure.com/models",
    credential=AzureKeyCredential(os.environ["AZUREAI_ENDPOINT_KEY"]),
)

サンプルを確認し、API リファレンス ドキュメントを参照して、作業を開始してください。

次の例は、コンテンツの安全性をトリガーしたチャット入力候補要求に対する応答を示しています。

from azure.ai.inference.models import AssistantMessage, UserMessage, SystemMessage
from azure.core.exceptions import HttpResponseError

try:
    response = model.complete(
        messages=[
            SystemMessage(content="You are an AI assistant that helps people find information."),
            UserMessage(content="Chopping tomatoes and cutting them into cubes or wedges are great ways to practice your knife skills."),
        ]
    )

    print(response.choices[0].message.content)

except HttpResponseError as ex:
    if ex.status_code == 400:
        response = json.loads(ex.response._content.decode('utf-8'))
        if isinstance(response, dict) and "error" in response:
            print(f"Your request triggered an {response['error']['code']} error:\n\t {response['error']['message']}")
        else:
            raise ex
    else:
        raise ex

ベスト プラクティスに従う

反復的な特定 (レッド チーム テスト、ストレス テスト、分析など) と測定のプロセスを通じてコンテンツ フィルタリング構成の決定を通知し、特定のモデル、アプリケーション、デプロイ シナリオに関連する潜在的な損害に対処することをお勧めします。 コンテンツ フィルタリングなどの軽減策を実装した後、測定を繰り返して有効性をテストします。

Microsoft Responsible AI Standard に基づいた Azure OpenAI の Responsible AI に関する推奨事項とベスト プラクティスについては、「Azure OpenAI の Responsible AI の概要」を参照してください。

次のステップ