Compartilhar via


Usar uma lista de bloqueios com o OpenAI do Azure

Os filtros de conteúdo configuráveis são suficientes para a maioria das necessidades de moderação de conteúdo. No entanto, você talvez precise filtrar termos específicos para seu caso de uso.

Pré-requisitos

  • Uma assinatura do Azure. Crie um gratuitamente.
  • Depois de ter sua assinatura do Azure, crie um recurso do OpenAI do Azure no portal do Azure para obter seu token, chave e ponto de extremidade. Insira um nome exclusivo para o recurso, selecione a assinatura inserida no formulário do aplicativo, selecione um grupo de recursos, uma região e o tipo de preço com suporte. Em seguida, selecione Criar.
    • O recurso demora alguns minutos para implantar. Após a conclusão, selecione ir para o recurso. No painel à esquerda, em Gerenciamento de Recursos, selecione Chave de Assinatura e Ponto de Extremidade. O ponto de extremidade e uma das chaves são usados para chamar as APIs.
  • CLI do Azure instalada
  • cURL instalado

Use listas de bloqueio

Você pode criar listas de bloqueio com a API OpenAI do Azure. As etapas a seguir ajudam a começar.

Obter seu token

Primeiro, você precisa obter um token para acessar as APIs para criação, edição e exclusão de listas de bloqueio. Você também pode obter esse token usando o seguinte comando da CLI do Azure:

az account get-access-token 

Criar ou modificar uma lista de bloqueados

Copie o comando cURL abaixo para um editor de texto e faça as seguintes alterações:

  1. Substitua {subscriptionId} pela ID de sua assinatura.
  2. Substitua {resourceGroupName} pelo nome de seu grupo de recursos.
  3. Substitua {accountName} pelo nome de seu recurso.
  4. Substitua {raiBlocklistName} (na URL) por um nome personalizado para sua lista. Caracteres permitidos: 0-9, A-Z, a-z, - . _ ~.
  5. Substitua {token} pelo token que você obteve na etapa "Obter seu token" acima.
  6. 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 (criou uma nova lista) ou 200 (atualizou uma lista existente).

Aplicar uma lista de bloqueio a um filtro de conteúdo

Se ainda não tiver criado um filtro de conteúdo, você poderá fazê-lo no Azure AI Foundry. Confira Filtragem de conteúdo.

Para aplicar uma lista de bloqueio de conclusão a um filtro de conteúdo, use o seguinte comando cURL:

  1. Substitua {subscriptionId} pela ID de sua assinatura.
  2. Substitua {resourceGroupName} pelo nome de seu grupo de recursos.
  3. Substitua {accountName} pelo nome de seu recurso.
  4. Substitua {raiPolicyName} pelo nome do seu Filtro de Conteúdo
  5. Substitua {token} pelo token que você obteve na etapa "Obter seu token" acima.
  6. Opcionalmente, altere o título de "completionBlocklists" para "promptBlocklists" se você quiser que a lista de bloqueios se aplique aos prompts de usuário e não aos preenchimentos do modelo de IA.
  7. Substitua "raiBlocklistName" no corpo por um nome personalizado para a 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

Observação

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:

  1. Substitua {subscriptionId} pela ID de sua assinatura.
  2. Substitua {resourceGroupName} pelo nome de seu grupo de recursos.
  3. Substitua {accountName} pelo nome de seu recurso.
  4. Substitua {raiBlocklistName} (na URL) por um nome personalizado para sua lista. Caracteres permitidos: 0-9, A-Z, a-z, - . _ ~.
  5. Substitua {raiBlocklistName} por um nome personalizado para seu item de lista.
  6. Substitua {token} pelo token que você obteve na etapa "Obter seu token" acima.
  7. Substitua o valor do campo "blocking pattern" pelo item que você gostaria de adicionar à sua lista de bloqueados. 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  
    }  
}' 

Observação

Pode levar cerca de 5 minutos para que um novo termo seja adicionado à lista de bloqueio. 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 bloqueados

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 OpenAI do Azure, acesse o Início Rápido.

No exemplo abaixo, uma implantação de GPT-35-Turbo com uma lista de bloqueio está bloqueando o prompt. A resposta retorna um erro 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" 
                } 
            } 
        } 
    } 
} 

Se a própria conclusão estiver 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óximas etapas