Usar uma lista de bloqueio com o Azure OpenAI
Os filtros de conteúdo configuráveis são suficientes para a maioria das necessidades de moderação de conteúdo. No entanto, talvez seja necessário filtrar termos específicos para seu caso de uso.
Pré-requisitos
- Uma subscrição do Azure. Crie um gratuitamente.
- Depois de ter sua assinatura do Azure, crie um recurso do Azure OpenAI no portal do Azure para obter seu token, chave e ponto de extremidade. Introduza um nome exclusivo para o seu recurso, selecione a subscrição que introduziu no formulário de candidatura, selecione um grupo de recursos, uma região suportada e um escalão de preços suportado. Depois, selecione Criar.
- O recurso leva alguns minutos para ser implantado. Depois de terminar, selecione ir para o recurso. No painel esquerdo, em Gerenciamento de Recursos, selecione Chave de Assinatura e Ponto de Extremidade. O ponto de extremidade e qualquer uma das chaves são usados para chamar APIs.
- CLI do Azure instalada
- cURL instalado
Usar listas de bloqueio
Você pode criar listas de bloqueio com a API do Azure OpenAI. Os passos seguintes ajudam-no a começar.
Obtenha o seu token
Primeiro, você precisa obter um token para acessar as APIs para criar, editar e excluir listas de bloqueio. Você pode obter esse token usando o seguinte comando da CLI do Azure:
az account get-access-token
Criar ou modificar uma lista de bloqueio
Copie o comando cURL abaixo para um editor de texto e faça as seguintes alterações:
- Substitua {subscriptionId} pelo seu ID de assinatura.
- Substitua {resourceGroupName} pelo nome do grupo de recursos.
- Substitua {accountName} pelo nome do recurso.
- Substitua {raiBlocklistName} (no URL) por um nome personalizado para sua lista. Caracteres permitidos:
0-9, A-Z, a-z, - . _ ~
. - Substitua {token} pelo token obtido na etapa "Obter seu token" acima.
- Opcionalmente, substitua o valor do campo "descrição" por uma descrição personalizada.
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"
}
}'
O código de resposta deve ser 201
(criada uma nova lista) ou 200
(atualizada uma lista existente).
Aplicar uma lista de bloqueio a um filtro de conteúdo
Se ainda não criou um filtro de conteúdo, pode fazê-lo no Azure AI Foundry. Consulte Filtragem de conteúdo.
Para aplicar uma lista de bloqueio de conclusão a um filtro de conteúdo, use o seguinte comando cURL:
- Substitua {subscriptionId} pelo seu subID.
- Substitua {resourceGroupName} pelo nome do grupo de recursos.
- Substitua {accountName} pelo nome do recurso.
- Substitua {raiPolicyName} pelo nome do seu Filtro de Conteúdo
- Substitua {token} pelo token obtido na etapa "Obter seu token" acima.
- Opcionalmente, altere o
"completionBlocklists"
título para"promptBlocklists"
se quiser que a lista de bloqueio se aplique a prompts do usuário em vez de conclusão de modelo de IA. - Substitua
"raiBlocklistName"
no corpo por um nome personalizado para sua lista. Caracteres permitidos: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": [ ]
}
}'
Adicionar blockItems à lista
Nota
Há um limite máximo de 10.000 termos permitidos em uma lista.
Copie o comando cURL abaixo para um editor de texto e faça as seguintes alterações:
- Substitua {subscriptionId} pelo seu subID.
- Substitua {resourceGroupName} pelo nome do grupo de recursos.
- Substitua {accountName} pelo nome do recurso.
- Substitua {raiBlocklistName} (no URL) por um nome personalizado para sua lista. Caracteres permitidos:
0-9, A-Z, a-z, - . _ ~
. - Substitua {raiBlocklistItemName} por um nome personalizado para o item da lista.
- Substitua {token} pelo token obtido na etapa "Obter seu token" acima.
- Substitua o
"blocking pattern"
valor do campo pelo item que você deseja adicionar à sua lista de bloqueio. O comprimento máximo de um blockItem é de 1000 caracteres. Especifique também se o padrão é regex ou correspondência exata.
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
}
}'
Nota
Pode levar cerca de 5 minutos para que um novo termo seja adicionado à lista de bloqueio. Por favor, teste após 5 minutos.
O código de resposta deve ser 200
.
{
"name": "raiBlocklistItemName",
"id": "/subscriptions/subscriptionId/resourceGroups/resourceGroupName/providers/Microsoft.CognitiveServices/accounts/accountName/raiBlocklists/raiBlocklistName/raiBlocklistItems/raiBlocklistItemName",
"properties": {
"pattern": "blocking pattern",
"isRegex": false
}
}
Analisar texto com uma lista de bloqueio
Agora você pode testar sua implantação que tem a lista de bloqueio. Para obter instruções sobre como chamar os pontos de extremidade do Azure OpenAI, visite o Guia de início rápido.
No exemplo abaixo, uma implantação GPT-35-Turbo com uma lista de bloqueio está bloqueando o prompt. A resposta retorna um 400
erro.
{
"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"
}
}
}
}
}
Se a conclusão em si for bloqueada, a resposta retornará 200
, pois a conclusão só será interrompida quando o conteúdo da lista de bloqueio for correspondido. As anotações mostram que uma lista de bloqueio foi correspondida.
{
"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
}
}
Próximos passos
Saiba mais sobre as práticas de IA responsável para o Azure OpenAI: Visão geral das práticas de IA responsável para modelos OpenAI do Azure.
Leia mais sobre categorias de filtragem de conteúdo e níveis de gravidade com o Serviço Azure OpenAI.
Saiba mais sobre o red teaming no nosso artigo: Introdução aos modelos de linguagem grandes (LLMs) do red teaming.