次の方法で共有


Microsoft Foundry モデルでブロックリストを使用する方法

Microsoft Foundry で使用可能な構成可能なガードレールとコントロールは、ほとんどのコンテンツ モデレーション のニーズに十分です。 ただし、競合他社の名前、内部project名、ドメイン固有の機密用語など、ユース ケースに固有の用語をフィルター処理することが必要になる場合があります。 このため、指定した用語を含むコンテンツを自動的にフィルター処理するカスタム ブロック リストを作成できます。

この記事では、次の方法について説明します。

  • カスタム ブロックリストの作成と管理
  • 完全一致または正規表現パターンを使用して用語を追加する
  • コンテンツ フィルターにブロックリストを適用する
  • デプロイでブロックリストの動作をテストする

[前提条件]

  • Azure CLI バージョン 2.50 以降
  • cURLがインストールされました

ブロック リストを使用する

Azure OpenAI API を使用してブロック リストを作成できます。 次の手順は、get startedに役立ちます。

トークンを取得する

まず、ブロック リストを作成、編集、削除するための API にアクセスするためのトークンを取得する必要があります。 このトークンは、次の Azure CLI コマンドを使用して取得できます。

az account get-access-token 

ブロックリストを作成または変更する

下の cURL コマンドをテキスト エディターにコピーし、次の変更を行います。

  1. {subscriptionId} を実際のサブスクリプション ID に置き換えます。
  2. {resourceGroupName} をリソース グループ名に置き換えます。
  3. {accountName} をリソース名に置き換えます。
  4. {raiBlocklistName} (URL 内) をリストのカスタム名に置き換えます。 使用できる文字: 0-9, A-Z, a-z, - . _ ~
  5. {token} を上記の「トークンを取得する」の手順で取得したトークンに置き換えます。
  6. 必要に応じて、[解説] フィールドの値をカスタムの説明に置き換えます。
curl --location --request PUT 'https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CognitiveServices/accounts/{accountName}/raiBlocklists/{raiBlocklistName}?api-version=2024-04-01-preview' \ 
--header 'Authorization: Bearer {token}' \ 
--header 'Content-Type: application/json' \ 
--data-raw '{ 
    "properties": { 
        "description": "This is a prompt blocklist"  
    } 
}' 

応答コードは、201 (新しいリストを作成) または 200 (既存のリストを更新) になります。

ブロックリストをコンテンツ フィルターに適用する

コンテンツ フィルターをまだ作成していない場合は、Foundry で作成できます。 「Content フィルター処理を参照してください。

コンテンツ フィルターに補完ブロックリストを適用するには、次の cURL コマンドを使用します:

  1. {subscriptionId} を実際のサブ ID に置き換えます。
  2. {resourceGroupName} をリソース グループ名に置き換えます。
  3. {accountName} をリソース名に置き換えます。
  4. {raiPolicyName} をコンテンツ フィルターの名前に置き換えます
  5. {token} を上記の「トークンを取得する」の手順で取得したトークンに置き換えます。
  6. ブロックリストを AI モデルの入力候補ではなくユーザー プロンプトに適用する場合は、必要に応じてタイトルを "completionBlocklists" から "promptBlocklists" に変更します。
  7. 本文の "raiBlocklistName" をリストのカスタム名に置き換えます。 使用できる文字: 0-9, A-Z, a-z, - . _ ~
curl --location --request PUT 'https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CognitiveServices/accounts/{accountName}/raiPolicies/{raiPolicyName}?api-version=2024-04-01-preview' \ 
--header 'Authorization: Bearer {token}' \ 
--header 'Content-Type: application/json' \ 
--data-raw '{ 
    "properties": { 
        "basePolicyName": "Microsoft.Default", 
        "completionBlocklists": [{ 
            "blocklistName": "raiBlocklistName", 
            "blocking": true 
        }], 
        "contentFilters": [ ] 
    } 
}' 

リストに ブロック項目 を追加する

