Partage via


Comment configurer des filtres de contenu (préversion) pour des modèles dans Azure AI services

Important

Les éléments marqués (préversion) dans cet article sont actuellement en préversion publique. Cette préversion est fournie sans contrat de niveau de service, nous la déconseillons dans des charges de travail de production. Certaines fonctionnalités peuvent être limitées ou non prises en charge. Pour plus d’informations, consultez Conditions d’Utilisation Supplémentaires relatives aux Évaluations Microsoft Azure.

Le système de filtrage de contenu intégré à Azure AI Services s’exécute en même temps que les modèles principaux. Il utilise un ensemble de modèles de classification multiclasse pour détecter quatre catégories de contenu dangereux (violence, haine, sexualité et automutilation) à quatre niveaux de gravité respectivement (sûr, faible, moyen et élevé). Il offre des classificateurs binaires facultatifs qui détectent les risques de jailbreak, un texte existant et du code provenant de référentiels publics. Pour en savoir plus sur les catégories de contenu, les niveaux de gravité et le comportement du système de filtrage de contenu, consultez l’article suivant

La configuration du filtrage du contenu par défaut est définie pour filtrer au seuil de gravité moyen pour les quatre catégories dangereuses de contenu, aussi bien pour les invites que pour les complétions. Par conséquent, le contenu détecté au niveau de gravité moyen ou élevé est filtré, tandis que le contenu détecté au niveau de gravité faible ou sûr n’est pas filtré.

Les filtres de contenu peuvent être configurés au niveau de la ressource et associés à un ou plusieurs déploiements.

Prérequis

Pour effectuer ce qui est décrit dans cet article, vous avez besoin des éléments suivants :

Créer un filtre de contenu personnalisé

Procédez comme suit pour créer un filtre de contenu personnalisé :

  1. Accédez au portail Azure AI Foundry.

  2. Sélectionnez Sûreté + sécurité.

  3. Sélectionnez l’onglet Filtres de contenu, puis Créer un filtre de contenu.

  4. Sous Informations de base, donnez un nom au filtre de contenu.

  5. Sous Connexion, sélectionnez la connexion à la ressource Azure AI Services connectée à votre projet.

  6. Sous Filtre d’entrée, configurez le filtre en fonction de vos besoins. Cette configuration est appliquée avant que la requête atteigne le modèle lui-même.

  7. Sous Filtre de sortie, configurez le filtre en fonction de vos besoins. Cette configuration est appliquée une fois le modèle exécuté et le contenu généré.

  8. Cliquez sur Suivant.

  9. Si vous le souhaitez, vous pouvez associer un déploiement donné au filtre de contenu créé. Vous pouvez modifier les modèles de déploiement associés à tout moment.

  10. Une fois le déploiement terminé, le nouveau filtre de contenu est appliqué au modèle de déploiement.

Prise en compte du filtrage de contenu dans votre code

Une fois le filtrage de contenu appliqué à votre modèle de déploiement, les requêtes peuvent être interceptées par le service en fonction des entrées et sorties. Lorsqu’un filtre de contenu est activé, un code d’erreur 400 est retourné avec la description de la règle activée.

Installez le package azure-ai-inference à l’aide de votre gestionnaire de package, par exemple pip :

pip install azure-ai-inference>=1.0.0b5

Avertissement

La ressource Azure AI Services nécessite la version azure-ai-inference>=1.0.0b5 de Python.

Vous pouvez ensuite utiliser le package pour consommer le modèle. L’exemple suivant montre comment créer un client pour consommer les complétions de conversation :

import os
from azure.ai.inference import ChatCompletionsClient
from azure.core.credentials import AzureKeyCredential

model = ChatCompletionsClient(
    endpoint="https://<resource>.services.ai.azure.com/models",
    credential=AzureKeyCredential(os.environ["AZUREAI_ENDPOINT_KEY"]),
)

Découvrez nos exemples, et lisez la documentation de référence API pour vous lancer.

L’exemple suivant montre la réponse d’une demande de saisie semi-automatique de conversation qui a déclenché la sécurité du contenu.

from azure.ai.inference.models import AssistantMessage, UserMessage, SystemMessage
from azure.core.exceptions import HttpResponseError

