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