次の方法で共有


クイックスタート: テキスト ブロックリストを使用する

Azure AI Content Safety を使用してカスタム テキスト ブロックリストを作成し、それを使用してテキスト内の有害なコンテンツを検出しましょう。

注意事項

サンプル データとコードには不快なコンテンツが含まれている可能性があります。 ユーザーの裁量が推奨されます。

前提条件

設定

次の手順に従って、Content Safety の [試行] ページを使用します。

  1. Azure AI Foundry にアクセスし、プロジェクト/ハブに移動します。 次に、左側のナビゲーションの [Guardrails + controls ] タブを選択し、[ 試してみる ] タブを選択します。
  2. [ してみる] ページでは、テキストや画像コンテンツなどのさまざまな Guardrails およびコントロール機能を試し、調整可能なしきい値を使用して不適切または有害なコンテンツをフィルター処理できます。

Guardrails とコントロールの [試してみる] ページのスクリーンショット。

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

[Use blocklist] (ブロックリストの使用) タブでは、ブロックリストの作成、編集、モデレーション ワークフローへの追加を行うことができます。 テストの実行時にブロックリストを有効にしている場合、[結果] の下に [Blocklist detection] (ブロックリストの検出) パネルが表示されます。 ブロックリストと一致するものがあれば報告されます。

[ブロックリストの使用] パネルのスクリーンショット。

