你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用阻止列表

注意

本指南中的示例数据可能包含冒犯性内容。 建议用户自行决定。

默认的 AI 分类器足以满足大多数内容审核需求。 但不妨筛选特定于你的用例的项目。 允许将自定义术语添加到 AI 分类器中的阻止列表。 可以使用阻止列表来筛选想要在内容中标记的特定术语或短语。

先决条件

  • Azure 订阅 - 免费创建订阅
  • 拥有 Azure 订阅后,请在 Azure 门户中创建 Content Safety 资源 ,以获取密钥和终结点。 输入资源的唯一名称,选择订阅,并选择资源组、支持的区域(请参阅上市区域)和支持的定价层。 然后选择“创建”。
    • 部署资源需要几分钟时间。 完成后,选择“转到资源”。 在左侧窗格中的“资源管理”下,选择“订阅密钥和终结点”。 终结点和任一密钥都用于调用 API。
  • 已安装以下项之一:
    • REST API 调用的 cURL
    • 已安装 Python 3.x
      • 你的 Python 安装应包含 pip。 可以通过在命令行上运行 pip --version 来检查是否安装了 pip。 通过安装最新版本的 Python 获取 pip。
      • 如果你使用的是 Python,则需要为 Python 安装 Azure AI Content Safety 客户端库。 在项目目录中运行 pip install azure-ai-contentsafety 命令。
    • 已安装 .NET 运行时
      • 已安装 .NET Core SDK。
      • 如果你使用的是 .NET,则需要为 .NET 安装 Azure AI Content Safety 客户端库。 在项目目录中运行 dotnet add package Azure.AI.ContentSafety --prerelease 命令。

创建环境变量

在此示例中,你将凭据写入运行应用程序的本地计算机上的环境变量。

若要为密钥和终结点设置环境变量,请打开控制台窗口,并按照操作系统和开发环境的说明进行操作。

  • 若要设置 CONTENT_SAFETY_KEY 环境变量,请将 YOUR_CONTENT_SAFETY_KEY 替换为资源的其中一个密钥。
  • 若要设置 CONTENT_SAFETY_ENDPOINT 环境变量,请将 YOUR_CONTENT_SAFETY_ENDPOINT 替换为资源的终结点。

重要

请谨慎使用 API 密钥。 请不要直接在代码中包含 API 密钥,并且切勿公开发布该密钥。 如果使用 API 密钥,请将其安全地存储在 Azure Key Vault 中。 若要详细了解如何在应用中安全地使用 API 密钥,请参阅 API 密钥与 Azure Key Vault

有关 Azure AI 服务安全性的详细信息,请参阅对 Azure AI 服务的请求进行身份验证

setx CONTENT_SAFETY_KEY 'YOUR_CONTENT_SAFETY_KEY'
setx CONTENT_SAFETY_ENDPOINT 'YOUR_CONTENT_SAFETY_ENDPOINT'

添加环境变量后,可能需要重启任何正在运行的、将读取环境变量的程序(包括控制台窗口)。

使用阻止列表分析文本

可以创建阻止列表以便于 Text API 一起使用。 以下步骤可帮助你入门。

创建或修改阻止列表

将下面的 cURL 命令复制到文本编辑器中,并进行以下更改:

  1. <endpoint> 替换为你的终结点 URL。
  2. <enter_your_key_here> 替换为你的密钥。
  3. <your_list_name>(在 URL 中)替换为列表的自定义名称。 此外,还要将 REST URL 的最后一个术语替换为同一名称。 允许的字符:0-9,a-Z,A-Z,- . _ ~
  4. (可选)将 "description" 字段的值替换为自定义描述。
curl --location --request PATCH '<endpoint>/contentsafety/text/blocklists/<your_list_name>?api-version=2024-09-01' \
--header 'Ocp-Apim-Subscription-Key: <enter_your_key_here>' \
--header 'Content-Type: application/json' \
--data-raw '{
    "description": "This is a violence list"
}'

响应代码应为 201(创建新列表)或 200(更新现有列表)。

向列表添加 blocklistItem

注意

所有列表中的术语总数最多不超过 10,000 个。 在一个请求中最多可以添加 100 个 blocklistItem。