try:
    response = model.complete(
        messages=[
            SystemMessage(content="You are an AI assistant that helps people find information."),
            UserMessage(content="Chopping tomatoes and cutting them into cubes or wedges are great ways to practice your knife skills."),
        ]
    )

    print(response.choices[0].message.content)

except HttpResponseError as ex:
    if ex.status_code == 400:
        response = json.loads(ex.response._content.decode('utf-8'))
        if isinstance(response, dict) and "error" in response:
            print(f"Your request triggered an {response['error']['code']} error:\n\t {response['error']['message']}")
        else:
            raise ex
    else:
        raise ex

Suivre les bonnes pratiques

Nous vous recommandons de prendre vos décisions de configuration de filtrage de contenu sur la base d’une identification itérative (par exemple, des tests d’équipe rouge, des tests de contrainte et l’analyse) et d’un processus de mesure pour résoudre les dommages potentiels pertinents pour un modèle, une application et un scénario de déploiement spécifiques. Après avoir implémenté des atténuations telles que le filtrage de contenu, répétez la mesure pour tester l’efficacité.

Vous trouverez des recommandations et des meilleures pratiques pour l’IA responsable pour Azure OpenAI, qui sont ancrées dans la norme d’IA responsable de Microsoft dans Vue d’ensemble de l’IA responsable pour Azure OpenAI.

Important

Les éléments marqués (préversion) dans cet article sont actuellement en préversion publique. Cette préversion est fournie sans contrat de niveau de service, nous la déconseillons dans des charges de travail de production. Certaines fonctionnalités peuvent être limitées ou non prises en charge. Pour plus d’informations, consultez Conditions d’Utilisation Supplémentaires relatives aux Évaluations Microsoft Azure.

Le système de filtrage de contenu intégré à Azure AI Services s’exécute en même temps que les modèles principaux. Il utilise un ensemble de modèles de classification multiclasse pour détecter quatre catégories de contenu dangereux (violence, haine, sexualité et automutilation) à quatre niveaux de gravité respectivement (sûr, faible, moyen et élevé). Il offre des classificateurs binaires facultatifs qui détectent les risques de jailbreak, un texte existant et du code provenant de référentiels publics. Pour en savoir plus sur les catégories de contenu, les niveaux de gravité et le comportement du système de filtrage de contenu, consultez l’article suivant

La configuration du filtrage du contenu par défaut est définie pour filtrer au seuil de gravité moyen pour les quatre catégories dangereuses de contenu, aussi bien pour les invites que pour les complétions. Par conséquent, le contenu détecté au niveau de gravité moyen ou élevé est filtré, tandis que le contenu détecté au niveau de gravité faible ou sûr n’est pas filtré.

Les filtres de contenu peuvent être configurés au niveau de la ressource et associés à un ou plusieurs déploiements.

Prérequis

Pour effectuer ce qui est décrit dans cet article, vous avez besoin des éléments suivants :

Ajouter un modèle de déploiement avec filtrage de contenu personnalisé

Nous vous recommandons de créer des filtres de contenu à l’aide du portail Azure AI Foundry ou dans du code à l’aide de Bicep. La création de filtres de contenu personnalisés ou leur application aux déploiements ne sont pas prises en charge à l’aide d’Azure CLI.

Prise en compte du filtrage de contenu dans votre code

Une fois le filtrage de contenu appliqué à votre modèle de déploiement, les requêtes peuvent être interceptées par le service en fonction des entrées et sorties. Lorsqu’un filtre de contenu est activé, un code d’erreur 400 est retourné avec la description de la règle activée.

Installez le package azure-ai-inference à l’aide de votre gestionnaire de package, par exemple pip :

pip install azure-ai-inference>=1.0.0b5

Avertissement

La ressource Azure AI Services nécessite la version azure-ai-inference>=1.0.0b5 de Python.

Vous pouvez ensuite utiliser le package pour consommer le modèle. L’exemple suivant montre comment créer un client pour consommer les complétions de conversation :

import os
from azure.ai.inference import ChatCompletionsClient
from azure.core.credentials import AzureKeyCredential

