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

在 Azure OpenAI 中使用阻止列表

可配置的内容筛选器足以满足大多数内容审核需求。 但是,可能需要筛选特定于用例的术语。

先决条件

  • Azure 订阅。 免费创建一个
  • 拥有 Azure 订阅后,请在 Microsoft Azure 门户中创建 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. (可选)将“description”字段的值替换为自定义说明。
curl --location --request PUT 'https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CognitiveServices/accounts/{accountName}/raiBlocklists/{raiBlocklistName}?api-version=2024-03-01-preview' \ 
--header 'Authorization: Bearer {token}' \ 
--header 'Content-Type: application/json' \ 
--data-raw '{ 
    "properties": { 
        "description": "This is a prompt blocklist"  
    } 
}' 

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

将阻止列表应用于内容筛选器

如果尚未创建内容筛选器,则可以在 Studio 中左侧的“内容筛选器”选项卡中执行此操作。 若要使用阻止列表,请确保此内容筛选器应用于 Azure OpenAI 部署。 可以在左侧的“部署”选项卡中执行此操作。

若要将补全阻止列表应用到内容筛选器,请使用以下 cURL 命令:

  1. 将 {subscriptionId} 替换为订阅 ID。
  2. 将 {resourceGroupName} 替换为资源组名称。
  3. 将 {accountName} 替换为资源名称。
  4. 将 {raiPolicyName} 替换为内容筛选器的名称
  5. 将 {token} 替换为上面“获取令牌”步骤中获得的令牌。
  6. 将正文中的“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-03-01-preview' \ 
--header 'Authorization: Bearer {token}' \ 
--header 'Content-Type: application/json' \ 
--data-raw '{ 
    "properties": { 
        "basePolicyName": "Microsoft.Default", 
        "completionBlocklists": [{ 
            "blocklistName": "raiBlocklistName", 
            "blocking": true 
        }], 
        "contentFilters": [ ] 
    } 
}' 

将 blockItem 添加到列表

注意

一个列表中最多允许 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" 字段的值替换为要添加到阻止列表中的项。 blockItem 的最大长度为 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-03-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 Studio 中。 如果在提示或补全中阻止了内容,应会看到一条错误消息,指出触发了内容筛选系统。

有关调用 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 
    } 
} 

在 Azure OpenAI Studio 中使用阻止列表

还可以在 Azure OpenAI Studio 中创建自定义阻止列表作为内容筛选配置的一部分(公共预览版)。 有关如何创建自定义内容筛选器的说明,请参阅此处。 以下步骤演示如何通过 Azure OpenAI Studio 创建自定义阻止列表作为内容筛选器的一部分。

  1. 选择“内容筛选器”选项卡旁边的“阻止列表”选项卡。screenshot of blocklist selection.
  2. 选择“创建阻止列表”Screenshot of blocklist create selection.
  3. 为阻止列表创建名称,添加说明并选择“创建”。 Screenshot of blocklist naming.
  4. 创建自定义阻止列表后,选择该列表,然后选择“添加术语”。 Screenshot of custom blocklist add term.
  5. 添加应筛选的术语,然后选择“创建”。 还可以创建正则表达式。 Screenshot of custom blocklist add item.
  6. 可以在阻止列表中编辑和删除每个术语。 Screenshot of custom blocklist edit.
  7. 阻止列表准备就绪后,导航到内容筛选器(预览版)部分并创建新的自定义内容筛选器配置。 这会打开包含多个 AI 内容安全组件的向导。 有关如何配置主筛选器和可选模型的详细信息,请参阅此处。 转到“添加阻止列表”(可选)。
  8. 现在,你将看到所有可用的阻止列表。 有两种类型的阻止列表:你创建的阻止列表以及 Microsoft 提供的预生成阻止列表,在本例中为 Profanity 阻止列表(英文版)
  9. 现在,可以决定要在内容筛选配置中包括哪些可用的阻止列表,还可以选择它是否应应用于并筛选提示、补全或两者。 在下面的示例中,我们将刚刚创建的 CustomBlocklist1 应用于提示和补全,仅将 Profanity 阻止列表应用于补全。 最后一步是通过单击“下一步”查看和完成内容筛选配置。 Screenshot of filtering configuration management.
  10. 始终可以返回并编辑配置。 准备就绪后,选择“创建内容筛选器”。 现在可将包含阻止列表的新配置应用于部署。 可在此处找到详细说明。

后续步骤