bibliothèque cliente Azure AI Sécurité du Contenu pour Python - version 1.0.0
Azure AI Sécurité du Contenu détecte le contenu dangereux généré par l’utilisateur et généré par l’IA dans les applications et les services. La sécurité du contenu inclut des API de texte et d’image qui vous permettent de détecter des éléments nuisibles :
- API Analyse de texte : analyse le texte à la recherche de contenu sexuel, de violence, de haine et d’automutilation avec des niveaux de gravité multiples.
- API Analyse d’images : analyse les images à la recherche de contenu sexuel, de violence, de haine et d’automutilation avec des niveaux de gravité multiples.
- API de gestion des listes de blocs de texte : les classifieurs d’IA par défaut sont suffisants pour la plupart des besoins de sécurité du contenu ; Toutefois, vous devrez peut-être rechercher des termes spécifiques à votre cas d’usage. Vous pouvez créer des listes de blocs de termes à utiliser avec l’API De texte.
Documentation
Diverses documentations sont disponibles pour vous aider à démarrer
Prise en main
Prérequis
- Python 3.7 ou version ultérieure est requis pour utiliser ce package.
- Vous avez besoin d’un abonnement Azure pour utiliser ce package.
- Une ressource Azure AI Sécurité du Contenu, si aucune ressource n’existe, vous pouvez en créer une nouvelle.
Installer le package
pip install azure-ai-contentsafety
Authentifier le client
Obtenir le point de terminaison
Vous pouvez trouver le point de terminaison de votre ressource de service Azure AI Sécurité du Contenu à l’aide du portail Azure ou d’Azure CLI :
# Get the endpoint for the Azure AI Content Safety service resource
az cognitiveservices account show --name "resource-name" --resource-group "resource-group-name" --query "properties.endpoint"
Créer un ContentSafetyClient/BlocklistClient avec une clé API
Pour utiliser une clé API comme credential
paramètre.
Étape 1 : Obtenir la clé API. La clé API se trouve dans le portail Azure ou en exécutant la commande Azure CLI suivante :
az cognitiveservices account keys list --name "<resource-name>" --resource-group "<resource-group-name>"
Étape 2 : Passez la clé sous forme de chaîne dans un instance de
AzureKeyCredential
.from azure.core.credentials import AzureKeyCredential from azure.ai.contentsafety import ContentSafetyClient, BlocklistClient endpoint = "https://<my-custom-subdomain>.cognitiveservices.azure.com/" credential = AzureKeyCredential("<api_key>") content_safety_client = ContentSafetyClient(endpoint, credential) blocklist_client = BlocklistClient(endpoint, credential)
Créer un ContentSafetyClient/BlocklistClient avec des informations d’identification de jeton d’ID Microsoft Entra
Étape 1 : Activez l’ID Microsoft Entra pour votre ressource. Reportez-vous à ce document Authentifiez-vous avec Microsoft Entra ID pour connaître les étapes permettant d’activer Microsoft Entra ID pour votre ressource.
Les étapes main sont les suivantes :
- Créez une ressource avec un sous-domaine personnalisé.
- Créez un principal de service et attribuez-lui le rôle Utilisateur Cognitive Services.
Étape 2 : Définissez les valeurs de l’ID client, de l’ID de locataire et de la clé secrète client de l’application Microsoft Entra en tant que variables d’environnement :
AZURE_CLIENT_ID
,AZURE_TENANT_ID
,AZURE_CLIENT_SECRET
.DefaultAzureCredential utilise les valeurs de ces variables d’environnement.
from azure.identity import DefaultAzureCredential from azure.ai.contentsafety import ContentSafetyClient, BlocklistClient endpoint = "https://<my-custom-subdomain>.cognitiveservices.azure.com/" credential = DefaultAzureCredential() content_safety_client = ContentSafetyClient(endpoint, credential) blocklist_client = BlocklistClient(endpoint, credential)
Concepts clés
Fonctionnalités disponibles
Il existe différents types d’analyse disponibles dans ce service. Le tableau suivant décrit les API actuellement disponibles.
Fonctionnalité | Description |
---|---|
API Analyse de texte | Analyse du texte à la recherche de contenu sexuel, de violence, de haine et d’automutilation avec des niveaux de gravité multiples. |
API d’analyse d’image | Scanne des images à la recherche de contenu sexuel, de violence, de haine et d’automutilation avec des niveaux de gravité multiples. |
API de gestion des listes de blocs de texte | Les classifieurs d’IA par défaut sont suffisants pour la plupart des besoins de sécurité du contenu. Toutefois, vous devrez peut-être rechercher des termes spécifiques à votre cas d’usage. Vous pouvez créer des listes de blocs de termes à utiliser avec l’API De texte. |
Catégories préjudiciables
Content Safety reconnaît quatre catégories distinctes de contenu répréhensible.
Category | Description |
---|---|
Déteste | Les préjudices liés à la haine et à l’équité désignent tout contenu qui attaque ou utilise un langage péjoratif ou discriminatoire en faisant référence à une personne ou à un groupe d’identité en fonction de certains attributs de différenciation de ces groupes, notamment la race, l’ethnicité, la nationalité, l’identité et l’expression de genre, l’orientation sexuelle, la religion, l’immigration status, la capacité status, l’apparence personnelle et la taille du corps. |
Contenu sexuel | Le langage sexuel décrit le langage relatif aux organes anatomiques et aux organes génitaux, aux relations amoureuses, aux actes décrits en termes érotiques ou affectueux, à la grossesse, aux actes sexuels physiques, y compris ceux présentés comme une agression ou un acte forcé de violence sexuelle contre sa volonté, la prostitution, la pornographie et les abus. |
Violence | La violence décrit le langage lié aux actions physiques visant à blesser, blesser, endommager ou tuer quelqu’un ou quelque chose ; décrit les armes, les armes à feu et les entités connexes, telles que les fabricants, les associations, la législation, etc. |
Automutilation | L’automutilation décrit le langage lié aux actions physiques visant à blesser, blesser, endommager son corps ou se tuer. |
La classification peut avoir plusieurs intitulés. Par exemple, lorsqu’un exemple de texte est exécuté via le modèle de modération de texte, il peut être classé à la fois comme du contenu à caractère sexuel et de la violence.
Niveaux de gravité
Chaque catégorie de préjudice appliquée par le service est également accompagnée d’une évaluation de niveau de gravité. Le niveau de gravité est destiné à indiquer la gravité des conséquences de l’affichage du contenu marqué d’un indicateur.
Texte : la version actuelle du modèle de texte prend en charge l’échelle de gravité complète de 0 à 7. Par défaut, la réponse génère 4 valeurs : 0, 2, 4 et 6. Les deux niveaux adjacents sont mappés à un seul niveau. Les utilisateurs peuvent utiliser « outputType » dans la requête et le définir sur « EightSeverityLevels » pour obtenir 8 valeurs dans la sortie : 0,1,2,3,4,5,6,7. Pour plus d’informations, vous pouvez consulter les définitions de niveaux de gravité du contenu texte.
- [0,1] -> 0
- [2,3] -> 2
- [4,5] -> 4
- [6,7] -> 6
Image : la version actuelle du modèle d’image prend en charge la version supprimée de l’échelle de gravité 0-7 complète. Le classifieur retourne uniquement les gravités 0, 2, 4 et 6 ; les deux niveaux adjacents sont mappés à un seul niveau. Pour plus d’informations, reportez-vous aux définitions des niveaux de gravité du contenu de l’image .
- [0,1] -> 0
- [2,3] -> 2
- [4,5] -> 4
- [6,7] -> 6
Gestion des listes de blocage de texte
Les opérations suivantes sont prises en charge pour gérer votre liste de blocage de texte :
- Créez ou modifiez une liste de blocs
- Afficher toutes les listes de refus
- Obtenir une liste de blocage par blocklistName
- Ajouter blocklistItems à une liste de blocage
- Supprimer blocklistItems d’une liste de blocage
- Répertorier tous les blocklistItems d’une liste de blocage par blocklistName
- Obtenir un blocklistItem dans une liste de blocage par blocklistItemId et blocklistName
- Supprimer une liste de blocage et tous ses blocklistItems
Vous pouvez définir les listes de blocage que vous souhaitez utiliser lors de l’analyse du texte, puis vous pouvez obtenir le résultat de correspondance de liste de blocage à partir de la réponse retournée.
Exemples
La section suivante fournit plusieurs extraits de code couvrant certaines des tâches de service de sécurité du contenu les plus courantes, notamment :
Reportez-vous aux exemples de données pour les données utilisées ici. Pour plus d’exemples, reportez-vous aux exemples.
Analyser le texte
Analyser du texte sans liste de blocs
import os
from azure.ai.contentsafety import ContentSafetyClient
from azure.ai.contentsafety.models import TextCategory
from azure.core.credentials import AzureKeyCredential
from azure.core.exceptions import HttpResponseError
from azure.ai.contentsafety.models import AnalyzeTextOptions
key = os.environ["CONTENT_SAFETY_KEY"]
endpoint = os.environ["CONTENT_SAFETY_ENDPOINT"]
# Create a Content Safety client
client = ContentSafetyClient(endpoint, AzureKeyCredential(key))
# Construct a request
request = AnalyzeTextOptions(text="You are an idiot")
# Analyze text
try:
response = client.analyze_text(request)
except HttpResponseError as e:
print("Analyze text failed.")
if e.error:
print(f"Error code: {e.error.code}")
print(f"Error message: {e.error.message}")
raise
print(e)
raise
hate_result = next(item for item in response.categories_analysis if item.category == TextCategory.HATE)
self_harm_result = next(item for item in response.categories_analysis if item.category == TextCategory.SELF_HARM)
sexual_result = next(item for item in response.categories_analysis if item.category == TextCategory.SEXUAL)
violence_result = next(item for item in response.categories_analysis if item.category == TextCategory.VIOLENCE)
if hate_result:
print(f"Hate severity: {hate_result.severity}")
if self_harm_result:
print(f"SelfHarm severity: {self_harm_result.severity}")
if sexual_result:
print(f"Sexual severity: {sexual_result.severity}")
if violence_result:
print(f"Violence severity: {violence_result.severity}")
Analyser le texte avec des listes de blocs
import os
from azure.ai.contentsafety import ContentSafetyClient
from azure.core.credentials import AzureKeyCredential
from azure.ai.contentsafety.models import AnalyzeTextOptions
from azure.core.exceptions import HttpResponseError
key = os.environ["CONTENT_SAFETY_KEY"]
endpoint = os.environ["CONTENT_SAFETY_ENDPOINT"]
# Create a Content Safety client
client = ContentSafetyClient(endpoint, AzureKeyCredential(key))
blocklist_name = "TestBlocklist"
input_text = "I h*te you and I want to k*ll you."
try:
# After you edit your blocklist, it usually takes effect in 5 minutes, please wait some time before analyzing with blocklist after editing.
analysis_result = client.analyze_text(
AnalyzeTextOptions(text=input_text, blocklist_names=[blocklist_name], halt_on_blocklist_hit=False)
)
if analysis_result and analysis_result.blocklists_match:
print("\nBlocklist match results: ")
for match_result in analysis_result.blocklists_match:
print(
f"BlocklistName: {match_result.blocklist_name}, BlockItemId: {match_result.blocklist_item_id}, "
f"BlockItemText: {match_result.blocklist_item_text}"
)
except HttpResponseError as e:
print("\nAnalyze text failed: ")
if e.error:
print(f"Error code: {e.error.code}")
print(f"Error message: {e.error.message}")
raise
print(e)
raise
Analyser l’image
import os
from azure.ai.contentsafety import ContentSafetyClient
from azure.ai.contentsafety.models import ImageCategory
from azure.core.credentials import AzureKeyCredential
from azure.core.exceptions import HttpResponseError
from azure.ai.contentsafety.models import AnalyzeImageOptions, ImageData
key = os.environ["CONTENT_SAFETY_KEY"]
endpoint = os.environ["CONTENT_SAFETY_ENDPOINT"]
image_path = os.path.abspath(os.path.join(os.path.abspath(__file__), "..", "./sample_data/image.jpg"))
# Create a Content Safety client
client = ContentSafetyClient(endpoint, AzureKeyCredential(key))
# Build request
with open(image_path, "rb") as file:
request = AnalyzeImageOptions(image=ImageData(content=file.read()))
# Analyze image
try:
response = client.analyze_image(request)
except HttpResponseError as e:
print("Analyze image failed.")
if e.error:
print(f"Error code: {e.error.code}")
print(f"Error message: {e.error.message}")
raise
print(e)
raise
hate_result = next(item for item in response.categories_analysis if item.category == ImageCategory.HATE)
self_harm_result = next(item for item in response.categories_analysis if item.category == ImageCategory.SELF_HARM)
sexual_result = next(item for item in response.categories_analysis if item.category == ImageCategory.SEXUAL)
violence_result = next(item for item in response.categories_analysis if item.category == ImageCategory.VIOLENCE)
if hate_result:
print(f"Hate severity: {hate_result.severity}")
if self_harm_result:
print(f"SelfHarm severity: {self_harm_result.severity}")
if sexual_result:
print(f"Sexual severity: {sexual_result.severity}")
if violence_result:
print(f"Violence severity: {violence_result.severity}")
Gérer la liste de blocs de texte
Créer ou mettre à jour une liste de blocs de texte
import os
from azure.ai.contentsafety import BlocklistClient
from azure.ai.contentsafety.models import TextBlocklist
from azure.core.credentials import AzureKeyCredential
from azure.core.exceptions import HttpResponseError
key = os.environ["CONTENT_SAFETY_KEY"]
endpoint = os.environ["CONTENT_SAFETY_ENDPOINT"]
# Create a Blocklist client
client = BlocklistClient(endpoint, AzureKeyCredential(key))
blocklist_name = "TestBlocklist"
blocklist_description = "Test blocklist management."
try:
blocklist = client.create_or_update_text_blocklist(
blocklist_name=blocklist_name,
options=TextBlocklist(blocklist_name=blocklist_name, description=blocklist_description),
)
if blocklist:
print("\nBlocklist created or updated: ")
print(f"Name: {blocklist.blocklist_name}, Description: {blocklist.description}")
except HttpResponseError as e:
print("\nCreate or update text blocklist failed: ")
if e.error:
print(f"Error code: {e.error.code}")
print(f"Error message: {e.error.message}")
raise
print(e)
raise
Lister les listes de blocs de texte
import os
from azure.ai.contentsafety import BlocklistClient
from azure.core.credentials import AzureKeyCredential
from azure.core.exceptions import HttpResponseError
key = os.environ["CONTENT_SAFETY_KEY"]
endpoint = os.environ["CONTENT_SAFETY_ENDPOINT"]
# Create a Blocklist client
client = BlocklistClient(endpoint, AzureKeyCredential(key))
try:
blocklists = client.list_text_blocklists()
if blocklists:
print("\nList blocklists: ")
for blocklist in blocklists:
print(f"Name: {blocklist.blocklist_name}, Description: {blocklist.description}")
except HttpResponseError as e:
print("\nList text blocklists failed: ")
if e.error:
print(f"Error code: {e.error.code}")
print(f"Error message: {e.error.message}")
raise
print(e)
raise
Obtenir une liste de blocs de texte
import os
from azure.ai.contentsafety import BlocklistClient
from azure.core.credentials import AzureKeyCredential
from azure.core.exceptions import HttpResponseError
key = os.environ["CONTENT_SAFETY_KEY"]
endpoint = os.environ["CONTENT_SAFETY_ENDPOINT"]
# Create a Blocklist client
client = BlocklistClient(endpoint, AzureKeyCredential(key))
blocklist_name = "TestBlocklist"
try:
blocklist = client.get_text_blocklist(blocklist_name=blocklist_name)
if blocklist:
print("\nGet blocklist: ")
print(f"Name: {blocklist.blocklist_name}, Description: {blocklist.description}")
except HttpResponseError as e:
print("\nGet text blocklist failed: ")
if e.error:
print(f"Error code: {e.error.code}")
print(f"Error message: {e.error.message}")
raise
print(e)
raise
Supprimer la liste de blocs de texte
import os
from azure.ai.contentsafety import BlocklistClient
from azure.core.credentials import AzureKeyCredential
from azure.core.exceptions import HttpResponseError
key = os.environ["CONTENT_SAFETY_KEY"]
endpoint = os.environ["CONTENT_SAFETY_ENDPOINT"]
# Create a Blocklist client
client = BlocklistClient(endpoint, AzureKeyCredential(key))
blocklist_name = "TestBlocklist"
try:
client.delete_text_blocklist(blocklist_name=blocklist_name)
print(f"\nDeleted blocklist: {blocklist_name}")
except HttpResponseError as e:
print("\nDelete blocklist failed:")
if e.error:
print(f"Error code: {e.error.code}")
print(f"Error message: {e.error.message}")
raise
print(e)
raise
Ajouter blockItems
import os
from azure.ai.contentsafety import BlocklistClient
from azure.ai.contentsafety.models import AddOrUpdateTextBlocklistItemsOptions, TextBlocklistItem
from azure.core.credentials import AzureKeyCredential
from azure.core.exceptions import HttpResponseError
key = os.environ["CONTENT_SAFETY_KEY"]
endpoint = os.environ["CONTENT_SAFETY_ENDPOINT"]
# Create a Blocklist client
client = BlocklistClient(endpoint, AzureKeyCredential(key))
blocklist_name = "TestBlocklist"
block_item_text_1 = "k*ll"
block_item_text_2 = "h*te"
block_items = [TextBlocklistItem(text=block_item_text_1), TextBlocklistItem(text=block_item_text_2)]
try:
result = client.add_or_update_blocklist_items(
blocklist_name=blocklist_name, options=AddOrUpdateTextBlocklistItemsOptions(blocklist_items=block_items)
)
for block_item in result.blocklist_items:
print(
f"BlockItemId: {block_item.blocklist_item_id}, Text: {block_item.text}, Description: {block_item.description}"
)
except HttpResponseError as e:
print("\nAdd block items failed: ")
if e.error:
print(f"Error code: {e.error.code}")
print(f"Error message: {e.error.message}")
raise
print(e)
raise
Lister les blockItems
import os
from azure.ai.contentsafety import BlocklistClient
from azure.core.credentials import AzureKeyCredential
from azure.core.exceptions import HttpResponseError
key = os.environ["CONTENT_SAFETY_KEY"]
endpoint = os.environ["CONTENT_SAFETY_ENDPOINT"]
# Create a Blocklist client
client = BlocklistClient(endpoint, AzureKeyCredential(key))
blocklist_name = "TestBlocklist"
try:
block_items = client.list_text_blocklist_items(blocklist_name=blocklist_name)
if block_items:
print("\nList block items: ")
for block_item in block_items:
print(
f"BlockItemId: {block_item.blocklist_item_id}, Text: {block_item.text}, "
f"Description: {block_item.description}"
)
except HttpResponseError as e:
print("\nList block items failed: ")
if e.error:
print(f"Error code: {e.error.code}")
print(f"Error message: {e.error.message}")
raise
print(e)
raise
Obtenir blockItem
import os
from azure.ai.contentsafety import BlocklistClient
from azure.core.credentials import AzureKeyCredential
from azure.ai.contentsafety.models import TextBlocklistItem, AddOrUpdateTextBlocklistItemsOptions
from azure.core.exceptions import HttpResponseError
key = os.environ["CONTENT_SAFETY_KEY"]
endpoint = os.environ["CONTENT_SAFETY_ENDPOINT"]
# Create a Blocklist client
client = BlocklistClient(endpoint, AzureKeyCredential(key))
blocklist_name = "TestBlocklist"
block_item_text_1 = "k*ll"
try:
# Add a blockItem
add_result = client.add_or_update_blocklist_items(
blocklist_name=blocklist_name,
options=AddOrUpdateTextBlocklistItemsOptions(blocklist_items=[TextBlocklistItem(text=block_item_text_1)]),
)
if not add_result or not add_result.blocklist_items or len(add_result.blocklist_items) <= 0:
raise RuntimeError("BlockItem not created.")
block_item_id = add_result.blocklist_items[0].blocklist_item_id
# Get this blockItem by blockItemId
block_item = client.get_text_blocklist_item(blocklist_name=blocklist_name, blocklist_item_id=block_item_id)
print("\nGet blockitem: ")
print(
f"BlockItemId: {block_item.blocklist_item_id}, Text: {block_item.text}, Description: {block_item.description}"
)
except HttpResponseError as e:
print("\nGet block item failed: ")
if e.error:
print(f"Error code: {e.error.code}")
print(f"Error message: {e.error.message}")
raise
print(e)
raise
Supprimer blockItems
import os
from azure.ai.contentsafety import BlocklistClient
from azure.core.credentials import AzureKeyCredential
from azure.ai.contentsafety.models import (
TextBlocklistItem,
AddOrUpdateTextBlocklistItemsOptions,
RemoveTextBlocklistItemsOptions,
)
from azure.core.exceptions import HttpResponseError
key = os.environ["CONTENT_SAFETY_KEY"]
endpoint = os.environ["CONTENT_SAFETY_ENDPOINT"]
# Create a Blocklist client
client = BlocklistClient(endpoint, AzureKeyCredential(key))
blocklist_name = "TestBlocklist"
block_item_text_1 = "k*ll"
try:
# Add a blockItem
add_result = client.add_or_update_blocklist_items(
blocklist_name=blocklist_name,
options=AddOrUpdateTextBlocklistItemsOptions(blocklist_items=[TextBlocklistItem(text=block_item_text_1)]),
)
if not add_result or not add_result.blocklist_items or len(add_result.blocklist_items) <= 0:
raise RuntimeError("BlockItem not created.")
block_item_id = add_result.blocklist_items[0].blocklist_item_id
# Remove this blockItem by blockItemId
client.remove_blocklist_items(
blocklist_name=blocklist_name, options=RemoveTextBlocklistItemsOptions(blocklist_item_ids=[block_item_id])
)
print(f"\nRemoved blockItem: {add_result.blocklist_items[0].blocklist_item_id}")
except HttpResponseError as e:
print("\nRemove block item failed: ")
if e.error:
print(f"Error code: {e.error.code}")
print(f"Error message: {e.error.message}")
raise
print(e)
raise
Dépannage
Général
Azure AI Sécurité du Contenu bibliothèque cliente déclenche des exceptions définies dans Azure Core. Les codes d’erreur sont définis comme suit :
Code d'erreur | Causes possibles | Suggestions |
---|---|---|
InvalidRequestBody | Un ou plusieurs champs dans le corps de la requête ne correspondent pas à la définition de l’API. | 1. Vérifiez la version de l’API que vous avez spécifiée dans l’appel d’API. 2. Vérifiez la définition d’API correspondante pour la version de l’API que vous avez sélectionnée. |
InvalidResourceName | Le nom de ressource que vous avez spécifié dans l’URL ne répond pas aux exigences, comme le nom de la liste de blocs, l’ID de terme de la liste de blocs, etc. | 1. Vérifiez la version de l’API que vous avez spécifiée dans l’appel d’API. 2. Vérifiez si le nom donné contient des caractères invalides selon la définition de l’API. |
ResourceNotFound | La ressource que vous avez spécifiée dans l’URL pourrait ne pas exister, comme le nom de la liste de blocage. | 1. Vérifiez la version de l’API que vous avez spécifiée dans l’appel d’API. 2. Vérifiez à nouveau l’existence de la ressource spécifiée dans l’URL. |
InternalError | Certaines situations inattendues côté serveur ont été déclenchées. | 1. Vous pouvez réessayer plusieurs fois après une courte période pour voir si le problème se reproduit. 2. Si le problème persiste, contactez le support Azure. |
ServerBusy | Le côté serveur ne peut pas traiter la demande temporairement. | 1. Vous pouvez réessayer plusieurs fois après une courte période pour voir si le problème se reproduit. 2. Si le problème persiste, contactez le support Azure. |
TooManyRequests | Le RPS actuel a dépassé le quota de votre référence SKU actuelle. | 1. Consultez la table tarifaire pour comprendre le quota RPS. 2.Contactez le support Azure si vous avez besoin de plus de QPS. |
Journalisation
Cette bibliothèque utilise la bibliothèque de journalisation standard pour la journalisation.
Les informations de base sur les sessions HTTP (URL, en-têtes, etc.) sont enregistrées au INFO
niveau.
La journalisation détaillée DEBUG
de niveau, y compris les corps de requête/réponse et les en-têtes non expurgés, peut être activée sur le client ou par opération avec l’argument logging_enable
mot clé.
Consultez la documentation complète sur la journalisation du KIT de développement logiciel (SDK) avec des exemples ici.
Configuration facultative
Les arguments facultatifs mot clé peuvent être transmis au niveau du client et par opération. La documentation de référence azure-core décrit les configurations disponibles pour les nouvelles tentatives, la journalisation, les protocoles de transport, etc.
Étapes suivantes
Documentation complémentaire
Pour obtenir une documentation plus complète sur Azure Content Safety, consultez la Azure AI Sécurité du Contenu sur docs.microsoft.com.
Contribution
Ce projet accepte les contributions et les suggestions. La plupart des contributions vous demandent d’accepter un contrat de licence de contribution (CLA) déclarant que vous avez le droit de nous accorder, et que vous nous accordez réellement, les droits d’utilisation de votre contribution. Pour plus d’informations, visitez https://cla.microsoft.com.
Quand vous envoyez une demande de tirage (pull request), un bot CLA détermine automatiquement si vous devez fournir un contrat CLA et agrémenter la demande de tirage de façon appropriée (par exemple, avec une étiquette ou un commentaire). Suivez simplement les instructions fournies par le bot. Vous ne devez effectuer cette opération qu’une seule fois sur tous les dépôts utilisant notre contrat CLA.
Ce projet a adopté le Code de conduite Open Source de Microsoft. Pour plus d’informations, consultez la FAQ sur le code de conduite ou contactez opencode@microsoft.com pour toute question ou tout commentaire supplémentaire.
Azure SDK for Python