将下面的 cURL 命令复制到文本编辑器中,并进行以下更改:

  1. <endpoint> 替换为你的终结点 URL。
  2. <enter_your_key_here> 替换为你的密钥。
  3. <your_list_name>(在 URL 中)替换为你在列表创建步骤中使用的名称。
  4. (可选)将 "description" 字段的值替换为自定义描述。
  5. "text" 字段的值替换为要添加到阻止列表中的项。 blocklistItem 的最大长度为 128 个字符。
curl --location --request POST '<endpoint>/contentsafety/text/blocklists/<your_list_name>:addOrUpdateBlocklistItems?api-version=2024-09-01' \
--header 'Ocp-Apim-Subscription-Key: <enter_your_key_here>' \
--header 'Content-Type: application/json' \
--data-raw '{"blocklistItems": [{
    "description": "string",
    "text": "bleed"
}]}'

提示

可以在一个 API 调用中添加多个 blocklistItem。 使请求主体成为数据组的 JSON 数组:

{
   "blocklistItems": [
       {
           "description": "string",
           "text": "bleed"
       },
       {
           "description": "string",
           "text": "blood"
       }
   ]
}

响应代码应为 200

{
"blocklistItems:"[
  {
  "blocklistItemId": "string",
  "description": "string",
  "text": "bleed"
  
   }
 ]
}

注意

添加或编辑 BlockItem 后,在其对文本分析生效之前会有一些延迟,通常不会超过五分钟。

使用阻止列表分析文本

将下面的 cURL 命令复制到文本编辑器中,并进行以下更改:

  1. <endpoint> 替换为你的终结点 URL。
  2. <enter_your_key_here> 替换为你的密钥。
  3. <your_list_name> 替换为列表创建步骤中使用的名称。 "blocklistNames" 字段可以包含多个列表 ID 的数组。
  4. (可选)更改 "breakByBlocklists" 的值。 true 表明一旦匹配了阻止列表,将立即返回分析结果,不含模型输出。 false 将导致模型继续在默认类别中进行分析。
  5. (可选)将 "text" 字段的值更改为要分析的任何文本。
curl --location --request POST '<endpoint>/contentsafety/text:analyze?api-version=2024-09-01&' \
--header 'Ocp-Apim-Subscription-Key: <enter_your_key_here>' \
--header 'Content-Type: application/json' \
--data-raw '{
  "text": "I want to beat you till you bleed",
  "categories": [
    "Hate",
    "Sexual",
    "SelfHarm",
    "Violence"
  ],
  "blocklistNames":["<your_list_name>"],
  "haltOnBlocklistHit": false,
  "outputType": "FourSeverityLevels"
}'

JSON 响应将包含一个 "blocklistMatchResults",这表示与你的阻止列表的任何匹配项。 它报告在文本字符串中找到匹配项的位置。

{
  "blocklistsMatch": [
    {
      "blocklistName": "string",
      "blocklistItemId": "string",
      "blocklistItemText": "bleed"
    }
  ],
  "categoriesAnalysis": [
    {
      "category": "Hate",
      "severity": 0
    }
  ]
}

其他阻止列表操作

本节包含可帮助你管理和使用阻止列表功能的更多操作。

列出列表中的所有 blocklistItem

将下面的 cURL 命令复制到文本编辑器中,并进行以下更改:

  1. <endpoint> 替换为你的终结点 URL。
  2. <enter_your_key_here> 替换为你的密钥。
  3. <your_list_name>(在请求 URL 中)替换为你在列表创建步骤中使用的名称。
curl --location --request GET '<endpoint>/contentsafety/text/blocklists/<your_list_name>/blocklistItems?api-version=2024-09-01' \
--header 'Ocp-Apim-Subscription-Key: <enter_your_key_here>' \
--header 'Content-Type: application/json'

状态代码应为 200,响应正文应如下所示:

{
 "values": [
  {
   "blocklistItemId": "string",
   "description": "string",
   "text": "bleed",
  }
 ]
}

列出所有阻止列表

将下面的 cURL 命令复制到文本编辑器中,并进行以下更改:

  1. <endpoint> 替换为你的终结点 URL。
  2. <enter_your_key_here> 替换为你的密钥。