model = ChatCompletionsClient(
    endpoint="https://<resource>.services.ai.azure.com/models",
    credential=AzureKeyCredential(os.environ["AZUREAI_ENDPOINT_KEY"]),
)

Découvrez nos exemples, et lisez la documentation de référence API pour vous lancer.

L’exemple suivant montre la réponse d’une demande de saisie semi-automatique de conversation qui a déclenché la sécurité du contenu.

from azure.ai.inference.models import AssistantMessage, UserMessage, SystemMessage
from azure.core.exceptions import HttpResponseError

try:
    response = model.complete(
        messages=[
            SystemMessage(content="You are an AI assistant that helps people find information."),
            UserMessage(content="Chopping tomatoes and cutting them into cubes or wedges are great ways to practice your knife skills."),
        ]
    )

    print(response.choices[0].message.content)

except HttpResponseError as ex:
    if ex.status_code == 400:
        response = json.loads(ex.response._content.decode('utf-8'))
        if isinstance(response, dict) and "error" in response:
            print(f"Your request triggered an {response['error']['code']} error:\n\t {response['error']['message']}")
        else:
            raise ex
    else:
        raise ex

Suivre les bonnes pratiques

Nous vous recommandons de prendre vos décisions de configuration de filtrage de contenu sur la base d’une identification itérative (par exemple, des tests d’équipe rouge, des tests de contrainte et l’analyse) et d’un processus de mesure pour résoudre les dommages potentiels pertinents pour un modèle, une application et un scénario de déploiement spécifiques. Après avoir implémenté des atténuations telles que le filtrage de contenu, répétez la mesure pour tester l’efficacité.

Vous trouverez des recommandations et des meilleures pratiques pour l’IA responsable pour Azure OpenAI, qui sont ancrées dans la norme d’IA responsable de Microsoft dans Vue d’ensemble de l’IA responsable pour Azure OpenAI.

Important

Les éléments marqués (préversion) dans cet article sont actuellement en préversion publique. Cette préversion est fournie sans contrat de niveau de service, nous la déconseillons dans des charges de travail de production. Certaines fonctionnalités peuvent être limitées ou non prises en charge. Pour plus d’informations, consultez Conditions d’Utilisation Supplémentaires relatives aux Évaluations Microsoft Azure.

Le système de filtrage de contenu intégré à Azure AI Services s’exécute en même temps que les modèles principaux. Il utilise un ensemble de modèles de classification multiclasse pour détecter quatre catégories de contenu dangereux (violence, haine, sexualité et automutilation) à quatre niveaux de gravité respectivement (sûr, faible, moyen et élevé). Il offre des classificateurs binaires facultatifs qui détectent les risques de jailbreak, un texte existant et du code provenant de référentiels publics. Pour en savoir plus sur les catégories de contenu, les niveaux de gravité et le comportement du système de filtrage de contenu, consultez l’article suivant

La configuration du filtrage du contenu par défaut est définie pour filtrer au seuil de gravité moyen pour les quatre catégories dangereuses de contenu, aussi bien pour les invites que pour les complétions. Par conséquent, le contenu détecté au niveau de gravité moyen ou élevé est filtré, tandis que le contenu détecté au niveau de gravité faible ou sûr n’est pas filtré.

Les filtres de contenu peuvent être configurés au niveau de la ressource et associés à un ou plusieurs déploiements.

Prérequis

Pour effectuer ce qui est décrit dans cet article, vous avez besoin des éléments suivants :

  • Installez Azure CLI.

  • Identifiez les informations suivantes :

    • Votre ID d’abonnement Azure.

    • Le nom de votre ressource Azure AI Services.

    • Le groupe de ressources dans lequel la ressource Azure AI Services est déployée.

    • Nom du modèle, fournisseur, version et référence SKU que vous souhaitez déployer. Vous pouvez utiliser le portail Azure AI Foundry ou Azure CLI pour l’identifier. Dans cet exemple, nous déployons le modèle suivant :

      • Nom du modèle : Phi-3.5-vision-instruct
      • Fournisseur : Microsoft
      • Version :2
      • Type de déploiement : Standard global

