azure-ai-contentsafety-py

npx skills add https://github.com/microsoft/skills --skill azure-ai-contentsafety-py

SDK Azure AI Content Safety pour Python

Détectez le contenu nuisible généré par les utilisateurs et par l'IA dans vos applications.

Installation

pip install azure-ai-contentsafety

Variables d'environnement

CONTENT_SAFETY_ENDPOINT=https://<resource>.cognitiveservices.azure.com  # Requis pour toutes les méthodes d'authentification
CONTENT_SAFETY_KEY=<your-api-key>  # Requis uniquement pour l'authentification AzureKeyCredential
AZURE_TOKEN_CREDENTIALS=prod # Requis uniquement si DefaultAzureCredential est utilisé en production

Authentification

Clé API

from azure.ai.contentsafety import ContentSafetyClient
from azure.core.credentials import AzureKeyCredential
import os

client = ContentSafetyClient(
    endpoint=os.environ["CONTENT_SAFETY_ENDPOINT"],
    credential=AzureKeyCredential(os.environ["CONTENT_SAFETY_KEY"])
)

Entra ID

from azure.ai.contentsafety import ContentSafetyClient
from azure.identity import DefaultAzureCredential, ManagedIdentityCredential

# Dev local : DefaultAzureCredential. Production : définir AZURE_TOKEN_CREDENTIALS=prod ou AZURE_TOKEN_CREDENTIALS=<specific_credential>
credential = DefaultAzureCredential(require_envvar=True)
# Ou utiliser une credential spécifique directement en production :
# Voir https://learn.microsoft.com/python/api/overview/azure/identity-readme?view=azure-python#credential-classes
# credential = ManagedIdentityCredential()
client = ContentSafetyClient(
    endpoint=os.environ["CONTENT_SAFETY_ENDPOINT"],
    credential=credential
)

Analyser du texte

from azure.ai.contentsafety import ContentSafetyClient
from azure.ai.contentsafety.models import AnalyzeTextOptions, TextCategory
from azure.core.credentials import AzureKeyCredential

client = ContentSafetyClient(endpoint, AzureKeyCredential(key))

request = AnalyzeTextOptions(text="Your text content to analyze")
response = client.analyze_text(request)

# Vérifier chaque catégorie
for category in [TextCategory.HATE, TextCategory.SELF_HARM, 
                 TextCategory.SEXUAL, TextCategory.VIOLENCE]:
    result = next((r for r in response.categories_analysis 
                   if r.category == category), None)
    if result:
        print(f"{category}: severity {result.severity}")

Analyser une image

from azure.ai.contentsafety import ContentSafetyClient
from azure.ai.contentsafety.models import AnalyzeImageOptions, ImageData
from azure.core.credentials import AzureKeyCredential
import base64

client = ContentSafetyClient(endpoint, AzureKeyCredential(key))

# Depuis un fichier
with open("image.jpg", "rb") as f:
    image_data = base64.b64encode(f.read()).decode("utf-8")

request = AnalyzeImageOptions(
    image=ImageData(content=image_data)
)

response = client.analyze_image(request)

for result in response.categories_analysis:
    print(f"{result.category}: severity {result.severity}")

Image depuis une URL

from azure.ai.contentsafety.models import AnalyzeImageOptions, ImageData

request = AnalyzeImageOptions(
    image=ImageData(blob_url="https://example.com/image.jpg")
)

response = client.analyze_image(request)

Gestion des listes de blocage de texte

Créer une liste de blocage

from azure.ai.contentsafety import BlocklistClient
from azure.ai.contentsafety.models import TextBlocklist
from azure.core.credentials import AzureKeyCredential

blocklist_client = BlocklistClient(endpoint, AzureKeyCredential(key))

blocklist = TextBlocklist(
    blocklist_name="my-blocklist",
    description="Custom terms to block"
)

result = blocklist_client.create_or_update_text_blocklist(
    blocklist_name="my-blocklist",
    options=blocklist
)

Ajouter des éléments de blocage

from azure.ai.contentsafety.models import AddOrUpdateTextBlocklistItemsOptions, TextBlocklistItem

items = AddOrUpdateTextBlocklistItemsOptions(
    blocklist_items=[
        TextBlocklistItem(text="blocked-term-1"),
        TextBlocklistItem(text="blocked-term-2")
    ]
)

result = blocklist_client.add_or_update_blocklist_items(
    blocklist_name="my-blocklist",
    options=items
)

Analyser avec une liste de blocage

from azure.ai.contentsafety.models import AnalyzeTextOptions

request = AnalyzeTextOptions(
    text="Text containing blocked-term-1",
    blocklist_names=["my-blocklist"],
    halt_on_blocklist_hit=True
)

response = client.analyze_text(request)

if response.blocklists_match:
    for match in response.blocklists_match:
        print(f"Blocked: {match.blocklist_item_text}")

Niveaux de sévérité

L'analyse de texte retourne 4 niveaux de sévérité (0, 2, 4, 6) par défaut. Pour 8 niveaux (0-7) :

from azure.ai.contentsafety.models import AnalyzeTextOptions, AnalyzeTextOutputType

request = AnalyzeTextOptions(
    text="Your text",
    output_type=AnalyzeTextOutputType.EIGHT_SEVERITY_LEVELS
)

Catégories de préjudice

Catégorie Description
Hate Attaques basées sur l'identité (race, religion, genre, etc.)
Sexual Contenu sexuel, relations, anatomie
Violence Blessures physiques, armes, dommages
SelfHarm Automutilation, suicide, troubles alimentaires

Échelle de sévérité

Niveau Plage texte Plage image Signification
0 Sûr Sûr Pas de contenu nuisible
2 Bas Bas Références douces
4 Moyen Moyen Contenu modéré
6 Haut Haut Contenu grave

Types de client

Client Objectif
ContentSafetyClient Analyser du texte et des images
BlocklistClient Gérer les listes de blocage personnalisées

Bonnes pratiques

  1. Utiliser les listes de blocage pour les termes spécifiques au domaine
  2. Définir les seuils de sévérité appropriés à votre cas d'usage
  3. Gérer plusieurs catégories — le contenu peut être nuisible de plusieurs façons
  4. Utiliser halt_on_blocklist_hit pour un rejet immédiat
  5. Enregistrer les résultats d'analyse pour l'audit et l'amélioration
  6. Considérer le mode 8-sévérité pour un contrôle plus fin
  7. Pré-modérer les outputs de l'IA avant affichage aux utilisateurs

Skills similaires