curl --location --request GET '<endpoint>/contentsafety/text/blocklists?api-version=2024-09-01' \
--header 'Ocp-Apim-Subscription-Key: <enter_your_key_here>' \
--header 'Content-Type: application/json'

状态代码应为 200。 JSON 响应如下所示:

"value": [
  {
    "blocklistName": "string",
    "description": "string"
  }
]

按 blocklistName 获取阻止列表

将下面的 cURL 命令复制到文本编辑器中,并进行以下更改:

  1. <endpoint> 替换为你的终结点 URL。
  2. <enter_your_key_here> 替换为你的密钥。
  3. <your_list_name>(在请求 URL 中)替换为你在列表创建步骤中使用的名称。
cURL --location '<endpoint>contentsafety/text/blocklists/<your_list_name>?api-version=2024-09-01' \
--header 'Ocp-Apim-Subscription-Key: <enter_your_key_here>' \
--data ''

状态代码应为 200。 JSON 响应如下所示:

{
  "blocklistName": "string",
  "description": "string"
}

按 blocklistName 和 blocklistItemId 获取 blocklistItem

将下面的 cURL 命令复制到文本编辑器中,并进行以下更改:

  1. <endpoint> 替换为你的终结点 URL。
  2. <enter_your_key_here> 替换为你的密钥。
  3. <your_list_name>(在请求 URL 中)替换为你在列表创建步骤中使用的名称。
  4. <your_item_id> 替换为 blocklistItem 的 ID 值。 这是来自添加 blocklistItem 或获取所有 blocklistItem API 调用的 "blocklistItemId" 字段的值。
cURL --location '<endpoint>contentsafety/text/blocklists/<your_list_name>/blocklistItems/<your_item_id>?api-version=2024-09-01' \
--header 'Ocp-Apim-Subscription-Key: <enter_your_key_here>' \
--data ''

状态代码应为 200。 JSON 响应如下所示:

{
  "blocklistItemId": "string",
  "description": "string",
  "text": "string"
}
  1. <your_list_name> 替换为列表创建步骤中使用的名称。
  2. <your_block_item_id> 替换为要获取的项的 ID。
  3. 运行该脚本。

从阻止列表中移除 blocklistItem。

注意

在你删除某一个项后,关于这个项的文本分析不会立即生效,而是有一定的延迟,通常不会超过五分钟。

将下面的 cURL 命令复制到文本编辑器中,并进行以下更改:

  1. <endpoint> 替换为你的终结点 URL。
  2. <enter_your_key_here> 替换为你的密钥。
  3. <your_list_name>(在请求 URL 中)替换为你在列表创建步骤中使用的名称。
  4. <item_id> 替换为 blocklistItem 的 ID 值。 这是来自添加 blocklistItem 或获取所有 blocklistItem API 调用的 "blocklistItemId" 字段的值。
curl --location --request POST '<endpoint>/contentsafety/text/blocklists/<your_list_name>:removeBlocklistItems?api-version=2024-09-01' \
--header 'Ocp-Apim-Subscription-Key: <enter_your_key_here>' \
--header 'Content-Type: application/json'
--data-raw '{"blocklistItemIds":[
    "<item_id>"
]}'

提示

可以在一个 API 调用中删除多个 blocklistItem。 使请求主体成为 blocklistItemId 值的数组。

响应代码应为 204

删除列表及其所有内容

注意

在你删除某一个列表后,关于这个列表的文本分析不会立即生效,而是有一定的延迟,通常不会超过五分钟。

将下面的 cURL 命令复制到文本编辑器中,并进行以下更改:

  1. <endpoint> 替换为你的终结点 URL。
  2. <enter_your_key_here> 替换为你的密钥。
  3. <your_list_name>(在请求 URL 中)替换为你在列表创建步骤中使用的名称。
curl --location --request DELETE '<endpoint>/contentsafety/text/blocklists/<your_list_name>?api-version=2024-09-01' \
--header 'Ocp-Apim-Subscription-Key: <enter_your_key_here>' \
--header 'Content-Type: application/json' \

响应代码应为 204

后续步骤

请参阅 API 参考文档,以详细了解有关本指南中使用的 API。