libreria client Sicurezza dei contenuti di Azure AI per Python - versione 1.0.0
Sicurezza dei contenuti di Azure AI rileva contenuti dannosi generati dall'utente e generati dall'intelligenza artificiale in applicazioni e servizi. Content Safety include API di testo e immagine che consentono di rilevare materiale dannoso:
- API Analisi del testo: analizza il testo per contenuti sessuali, violenza, odio e autolesionismo con livelli di gravità multipla.
- API Analisi immagini: analizza immagini per contenuti sessuali, violenza, odio e autolesionismo con livelli di gravità multipla.
- API di gestione blocklist di testo: i classificatori di intelligenza artificiale predefiniti sono sufficienti per la maggior parte delle esigenze di sicurezza dei contenuti; Potrebbe tuttavia essere necessario visualizzare una schermata per i termini specifici del caso d'uso. È possibile creare elenchi bloccati di termini da usare con l'API Text.
Documentazione
Sono disponibili varie documentazioni per iniziare
Introduzione
Prerequisiti
- Python 3.7 o versione successiva è necessario per usare questo pacchetto.
- Per usare questo pacchetto è necessaria una sottoscrizione di Azure .
- Una risorsa Sicurezza dei contenuti di Azure AI, se nessuna risorsa esistente, è possibile crearne una nuova.
Installare il pacchetto
pip install azure-ai-contentsafety
Autenticare il client
Ottenere l'endpoint
È possibile trovare l'endpoint per la risorsa del servizio Sicurezza dei contenuti di Azure AI usando il portale di Azure o l'interfaccia della riga di comando di Azure:
# 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"
Creare un oggetto ContentSafetyClient/BlocklistClient con la chiave API
Per usare una chiave API come credential
parametro.
Passaggio 1: Ottenere la chiave API. La chiave API è disponibile nel portale di Azure o eseguendo il comando seguente dell'interfaccia della riga di comando di Azure :
az cognitiveservices account keys list --name "<resource-name>" --resource-group "<resource-group-name>"
Passaggio 2: Passare la chiave come stringa in un'istanza di
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)
Creare un oggetto ContentSafetyClient/BlocklistClient con credenziali del token ID Microsoft Entra
Passaggio 1: Abilitare Microsoft Entra ID per la risorsa. Fare riferimento a questo documento Eseguire l'autenticazione con Microsoft Entra ID per i passaggi per abilitare Microsoft Entra ID per la risorsa.
I passaggi principali sono:
- Creare una risorsa con un sottodominio personalizzato.
- Creare un'entità servizio e assegnarvi il ruolo utente servizi cognitivi.
Passaggio 2: Impostare i valori dell'ID client, dell'ID tenant e del segreto client dell'applicazione Microsoft Entra come variabili di ambiente:
AZURE_CLIENT_ID
, ,AZURE_TENANT_ID
AZURE_CLIENT_SECRET
.DefaultAzureCredential userà i valori di queste variabili di ambiente.
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)
Concetti chiave
Funzionalità disponibili
Esistono diversi tipi di analisi disponibili da questo servizio. La tabella seguente descrive le API attualmente disponibili.
Funzionalità | Descrizione |
---|---|
API Analisi del testo | Analizza il testo per contenuti sessuali, violenza, odio e autolesionismo con livelli di gravità multipla. |
API di analisi delle immagini | Analizza le immagini per contenuti sessuali, violenza, odio e autolesionismo con livelli di gravità multipla. |
API di gestione dell'elenco di blocchi di testo | I classificatori di intelligenza artificiale predefiniti sono sufficienti per la maggior parte delle esigenze di sicurezza dei contenuti. Tuttavia, potrebbe essere necessario visualizzare la schermata per i termini specifici del caso d'uso. È possibile creare elenchi bloccati di termini da usare con l'API Text. |
Categorie di danni
Content Safety riconosce quattro categorie distinte di contenuto discutibile.
Category | Descrizione |
---|---|
Odio | I danni correlati all'odio e all'equità fanno riferimento a qualsiasi contenuto che attacca o usa linguaggio pejorative o discriminatorio con riferimento a una persona o a un gruppo di identità basato su determinati attributi differenzianti di questi gruppi, tra cui razza, etnia, nazionalità, identità di genere ed espressione, orientamento sessuale, religione, stato di immigrazione, stato di abilità, aspetto personale e dimensioni del corpo. |
Sessuale | Il linguaggio sessuale descrive il linguaggio correlato a organi anatomici e genitali, relazioni romantiche, atti interpretati in termini erotici o affettuosi, gravidanza, atti sessuali fisici, compresi quelli rappresentati come un assalto o un atto violento sessuale forzato contro la volontà, la prostituzione, la pornografia e l'abuso. |
Violenza | La violenza descrive il linguaggio correlato alle azioni fisiche destinate a ferire, ferire, danneggiare o uccidere qualcuno o qualcosa del genere; descrive armi, armi e entità correlate, ad esempio produttori, associazioni, legislazione e così via. |
Autolesionismo | L'autolesionismo descrive il linguaggio correlato alle azioni fisiche destinate a ferire intenzionalmente, ferire, danneggiare il corpo o uccidersi. |
La classificazione può essere con etichetta multipla. Ad esempio, quando un campione di testo passa attraverso il modello di moderazione del testo, può essere classificato come contenuto sessuale e violenza.
Livelli di gravità
Ogni categoria di danni applicata dal servizio include anche una classificazione del livello di gravità. Il livello di gravità è destinato a indicare la gravità delle conseguenze della visualizzazione del contenuto contrassegnato.
Testo: la versione corrente del modello di testo supporta la scala di gravità completa di 0-7. Per impostazione predefinita, la risposta restituirà 4 valori: 0, 2, 4 e 6. Ogni due livelli adiacenti viene mappato a un singolo livello. Gli utenti possono usare "outputType" nella richiesta e impostarlo come "EightSeverityLevels" per ottenere 8 valori nell'output: 0,1,2,3,4,5,6,7. Per informazioni dettagliate, è possibile fare riferimento alle definizioni dei livelli di gravità del contenuto del testo .
- [0,1] -> 0
- [2,3] -> 2
- [4,5] -> 4
- [6,7] -> 6
Immagine: la versione corrente del modello di immagine supporta la versione ridotta della scala di gravità completa di 0-7. Il classificatore restituisce solo i livelli di gravità 0, 2, 4 e 6; ognuno dei due livelli adiacenti viene mappato a un singolo livello. Per informazioni dettagliate, è possibile fare riferimento alle definizioni dei livelli di gravità del contenuto dell'immagine .
- [0,1] -> 0
- [2,3] -> 2
- [4,5] -> 4
- [6,7] -> 6
Gestione degli elenchi di blocchi di testo
Per gestire l'elenco di blocchi di testo sono supportate le operazioni seguenti:
- Creare o modificare un elenco di blocchi
- Elencare tutti gli elenchi bloccati
- Ottenere un elenco di blocchi per blocklistName
- Aggiungere blocklistItems a un elenco di blocchi
- Rimuovere blocklistItems da un elenco di blocchi
- Elencare tutti gli elementi blocklist in un elenco di blocchi per blocklistName
- Ottenere un blocklistItem in un elenco di blocchi per blocklistItemId e blocklistName
- Eliminare un elenco di blocchi e tutti i relativi blocklistItems
È possibile impostare gli elenchi di blocchi da usare per l'analisi del testo, quindi è possibile ottenere il risultato della corrispondenza dell'elenco di blocchi dalla risposta restituita.
Esempio
La sezione seguente fornisce diversi frammenti di codice che illustrano alcune delle attività più comuni del servizio Content Safety, tra cui:
Fare riferimento ai dati di esempio usati qui. Per altri esempi, vedere esempi.
Analizzare il testo
Analizzare il testo senza elenchi di blocchi
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}")
Analizzare il testo con elenchi di blocchi
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
Analizzare l'immagine
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}")
Gestire l'elenco dei blocchi di testo
Creare o aggiornare l'elenco di blocchi di testo
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
Elencare elenchi di blocchi di testo
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
Ottenere l'elenco dei blocchi di testo
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
Eliminare l'elenco di blocchi di testo
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
Aggiungere 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
List 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
Get 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
Rimuovere 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
Risoluzione dei problemi
Generale
Sicurezza dei contenuti di Azure AI libreria client genererà eccezioni definite in Azure Core. I codici di errore sono definiti di seguito:
Codice di errore | Motivi possibili | Suggerimenti |
---|---|---|
InvalidRequestBody | Uno o più campi nel corpo della richiesta non corrispondono alla definizione dell'API. | 1. Controllare la versione dell'API specificata nella chiamata API. 2. Controllare la definizione API corrispondente per la versione dell'API selezionata. |
InvalidResourceName | Il nome della risorsa specificato nell'URL non soddisfa i requisiti, ad esempio il nome dell'elenco di blocchi, l'ID termine blocklist e così via. | 1. Controllare la versione dell'API specificata nella chiamata API. 2. Verificare se il nome specificato ha caratteri non validi in base alla definizione dell'API. |
ResourceNotFound | La risorsa specificata nell'URL potrebbe non esistere, ad esempio il nome dell'elenco di blocchi. | 1. Controllare la versione dell'API specificata nella chiamata API. 2. Controllare doppiamente l'esistenza della risorsa specificata nell'URL. |
InternalError | Alcune situazioni impreviste sul lato server sono state attivate. | 1. È possibile riprovare qualche volta dopo un piccolo periodo e vedere che il problema si verifica di nuovo. 2. Contattare il supporto tecnico di Azure se questo problema persiste. |
ServerBusy | Il lato server non può elaborare temporaneamente la richiesta. | 1. È possibile riprovare qualche volta dopo un piccolo periodo e vedere che il problema si verifica di nuovo. 2.Contattare il supporto tecnico di Azure se questo problema persiste. |
TooManyRequests | Il servizio RPS corrente ha superato la quota per lo SKU corrente. | 1. Controllare la tabella dei prezzi per comprendere la quota RPS. 2.Contattare il supporto tecnico di Azure se è necessario più QPS. |
Registrazione
Questa libreria usa la libreria di registrazione standard per la registrazione.
Le informazioni di base sulle sessioni HTTP (URL, intestazioni e così via) vengono registrate a INFO
livello.
La registrazione dettagliata DEBUG
a livello, inclusi i corpi di richiesta/risposta e le intestazioni non contrassegnate , può essere abilitata nel client o per operazione con l'argomento logging_enable
parola chiave.
Vedere la documentazione completa sulla registrazione sdk con esempi qui.
Configurazione facoltativa
Gli argomenti delle parole chiave facoltativi possono essere passati al client e a livello di operazione. La documentazione di riferimento di azure-core descrive le configurazioni disponibili per tentativi, registrazione, protocolli di trasporto e altro ancora.
Passaggi successivi
Documentazione aggiuntiva
Per una documentazione più completa sulla sicurezza dei contenuti di Azure, vedere l'Sicurezza dei contenuti di Azure AI su docs.microsoft.com.
Contributo
In questo progetto sono benvenuti i contributi e i suggerimenti. Per la maggior parte dei contenuti è necessario sottoscrivere un contratto di licenza di collaborazione (CLA, Contributor License Agreement) che stabilisce che l'utente ha il diritto di concedere, e di fatto concede a Microsoft i diritti d'uso del suo contributo. Per informazioni dettagliate, vedere https://cla.microsoft.com.
Quando si invia una richiesta pull, un bot CLA determina automaticamente se è necessario specificare un contratto CLA e completare la richiesta pull in modo appropriato (ad esempio con un'etichetta e un commento). Seguire le istruzioni specificate dal bot. È sufficiente eseguire questa operazione una sola volta per tutti i repository che usano il contratto CLA Microsoft.
Questo progetto ha adottato il Codice di comportamento di Microsoft per l'open source. Per altre informazioni, vedere Code of Conduct FAQ (Domande frequenti sul Codice di comportamento) oppure contattare opencode@microsoft.com per eventuali altre domande o commenti.
Azure SDK for Python