Ajouter un modèle de déploiement avec filtrage de contenu personnalisé

  1. Utilisez le modèle ai-services-content-filter-template.bicep pour décrire la stratégie de filtre de contenu :

    ai-services-content-filter-template.bicep

    @description('Name of the Azure AI Services account where the policy will be created')
    param accountName string
    
    @description('Name of the policy to be created')
    param policyName string
    
    @allowed(['Asynchronous_filter', 'Blocking', 'Default', 'Deferred'])
    param mode string = 'Default'
    
    @description('Base policy to be used for the new policy')
    param basePolicyName string = 'Microsoft.DefaultV2'
    
    param contentFilters array = [
      {
          name: 'Violence'
          severityThreshold: 'Medium'
          blocking: true
          enabled: true
          source: 'Prompt'
      }
      {
          name: 'Hate'
          severityThreshold: 'Medium'
          blocking: true
          enabled: true
          source: 'Prompt'
      }
      {
          name: 'Sexual'
          severityThreshold: 'Medium'
          blocking: true
          enabled: true
          source: 'Prompt'
      }
      {
          name: 'Selfharm'
          severityThreshold: 'Medium'
          blocking: true
          enabled: true
          source: 'Prompt'
      }
      {
          name: 'Jailbreak'
          blocking: true
          enabled: true
          source: 'Prompt'
      }
      {
          name: 'Indirect Attack'
          blocking: true
          enabled: true
          source: 'Prompt'
      }
      {
          name: 'Profanity'
          blocking: true
          enabled: true
          source: 'Prompt'
      }
      {
          name: 'Violence'
          severityThreshold: 'Medium'
          blocking: true
          enabled: true
          source: 'Completion'
      }
      {
          name: 'Hate'
          severityThreshold: 'Medium'
          blocking: true
          enabled: true
          source: 'Completion'
      }
      {
          name: 'Sexual'
          severityThreshold: 'Medium'
          blocking: true
          enabled: true
          source: 'Completion'
      }
      {
          name: 'Selfharm'
          severityThreshold: 'Medium'
          blocking: true
          enabled: true
          source: 'Completion'
      }
      {
          name: 'Protected Material Text'
          blocking: true
          enabled: true
          source: 'Completion'
      }
      {
          name: 'Protected Material Code'
          blocking: false
          enabled: true
          source: 'Completion'
      }
      {
          name: 'Profanity'
          blocking: true
          enabled: true
          source: 'Completion'
      }
    ]
    
    resource raiPolicy 'Microsoft.CognitiveServices/accounts/raiPolicies@2024-06-01-preview' = {
        name: '${accountName}/${policyName}'
        properties: {
            mode: mode
            basePolicyName: basePolicyName
            contentFilters: contentFilters
        }
    }
    
  2. Utilisez le modèle ai-services-deployment-template.bicep pour décrire les modèles de déploiement :

    ai-services-deployment-template.bicep

    @description('Name of the Azure AI services account')
    param accountName string
    
    @description('Name of the model to deploy')
    param modelName string
    
    @description('Version of the model to deploy')
    param modelVersion string
    
    @allowed([
      'AI21 Labs'
      'Cohere'
      'Core42'
      'DeepSeek'
      'Meta'
      'Microsoft'
      'Mistral AI'
      'OpenAI'
    ])
    @description('Model provider')
    param modelPublisherFormat string
    
    @allowed([
        'GlobalStandard'
        'Standard'
        'GlobalProvisioned'
        'Provisioned'
    ])
    @description('Model deployment SKU name')
    param skuName string = 'GlobalStandard'
    
    @description('Content filter policy name')
    param contentFilterPolicyName string = 'Microsoft.DefaultV2'
    
    @description('Model deployment capacity')
    param capacity int = 1
    
    resource modelDeployment 'Microsoft.CognitiveServices/accounts/deployments@2024-04-01-preview' = {
      name: '${accountName}/${modelName}'
      sku: {
        name: skuName
        capacity: capacity
      }
      properties: {
        model: {
          format: modelPublisherFormat
          name: modelName
          version: modelVersion
        }
        raiPolicyName: contentFilterPolicyName == null ? 'Microsoft.Nill' : contentFilterPolicyName
      }
    }
    
  3. Créez la principale définition du déploiement :

    main.bicep

    param accountName string
    param modelName string
    param modelVersion string
    param modelPublisherFormat string
    param contentFilterPolicyName string
    
    module raiPolicy 'ai-services-content-filter-template.bicep' = {
      name: 'raiPolicy'
      scope: resourceGroup(resourceGroupName)
      params: {
        accountName: accountName
        policyName: contentFilterPolicyName
      }
    }
    
    module modelDeployment 'ai-services-deployment-template.bicep' = {
        name: 'modelDeployment'
        scope: resourceGroup(resourceGroupName)
        params: {
            accountName: accountName
            modelName: modelName
            modelVersion: modelVersion
            modelPublisherFormat: modelPublisherFormat
            contentFilterPolicyName: contentFilterPolicyName
        }
        dependsOn: [
            raiPolicy
        ]
    }
    
  4. Exécutez le déploiement :

    RESOURCE_GROUP="<resource-group-name>"
    ACCOUNT_NAME="<azure-ai-model-inference-name>" 
    MODEL_NAME="Phi-3.5-vision-instruct"
    PROVIDER="Microsoft"
    VERSION=2
    RAI_POLICY_NAME="custom-policy"
    
    az deployment group create \
        --resource-group $RESOURCE_GROUP \
        --template-file main.bicep \
        --parameters accountName=$ACCOUNT_NAME raiPolicyName=$RAI_POLICY_NAME modelName=$MODEL_NAME modelVersion=$VERSION modelPublisherFormat=$PROVIDER
    

