你当前正在访问 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 命令复制到文本编辑器中,并进行以下更改:
- 将 {subscriptionId} 替换为订阅 ID。
- 将 {resourceGroupName} 替换为资源组名称。
- 将 {accountName} 替换为资源名称。
- 将 {raiBlocklistName}(在 URL 中)替换为列表的自定义名称。 允许的字符:
0-9, A-Z, a-z, - . _ ~
。 - 将 {token} 替换为上面“获取令牌”步骤中获得的令牌。
- (可选)将“description”字段的值替换为自定义说明。
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 命令:
- 将 {subscriptionId} 替换为订阅 ID。
- 将 {resourceGroupName} 替换为资源组名称。
- 将 {accountName} 替换为资源名称。
- 将 {raiPolicyName} 替换为内容筛选器的名称
- 将 {token} 替换为上面“获取令牌”步骤中获得的令牌。
- 如果希望阻止列表应用于用户提示而不是 AI 模型完成,可以选择性地将
"completionBlocklists"
标题更改为"promptBlocklists"
。 - 将正文中的
"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": [ ]
}
}'
将 blockItem 添加到列表
注意
一个列表中最多允许 10,000 个术语。
将下面的 cURL 命令复制到文本编辑器中,并进行以下更改:
- 将 {subscriptionId} 替换为订阅 ID。
- 将 {resourceGroupName} 替换为资源组名称。
- 将 {accountName} 替换为资源名称。
- 将 {raiBlocklistName}(在 URL 中)替换为列表的自定义名称。 允许的字符:
0-9, A-Z, a-z, - . _ ~
。 - 将 {raiBlocklistItemName} 替换为列表项的自定义名称。
- 将 {token} 替换为上面“获取令牌”步骤中获得的令牌。
- 将
"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-04-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 终结点的说明,请访问快速入门。
在下面的示例中,具有阻止列表的 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 负责任 AI 实践的更多信息:适用于 Azure OpenAI 模型的负责任 AI 的做法概述。
阅读有关 Azure OpenAI 服务的内容筛选类别和严重性级别的更多信息。
从:红队测试大型语言模型 (LLM) 简介文章中了解更多关于红队的信息。