1 つのリストで許可される用語の上限は 10,000 です。

下の cURL コマンドをテキスト エディターにコピーし、次の変更を行います。

  1. {subscriptionId} を実際のサブ ID に置き換えます。
  2. {resourceGroupName} をリソース グループ名に置き換えます。
  3. {accountName} をリソース名に置き換えます。
  4. {raiBlocklistName} (URL 内) をリストのカスタム名に置き換えます。 使用できる文字: 0-9, A-Z, a-z, - . _ ~
  5. {raiBlocklistItemName} をリスト アイテムのカスタム名に置き換えます。
  6. {token} を上記の「トークンを取得する」の手順で取得したトークンに置き換えます。
  7. "pattern" フィールドの値を、ブロックリストに追加する項目に置き換えます。 blockItem の最大長は 1,000 文字です。 また、パターンが正規表現か完全一致かを指定します。
curl --location --request PUT 'https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CognitiveServices/accounts/{accountName}/raiBlocklists/{raiBlocklistName}/raiBlocklistItems/{raiBlocklistItemName}?api-version=2024-04-01-preview' \ 
--header 'Authorization: Bearer {token}' \ 
--header 'Content-Type: application/json' \ 
--data-raw '{  
    "properties": {  
        "pattern": "blocking pattern",  
        "isRegex": false  
    }  
}' 

新しい用語がブロックリストに追加されるまでに約 5 分かかる場合があります。 5 分後にブロックリストをテストします。

応答コードは 200 になるはずです。

{ 
  "name": "raiBlocklistItemName", 
  "id": "/subscriptions/subscriptionId/resourceGroups/resourceGroupName/providers/Microsoft.CognitiveServices/accounts/accountName/raiBlocklists/raiBlocklistName/raiBlocklistItems/raiBlocklistItemName", 
  "properties": { 
    "pattern": "blocking pattern", 
    "isRegex": false 
  } 
} 

ブロックリストを使用してテキストを分析する

これで、ブロックリストを含むデプロイをテストできます。 Azure OpenAI エンドポイントを呼び出す手順については、Quickstart を参照してください。

以下の例では、ブロックリストを含む GPT-35-Turbo のデプロイによってプロンプトがブロックされています。 応答は 400 エラーを返します。

{
  "error": {
    "message": "The response was filtered due to the prompt triggering Azure OpenAI's content management policy. Please modify your prompt and retry. To learn more about our content filtering policies please read our documentation: https://go.microsoft.com/fwlink/?linkid=2198766",
    "type": null,
    "param": "prompt",
    "code": "content_filter",
    "status": 400,
    "innererror": {
      "code": "ResponsibleAIPolicyViolation",
      "content_filter_result": {
        "custom_blocklists": {
          "details": [{ "filtered": true, "id": "pizza" }],
          "filtered": true
        }
      }
    }
  }
}

入力候補自体がブロックされている場合は、ブロックリストのコンテンツが一致した場合にのみ完了が中止されるため、応答は 200 を返します。 注釈は、ブロックリスト項目が一致したことを示しています。

{ 
    "id": "chatcmpl-85NkyY0AkeBMunOjyxivQSiTaxGAl", 
    "object": "chat.completion", 
    "created": 1696293652, 
    "model": "gpt-35-turbo", 
    "prompt_filter_results": [ 
        { 
            "prompt_index": 0, 
            "content_filter_results": { 
                "hate": { 
                    "filtered": false, 
                    "severity": "safe" 
                }, 
                "self_harm": { 
                    "filtered": false, 
                    "severity": "safe" 
                }, 
                "sexual": { 
                    "filtered": false, 
                    "severity": "safe" 
                }, 
                "violence": { 
                    "filtered": false, 
                    "severity": "safe" 
                } 
            } 
        } 
    ], 
    "choices": [ 
        { 
            "index": 0, 
            "finish_reason": "content_filter", 
            "message": { 
                "role": "assistant" 
            }, 
            "content_filter_results": { 
                "custom_blocklists": [ 
                    { 
                        "filtered": true, 
                        "id": "myBlocklistName" 
                    } 
                ], 
                "hate": { 
                    "filtered": false, 
                    "severity": "safe" 
                }, 
                "self_harm": { 
                    "filtered": false, 
                    "severity": "safe" 
                }, 
                "sexual": { 
                    "filtered": false, 
                    "severity": "safe" 
                }, 
                "violence": { 
                    "filtered": false, 
                    "severity": "safe" 
                } 
            } 
        } 
    ], 
    "usage": { 
        "completion_tokens": 75, 
        "prompt_tokens": 27, 
        "total_tokens": 102 
    } 
} 