前提条件

  • Azure サブスクリプション - 無料アカウントを作成します
  • Azure サブスクリプションを入手したら、Azure portal で Content Safety リソースを作成し、キーとエンドポイントを取得します。 リソースの一意の名前を入力し、サブスクリプションを選択して、リソース グループ、サポートされているリージョン (「利用可能なリージョン」を参照)、サポートされている価格レベルを選択します。 [作成] を選択します。
    • リソースのデプロイには数分かかります。 完了したら、[リソースに移動] を選びます。 左ペインの [リソース管理] で、[サブスクリプション キーとエンドポイント] を選びます。 エンドポイントといずれかのキーが、API の呼び出しに使われます。
  • インストールされた [cURL](https://curl.haxx.se/)

ブロックリストを作成する

次のセクションでは、cURL を使ったサンプル要求について説明します。 以下のコマンドをテキスト エディターに貼り付け、次の変更を加えます。

  1. <endpoint> を、リソースに関連付けられたエンドポイント URL に置き換えます。
  2. <your_subscription_key> を、リソースに付属するキーのいずれかに置き換えます。
  3. <your_blocklist_name> を、ブロックリストの名前に置き換えます。
  4. 必要に応じて、本文の "description" フィールドを、一覧の実際の説明に置き換えます。
curl --location --request PATCH '<endpoint>/contentsafety/text/blocklists/<your_blocklist_name>?api-version=2024-09-01' --header 'Ocp-Apim-Subscription-Key: <your_subscription_key>' --header 'Content-Type: application/json' --data-raw '{"description": "This is a violence list"}'

URL には以下のフィールドを含める必要があります。

名前 必須 説明 種類
API バージョン 必須 これは確認する API のバージョンです。 現在のバージョン: api-version=2024-09-01。 例: <endpoint>/contentsafety/text:analyze?api-version=2024-09-01

次のサンプル要求本文を参照してください。

{
  "description": "Test Blocklist"
}

コマンド プロンプト ウィンドウを開き、編集した cURL コマンドを貼り付けて実行します。

出力

コンソール出力に、JSON データ形式で結果が表示されます。 次に例を示します。

{
  "blocklistName": "TestBlocklist",
  "description": "Test Blocklist"
}

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

次のセクションでは、cURL を使ったサンプル要求について説明します。 以下のコマンドをテキスト エディターに貼り付け、次の変更を加えます。

  1. <endpoint> を、リソースに関連付けられたエンドポイント URL に置き換えます。
  2. <your_subscription_key> を、リソースに付属するキーのいずれかに置き換えます。
  3. <your_blocklist_name> を、ブロックリストの名前に置き換えます。
  4. 必要に応じて、本文の "description""text" の各フィールドを、実際のブロックリストの項目と説明に置き換えます。
curl --request POST <endpoint>/contentsafety/text/blocklists/<your_blocklist_name>:addOrUpdateBlocklistItems?api-version=2024-09-01 --header 'Ocp-Apim-Subscription-Key: <your_subscription_key>' --header 'Content-Type: application/json' --data-raw '{"blocklistItems": [{"description": "string", "text": "bleed"}]}'

URL には以下のフィールドを含める必要があります。

名前 必須 説明 種類
API バージョン 必須 これは確認する API のバージョンです。 現在のバージョン: api-version=2024-09-01。 例: <endpoint>/contentsafety/text:analyze?api-version=2024-09-01

次のサンプル要求本文を参照してください。

{
  "blocklistItems": [
    {
      "description": "Hate word",
      "text": "hate"
    },
    {
      "description": "A regular expression that matches harmful words.",
      "text": "b[i1][a@][s\\$]",
      "isRegex": true
    }
  ]
}

コマンド プロンプト ウィンドウを開き、編集した cURL コマンドを貼り付けて実行します。

出力

コンソール出力に、JSON データ形式で結果が表示されます。 次に例を示します。

{
  "blocklistItems": [
    {
      "blocklistItemId": "9511969e-f1e3-4604-9127-05ee16c509ec",
      "description": "Hate word",
      "text": "hate",
      "isRegex": false
    },
    {
      "blocklistItemId": "d9b2d63d-a233-4123-847a-7d1b5b3b8a8e",
      "description": "A regular expression that matches harmful words.",
      "text": "b[i1][a@][s\\$]",
      "isRegex": true
    }
  ]
}

ブロックリストと照合してテキストを分析する

次のセクションでは、cURL を使ったサンプル要求について説明します。 以下のコマンドをテキスト エディターに貼り付け、次の変更を加えます。

  1. <endpoint> を、リソースに関連付けられたエンドポイント URL に置き換えます。
  2. <your_subscription_key> を、リソースに付属するキーのいずれかに置き換えます。
  3. <your_blocklist_name> を、ブロックリストの名前に置き換えます。
  4. <sample_text> を、ブロックリストと照合して分析するテキストに置き換えます。
curl --request POST '<endpoint>/contentsafety/text:analyze?api-version=2024-09-01' --header 'Ocp-Apim-Subscription-Key: <your_subscription_key>' --header 'Content-Type: application/json' --data-raw '{  "text": "<sample_text>", "categories": [   "Hate",  "Sexual",  "SelfHarm",  "Violence" ], "blocklistNames":["<your_blocklist_name>"], "haltOnBlocklistHit": false,"outputType": "FourSeverityLevels"}'

URL には以下のフィールドを含める必要があります。

名前 必須 説明 種類
API バージョン 必須 これは確認する API のバージョンです。 現在のバージョン: api-version=2024-09-01。 例: <endpoint>/contentsafety/text:analyze?api-version=2024-09-01

次のサンプル要求本文を参照してください。

{
  "text": "<sample_text>",
  "categories": [
    "Hate",
    "Sexual",
    "SelfHarm",
    "Violence"
  ],
  "blocklistNames": [
    "<your_blocklist_name>"
  ],
  "haltOnBlocklistHit": false,
  "outputType": "FourSeverityLevels"
}

コマンド プロンプト ウィンドウを開き、編集した cURL コマンドを貼り付けて実行します。

出力

コンソール出力に JSON データ形式で分析結果が表示されます。 次に例を示します。

{
  "blocklistsMatch": [
    {
      "blocklistName": "my-list",
      "blocklistItemId": "877bd6a0-236d-40f5-b6c2-07a6a1886ab1",
      "blocklistItemText": "bleed"
    }
  ],
  "categoriesAnalysis": [
    {
      "category": "Hate",
      "severity": 2
    },
    {
      "category": "Sexual",
      "severity": 0
    },
    {
      "category": "SelfHarm",
      "severity": 0
    },
    {
      "category": "Violence",
      "severity": 4
    }
  ]
}

リファレンスのドキュメント | ライブラリのソース コード | パッケージ (NuGet) | サンプル

前提条件

  • Azure サブスクリプション - 無料アカウントを作成します
  • .NET によるデスクトップ開発ワークロードを有効にした Visual Studio IDE。 または、Visual Studio IDE の使用を計画していない場合は、現在のバージョンの .NET Core が必要です。
  • Azure サブスクリプションを入手したら、Azure portal で Content Safety リソースを作成し、キーとエンドポイントを取得します。 リソースの一意の名前を入力し、サブスクリプションを選択して、リソース グループ、サポートされているリージョン (「利用可能なリージョン」を参照)、サポートされている価格レベルを選択します。 [作成] を選択します。
    • リソースのデプロイには数分かかります。 完了したら、[リソースに移動] を選びます。 左ペインの [リソース管理] で、[サブスクリプション キーとエンドポイント] を選びます。 エンドポイントといずれかのキーが、API の呼び出しに使われます。

アプリケーションの設定

新しい C# アプリケーションを作成します。

Visual Studio を開き、[開始する] の下で [新しいプロジェクトの作成] を選択します。 テンプレート フィルターを C#/すべてのプラットフォーム/コンソール に設定します。 [コンソール アプリ] (Windows、Linux、macOS 上の .NET で実行できるコマンド ライン アプリケーション) を選択し、[次へ] を選択します。 プロジェクト名を「ContentSafetyQuickstart」に更新し、[次へ] を選択します。 [.NET 6.0] 以降を選択し、[作成] を選んでプロジェクトを作成します。

クライアント SDK のインストール

新しいプロジェクトを作成したら、ソリューション エクスプローラーでプロジェクト ソリューションを右クリックし、[NuGet パッケージの管理] を選んで、クライアント SDK をインストールします。 パッケージ マネージャーが開いたら、[参照] を選択して Azure.AI.ContentSafety を検索します。 [インストール] を選択します。

環境変数を作成する

この例では、アプリケーションを実行しているローカル コンピューター上の環境変数に資格情報を書き込みます。

キーとエンドポイントの環境変数を設定するには、コンソール ウィンドウを開き、オペレーティング システムと開発環境の指示に従います。

  • CONTENT_SAFETY_KEY 環境変数を設定するには、YOUR_CONTENT_SAFETY_KEY をリソースのキーの 1 つに置き換えます。
  • CONTENT_SAFETY_ENDPOINT 環境変数を設定するには、YOUR_CONTENT_SAFETY_ENDPOINT をリソースのエンドポイントに置き換えます。

重要

API キーは慎重に使用してください。 API キーは、コード内に直接含めないようにし、絶対に公開しないでください。 API キーを使う場合は、Azure Key Vault に格納してセキュリティで保護してください。 アプリで API キーを安全に使用する方法の詳細については、Azure Key Vault を使用した API キーに関する記事を参照してください。

AI サービスのセキュリティの詳細については、「Azure AI サービスに対する要求の認証」を参照してください。

setx CONTENT_SAFETY_KEY 'YOUR_CONTENT_SAFETY_KEY'
setx CONTENT_SAFETY_ENDPOINT 'YOUR_CONTENT_SAFETY_ENDPOINT'

環境変数を追加した後、実行中のプログラムのうち、環境変数を読み取るプログラム (コンソール ウィンドウを含む) の再起動が必要となる場合があります。

ブロックリストを作成して使用する

プロジェクト ディレクトリから、以前に作成した Program.cs ファイルを開きます。 次のコードを貼り付けます。 このコードを使うと、新しいブロックリストを作成し、そこに項目を追加してから、ブロックリストと照合してテキスト文字列を分析することができます。

using System;
using Azure.AI.ContentSafety;
using Azure;
using Azure.Core;

class ContentSafetyBlocklist
{
    public static void UseBlocklist()
    {
        
        string endpoint = Environment.GetEnvironmentVariable("CONTENT_SAFETY_ENDPOINT");
        string key = Environment.GetEnvironmentVariable("CONTENT_SAFETY_KEY");
        Console.WriteLine("Endpoint: "+ endpoint);
        Console.WriteLine("Key: "+ key);
        
        BlocklistClient blocklistClient = new BlocklistClient(new Uri(endpoint), new AzureKeyCredential(key));
        
        var blocklistName = "ProductSaleBlocklist";
        var blocklistDescription = "Contains terms related to the sale of a product.";
        
        var data = new
        {
            description = blocklistDescription,
        };
        
        // create blocklist
        var createResponse = blocklistClient.CreateOrUpdateTextBlocklist(blocklistName, RequestContent.Create(data));
        
        if (createResponse.Status == 201)
        {
            Console.WriteLine("\nBlocklist {0} created.", blocklistName);
        }
        
        // Add blocklistItems
                
        string blocklistItemText1 = "price";
        string blocklistItemText2 = "offer";
        
        var blocklistItems = new TextBlocklistItem[] { new TextBlocklistItem(blocklistItemText1), new TextBlocklistItem(blocklistItemText2) };
        var addedBlocklistItems = blocklistClient.AddOrUpdateBlocklistItems(blocklistName, new AddOrUpdateTextBlocklistItemsOptions(blocklistItems));
        
        if (addedBlocklistItems != null && addedBlocklistItems.Value != null)
        {
            Console.WriteLine("\nBlocklistItems added:");
            foreach (var addedBlocklistItem in addedBlocklistItems.Value.BlocklistItems)
            {
                Console.WriteLine("BlocklistItemId: {0}, Text: {1}, Description: {2}", addedBlocklistItem.BlocklistItemId, addedBlocklistItem.Text, addedBlocklistItem.Description);
            }
        }
        
        // Analyze text
        ContentSafetyClient client = new ContentSafetyClient(new Uri(endpoint), new AzureKeyCredential(key));
                
        // After you edit your blocklist, it usually takes effect in 5 minutes, please wait some time before analyzing with blocklist after editing.
        var request = new AnalyzeTextOptions("You can order a copy now for the low price of $19.99.");
        request.BlocklistNames.Add(blocklistName);
        request.HaltOnBlocklistHit  = true;
        
        Response<AnalyzeTextResult> response;
        try
        {
            response = client.AnalyzeText(request);
        }
        catch (RequestFailedException ex)
        {
            Console.WriteLine("Analyze text failed.\nStatus code: {0}, Error code: {1}, Error message: {2}", ex.Status, ex.ErrorCode, ex.Message);
            throw;
        }
        
        if (response.Value.BlocklistsMatch != null)
        {
            Console.WriteLine("\nBlocklist match result:");
            foreach (var matchResult in response.Value.BlocklistsMatch)
            {
                Console.WriteLine("BlocklistName: {0}, BlocklistItemId: {1}, BlocklistText: {2}, ", matchResult.BlocklistName, matchResult.BlocklistItemId, matchResult.BlocklistItemText);
            }
        }
    }
    static void Main()
    {
        UseBlocklist();
    }
}

必要に応じて、ブロックリストの名前と項目を実際のものに置き換えます。

IDE ウィンドウの上部にある [デバッグ] メニューから [デバッグの開始] を選んで (または F5 キーを押して)、アプリケーションをビルドして実行します。

リファレンス ドキュメント | ライブラリのソース コード | パッケージ (PyPI) | サンプル |

前提条件

  • Azure サブスクリプション - 無料アカウントを作成します
  • Azure サブスクリプションを入手したら、Azure portal で Content Safety リソースを作成し、キーとエンドポイントを取得します。 リソースの一意の名前を入力し、サブスクリプションを選択して、リソース グループ、サポートされているリージョン (「利用可能なリージョン」を参照)、サポートされている価格レベルを選択します。 [作成] を選択します。
    • リソースのデプロイには数分かかります。 完了したら、[リソースに移動] を選びます。 左ペインの [リソース管理] で、[サブスクリプション キーとエンドポイント] を選びます。 エンドポイントといずれかのキーが、API の呼び出しに使われます。
  • Python 3.x
    • Python のインストールには、pip が含まれている必要があります。 pip がインストールされているかどうかを確認するには、コマンド ラインで pip --version を実行します。 最新バージョンの Python をインストールして pip を入手してください。

環境変数を作成する

この例では、アプリケーションを実行しているローカル コンピューター上の環境変数に資格情報を書き込みます。

キーとエンドポイントの環境変数を設定するには、コンソール ウィンドウを開き、オペレーティング システムと開発環境の指示に従います。

  • CONTENT_SAFETY_KEY 環境変数を設定するには、YOUR_CONTENT_SAFETY_KEY をリソースのキーの 1 つに置き換えます。
  • CONTENT_SAFETY_ENDPOINT 環境変数を設定するには、YOUR_CONTENT_SAFETY_ENDPOINT をリソースのエンドポイントに置き換えます。

重要

API キーは慎重に使用してください。 API キーは、コード内に直接含めないようにし、絶対に公開しないでください。 API キーを使う場合は、Azure Key Vault に格納してセキュリティで保護してください。 アプリで API キーを安全に使用する方法の詳細については、Azure Key Vault を使用した API キーに関する記事を参照してください。

AI サービスのセキュリティの詳細については、「Azure AI サービスに対する要求の認証」を参照してください。

setx CONTENT_SAFETY_KEY 'YOUR_CONTENT_SAFETY_KEY'
setx CONTENT_SAFETY_ENDPOINT 'YOUR_CONTENT_SAFETY_ENDPOINT'

環境変数を追加した後、実行中のプログラムのうち、環境変数を読み取るプログラム (コンソール ウィンドウを含む) の再起動が必要となる場合があります。

ブロックリストを作成して使用する

このセクションのコードを使うと、新しいブロックリストを作成し、そこに項目を追加してから、ブロックリストと照合してテキスト文字列を分析することができます。

  1. コマンド プロンプトを開き、プロジェクト フォルダーに移動し、quickstart.py という名前の新しいファイルを作成します。

  2. このコマンドを実行して、Azure AI Content Safety ライブラリをインストールします。

    pip install azure-ai-contentsafety
    
  3. 次のコードを quickstart.py にコピーします。

    import os
    from azure.ai.contentsafety import BlocklistClient
    from azure.ai.contentsafety import ContentSafetyClient
    from azure.core.credentials import AzureKeyCredential
    from azure.core.exceptions import HttpResponseError
    from azure.ai.contentsafety.models import (
        TextBlocklist, AddOrUpdateTextBlocklistItemsOptions, TextBlocklistItem, AnalyzeTextOptions
    )
    from azure.core.exceptions import HttpResponseError
    
    key = os.environ["CONTENT_SAFETY_KEY"]
    endpoint = os.environ["CONTENT_SAFETY_ENDPOINT"]
    
    # Create a Blocklist client
    client = BlocklistClient(endpoint, AzureKeyCredential(key))
    
    blocklist_name = "<your-blocklist-name>"
    blocklist_description = "<description>"
    
    try:
        blocklist = client.create_or_update_text_blocklist(
            blocklist_name=blocklist_name,
            options=TextBlocklist(blocklist_name=blocklist_name, description=blocklist_description),
        )
        if blocklist:
            print("\nBlocklist created or updated: ")
            print(f"Name: {blocklist.blocklist_name}, Description: {blocklist.description}")
    except HttpResponseError as e:
        print("\nCreate or update text blocklist failed: ")
        if e.error:
            print(f"Error code: {e.error.code}")
            print(f"Error message: {e.error.message}")
            raise
        print(e)
        raise
    
    
    # add items
    blocklist_item_text_1 = "<block_item_text_1>"
    blocklist_item_text_2 = "<block_item_text_2>"
    
    blocklist_items = [TextBlocklistItem(text=blocklist_item_text_1), TextBlocklistItem(text=blocklist_item_text_2)]
    try:
        result = client.add_or_update_blocklist_items(
            blocklist_name=blocklist_name, options=AddOrUpdateTextBlocklistItemsOptions(blocklist_items=blocklist_items))
        for blocklist_item in result.blocklist_items:
            print(
                f"BlocklistItemId: {blocklist_item.blocklist_item_id}, Text: {blocklist_item.text}, Description: {blocklist_item.description}"
            )
    except HttpResponseError as e:
        print("\nAdd blocklistItems failed: ")
        if e.error:
            print(f"Error code: {e.error.code}")
            print(f"Error message: {e.error.message}")
            raise
        print(e)
        raise
    
    # analyze
    
    # Create a Content Safety client
    client = ContentSafetyClient(endpoint, AzureKeyCredential(key))
    
    input_text = "<sample input text>"
    
    try:
        # After you edit your blocklist, it usually takes effect in 5 minutes, please wait some time before analyzing
        # with blocklist after editing.
        analysis_result = client.analyze_text(
            AnalyzeTextOptions(text=input_text, blocklist_names=[blocklist_name], halt_on_blocklist_hit=False)
        )
        if analysis_result and analysis_result.blocklists_match:
            print("\nBlocklist match results: ")
            for match_result in analysis_result.blocklists_match:
                print(
                    f"BlocklistName: {match_result.blocklist_name}, BlocklistItemId: {match_result.blocklist_item_id}, "
                    f"BlocklistItemText: {match_result.blocklist_item_text}"
                )
    except HttpResponseError as e:
        print("\nAnalyze text failed: ")
        if e.error:
            print(f"Error code: {e.error.code}")
            print(f"Error message: {e.error.message}")
            raise
        print(e)
        raise
    
  4. 以下のプレースホルダーを実際の値に置き換えます。

    • <your-blocklist-name>: ブロックリストの一意の名前。
    • <description>: ブロックリストの説明。
    • <block_item_text_1>: ブロックリストに追加する最初の項目。
    • <block_item_text_2>: ブロックリストに追加する 2 番目の項目。
    • <sample input text>: ブロックリストと照合して分析するテキスト。
  5. そして、クイック スタート ファイルで python コマンドを使用して、アプリケーションを実行します。

    python quickstart.py
    

リソースをクリーンアップする

Azure AI サービス サブスクリプションをクリーンアップして削除したい場合は、リソースまたはリソース グループを削除することができます。 リソース グループを削除すると、それに関連付けられている他のリソースも削除されます。

次のステップ

ブロックリスト API の使用方法についてより詳細なガイダンスが必要な場合は、ブロックリストの攻略ガイドに従ってください。