Utiliser une liste de blocage avec Azure OpenAI
Les filtres de contenu configurables sont suffisants pour la plupart des besoins de modération du contenu. Toutefois, vous devrez peut-être filtrer des termes spécifiques à votre cas d’usage.
Prérequis
- Un abonnement Azure. Créez-en un gratuitement.
- Une fois que vous disposez de votre abonnement Azure, créez une ressource Azure OpenAI dans le portail Azure pour obtenir votre jeton, votre clé et votre point de terminaison. Entrez un nom unique pour votre ressource, sélectionnez l’abonnement que vous avez indiqué dans le formulaire d’inscription, sélectionnez un groupe de ressources, une région prise en charge et un niveau tarifaire pris en charge. Sélectionnez ensuite Créer.
- Le déploiement de la ressource prend quelques minutes. Une fois qu’il est terminé, sélectionnez Accéder à la ressource. Dans le volet gauche, sous Gestion des ressources, sélectionnez Clé et point de terminaison de l’abonnement. Le point de terminaison et l’une des clés sont utilisés pour appeler les API.
- Azure CLI installé
- Installation de cURL
Utiliser des listes de blocage
Vous pouvez créer des listes de blocage avec l’API Azure OpenAI. Les étapes suivantes vous aident à démarrer.
Obtenir votre jeton
Tout d’abord, vous devez obtenir un jeton pour accéder aux API de création, de modification et de suppression de listes de blocage. Vous pouvez obtenir ce jeton en utilisant la commande Azure CLI suivante :
az account get-access-token
Créez ou modifiez une liste de blocs
Copiez la commande cURL ci-dessous dans un éditeur de texte et apportez les modifications suivantes :
- Remplacez {subscriptionId} par votre ID d’abonnement.
- Remplacez {resourceGroupName} par le nom de votre groupe de ressources.
- Remplacez {accountName} par le nom de votre ressource.
- Remplacez {raiBlocklistName} (dans l’URL) par un nom personnalisé pour votre liste. Caractères autorisés :
0-9, A-Z, a-z, - . _ ~
. - Remplacez {token} par le jeton obtenu à l’étape « Obtenir votre jeton » ci-dessus.
- Remplacez éventuellement la valeur du champ « description » par une description personnalisée.
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"
}
}'
Le code de réponse doit être 201
(création d’une liste) ou 200
(mise à jour d’une liste existante).
Appliquer une liste de blocage à un filtre de contenu
Si vous n’avez pas encore créé de filtre de contenu, vous pouvez le faire dans Azure AI Foundry. Consultez Filtrage de contenu.
Pour appliquer une liste de blocage de complétion à un filtre de contenu, utilisez la commande cURL suivante :
- Remplacez {subscriptionId} par votre ID d’abonnement.
- Remplacez {resourceGroupName} par le nom de votre groupe de ressources.
- Remplacez {accountName} par le nom de votre ressource.
- Remplacez {raiPolicyName} par le nom de votre filtre de contenu
- Remplacez {token} par le jeton obtenu à l’étape « Obtenir votre jeton » ci-dessus.
- Modifiez éventuellement le titre
"completionBlocklists"
en"promptBlocklists"
si vous souhaitez que la liste de blocs s’applique aux invites de l’utilisateur au lieu des achèvements de modèle IA. - Remplacez
"raiBlocklistName"
dans le corps par un nom personnalisé pour votre liste. Caractères autorisés :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": [ ]
}
}'
Ajouter des blockItems à la liste
Remarque
Il existe une limite maximale de 10 000 termes autorisés dans une liste.
Copiez la commande cURL ci-dessous dans un éditeur de texte et apportez les modifications suivantes :
- Remplacez {subscriptionId} par votre ID d’abonnement.
- Remplacez {resourceGroupName} par le nom de votre groupe de ressources.
- Remplacez {accountName} par le nom de votre ressource.
- Remplacez {raiBlocklistName} (dans l’URL) par un nom personnalisé pour votre liste. Caractères autorisés :
0-9, A-Z, a-z, - . _ ~
. - Remplacez {raiBlocklistItemName} par un nom personnalisé pour votre élément de liste.
- Remplacez {token} par le jeton obtenu à l’étape « Obtenir votre jeton » ci-dessus.
- Remplacez la valeur du champ
"blocking pattern"
par l’élément que vous souhaitez ajouter à votre liste de blocs. La longueur maximale d’un blockItem est de 1 000 caractères. Spécifiez également s’il s’agit d’un modèle regex ou d’une recherche exacte.
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
}
}'
Remarque
L’ajout d’un nouveau terme à la liste de blocage prend environ 5 minutes. Effectuez un test après 5 minutes.
Le code de réponse doit être 200
.
{
"name": "raiBlocklistItemName",
"id": "/subscriptions/subscriptionId/resourceGroups/resourceGroupName/providers/Microsoft.CognitiveServices/accounts/accountName/raiBlocklists/raiBlocklistName/raiBlocklistItems/raiBlocklistItemName",
"properties": {
"pattern": "blocking pattern",
"isRegex": false
}
}
Analysez le texte avec une liste de blocs
Vous pouvez désormais tester votre déploiement associé à la liste de blocage. Pour obtenir des instructions sur l’appel des points de terminaison Azure OpenAI, consultez le guide de démarrage rapide.
Dans l’exemple ci-dessous, un déploiement de GPT-35-Turbo associé à une liste de blocage bloque l’invite. La réponse retourne une erreur 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"
}
}
}
}
}
Si la complétion elle-même est bloquée, la réponse retourne 200
, car la complétion est désactivée uniquement quand il existe une correspondance avec le contenu de la liste de blocage. Les annotations montrent qu’il existe une correspondance avec une liste de blocage.
{
"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
}
}
Étapes suivantes
En savoir plus sur les pratiques d’IA responsable pour Azure OpenAI : Vue d’ensemble des pratiques d’IA responsable pour les modèles Azure OpenAI.
En savoir plus sur les catégories de filtrage de contenu et les niveaux de gravité avec Azure OpenAI Service.
Pour en savoir plus sur le « red teaming », consultez notre article Introduction aux modèles LLM (Large Language Models) Red Teaming.