次の方法で共有


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

構成可能なコンテンツ フィルターは、ほとんどのコンテンツ モデレーションのニーズに十分です。 ただし、ユース ケースに固有の用語でのフィルター処理が必要な場合があります。

前提条件

  • Azure サブスクリプション。 無料で作成できます。
  • Azure サブスクリプションを取得したら、Azure portal で Azure OpenAI リソースを作成して、トークン、キー、エンドポイントを取得します。 リソースに一意の名前を入力し、アプリケーション フォームで入力したサブスクリプションを選び、リソース グループ、サポートされているリージョン、サポートされている価格レベルを選びます。 [作成] を選択します。
    • リソースのデプロイには数分かかります。 完了した後、[リソースに移動] を選択します。 左ペインの [リソース管理] で、[サブスクリプション キーとエンドポイント] を選びます。 エンドポイントといずれかのキーが、API の呼び出しに使われます。
  • Azure CLI がインストールされていること
  • インストールされた cURL

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

ブロックリストは、Azure OpenAI API を使用して作成できます。 使用を開始するには、次のステップを参照してください。

トークンを取得する

まず、ブロックリストを作成、編集、削除するための 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 (既存のリストを更新) になります。

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

コンテンツ フィルターをまだ作成していない場合は、Azure AI Foundry で作成できます。 コンテンツのフィルター処理に関する記事をご覧ください。

コンテンツ フィルターに入力候補ブロックリストを適用するには、次の 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": [ ] 
    } 
}' 

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

Note

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. "blocking pattern" フィールドの値を、ブロックリストに追加する項目に置き換えます。 ブロック項目の長さは最大 1000 文字です。 また、パターンが正規表現か完全一致かを指定します。
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  
    }  
}' 

Note

新しい用語がブロックリストに追加されるまでに約 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 エンドポイントを呼び出す手順については、クイック スタートに関する記事をご覧ください。

以下の例では、ブロックリストを含む 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": [ 
                    { 
                        "filtered": true, 
                        "id": "raiBlocklistName" 
                    } 
                ], 
                "hate": { 
                    "filtered": false, 
                    "severity": "safe" 
                }, 
                "self_harm": { 
                    "filtered": false, 
                    "severity": "safe" 
                }, 
                "sexual": { 
                    "filtered": false, 
                    "severity": "safe" 
                }, 
                "violence": { 
                    "filtered": false, 
                    "severity": "safe" 
                } 
            } 
        } 
    } 
} 

入力候補自体がブロックされている場合は、ブロックリストのコンテンツが一致した場合にのみ完了が切断されるため、応答は 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 
    } 
} 

次のステップ