你当前正在访问 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 密钥,请将其安全地存储在某个其他位置,例如 Azure Key Vault 中。 请不要直接在代码中包含 API 密钥,并且切勿公开发布该密钥。

有关 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。