応答のキー フィールド:

  • finish_reason: "content_filter" は、ブロックリストの一致によって完了が停止されたことを示します
  • custom_blocklists[].id は、フィルターをトリガーしたブロックリストを示します
  • custom_blocklists[].filtered: true コンテンツがブロックされたことを確認します

ブロックリストアイテムを削除する

ブロックリスト項目を削除するには、次の cURL コマンドを使用します。

  1. {subscriptionId} を実際のサブスクリプション ID に置き換えます。
  2. {resourceGroupName} をリソース グループ名に置き換えます。
  3. {accountName} をリソース名に置き換えます。
  4. {raiBlocklistName} をブロックリストの名前に置き換えます。
  5. {raiBlocklistItemName} を削除する項目の名前に置き換えます。
  6. {token} を上記の「トークンを取得する」の手順で取得したトークンに置き換えます。
curl --location --request DELETE 'https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CognitiveServices/accounts/{accountName}/raiBlocklists/{raiBlocklistName}/raiBlocklistItems/{raiBlocklistItemName}?api-version=2024-10-01' \
--header 'Authorization: Bearer {token}'

応答コードは、 200 (アイテムが削除) または 204 (コンテンツなし) である必要があります。

ブロックリストを削除する

ブロックリスト全体を削除するには、次の cURL コマンドを使用します。

  1. {subscriptionId} を実際のサブスクリプション ID に置き換えます。
  2. {resourceGroupName} をリソース グループ名に置き換えます。
  3. {accountName} をリソース名に置き換えます。
  4. {raiBlocklistName} を削除するブロックリストの名前に置き換えます。
  5. {token} を上記の「トークンを取得する」の手順で取得したトークンに置き換えます。
curl --location --request DELETE 'https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CognitiveServices/accounts/{accountName}/raiBlocklists/{raiBlocklistName}?api-version=2024-10-01' \
--header 'Authorization: Bearer {token}'

Warnung

ブロックリストを削除すると、そのリスト内のすべてのアイテムが削除され、元に戻すことはできません。

トラブルシューティング

403 禁止エラー

Azure AD トークンに適切なアクセス許可があることを確認します。 アカウントには、Azure OpenAI リソースの Cognitive Services 共同作成者 または Owner ロールが必要です。

ブロックリストが有効にならない

新しいブロックリストの用語が反映されるまでに最大 5 分かかることがあります。 もう一度待ってテストします。 問題が解決しない場合は、ブロックリストがコンテンツ フィルターに正しく適用されていることを確認します。

予期されるコンテンツと一致しないパターン

正規表現パターンを使用する場合は、パターン構文が有効であることを確認してください。 ブロックリストに追加する前に、正規表現パターンを個別にテストします。 一般的な問題は次のとおりです。

  • エスケープされていない特殊文字
  • 大文字と小文字の区別 (パターンはデフォルトで大文字と小文字を区別します)
  • アンカー (^$) は、ストリーミング シナリオでは期待どおりに動作しない可能性があります

クォータ制限に達しました

各ブロックリストには、最大 10,000 個の用語を含めることができます。 さらに必要な場合は、さらにブロックリストを作成し、同じコンテンツ フィルターに適用します。