Prise en compte du filtrage de contenu dans votre code

Une fois le filtrage de contenu appliqué à votre modèle de déploiement, les requêtes peuvent être interceptées par le service en fonction des entrées et sorties. Lorsqu’un filtre de contenu est activé, un code d’erreur 400 est retourné avec la description de la règle activée.

Installez le package azure-ai-inference à l’aide de votre gestionnaire de package, par exemple pip :

pip install azure-ai-inference>=1.0.0b5

Avertissement

La ressource Azure AI Services nécessite la version azure-ai-inference>=1.0.0b5 de Python.

Vous pouvez ensuite utiliser le package pour consommer le modèle. L’exemple suivant montre comment créer un client pour consommer les complétions de conversation :

import os
from azure.ai.inference import ChatCompletionsClient
from azure.core.credentials import AzureKeyCredential

model = ChatCompletionsClient(
    endpoint="https://<resource>.services.ai.azure.com/models",
    credential=AzureKeyCredential(os.environ["AZUREAI_ENDPOINT_KEY"]),
)

Découvrez nos exemples, et lisez la documentation de référence API pour vous lancer.

L’exemple suivant montre la réponse d’une demande de saisie semi-automatique de conversation qui a déclenché la sécurité du contenu.

from azure.ai.inference.models import AssistantMessage, UserMessage, SystemMessage
from azure.core.exceptions import HttpResponseError

try:
    response = model.complete(
        messages=[
            SystemMessage(content="You are an AI assistant that helps people find information."),
            UserMessage(content="Chopping tomatoes and cutting them into cubes or wedges are great ways to practice your knife skills."),
        ]
    )

    print(response.choices[0].message.content)

except HttpResponseError as ex:
    if ex.status_code == 400:
        response = json.loads(ex.response._content.decode('utf-8'))
        if isinstance(response, dict) and "error" in response:
            print(f"Your request triggered an {response['error']['code']} error:\n\t {response['error']['message']}")
        else:
            raise ex
    else:
        raise ex

Suivre les bonnes pratiques

Nous vous recommandons de prendre vos décisions de configuration de filtrage de contenu sur la base d’une identification itérative (par exemple, des tests d’équipe rouge, des tests de contrainte et l’analyse) et d’un processus de mesure pour résoudre les dommages potentiels pertinents pour un modèle, une application et un scénario de déploiement spécifiques. Après avoir implémenté des atténuations telles que le filtrage de contenu, répétez la mesure pour tester l’efficacité.

Vous trouverez des recommandations et des meilleures pratiques pour l’IA responsable pour Azure OpenAI, qui sont ancrées dans la norme d’IA responsable de Microsoft dans Vue d’ensemble de l’IA responsable pour Azure OpenAI.

Étapes suivantes