Azure Conversational Language Understanding-klientbibliotek för Python – version 1.1.0
Konversationsbaserade Language Understanding – även kallat CLU för kort – är en molnbaserad KONVERSATIONS-AI-tjänst som tillhandahåller många funktioner för språkförstålelse som:
- Konversationsapp: Den används för att extrahera avsikter och entiteter i konversationer
- Arbetsflödesapp: Fungerar som en dirigerare för att välja den bästa kandidaten för att analysera konversationer för att få bästa svar från appar som Qna, Luis och Konversationsapp
- Sammanfattning av konversationer: Används för att analysera konversationer i form av problem/lösning, kapitelrubrik och narrativa sammanfattningar
Källkod | Paket (PyPI) | Paket (Conda) | API-referensdokumentation | Prover | Produktdokumentation | REST API-dokumentation
Komma igång
Förutsättningar
- Python 3.7 eller senare krävs för att använda det här paketet.
- En Azure-prenumeration
- En språktjänstresurs
Installera paketet
Installera Azure Conversations-klientbiblioteket för Python med pip:
pip install azure-ai-language-conversations
Obs! Den här versionen av klientbiblioteket är som standard 2023-04-01-versionen av tjänsten
Autentisera klienten
För att kunna interagera med CLU-tjänsten måste du skapa en instans av klassen ConversationAnalysisClient eller klassen ConversationAuthoringClient . Du behöver en slutpunkt och en API-nyckel för att instansiera ett klientobjekt. Mer information om autentisering med Cognitive Services finns i Autentisera begäranden till Azure Cognitive Services.
Hämta en API-nyckel
Du kan hämta slutpunkten och en API-nyckel från Cognitive Services-resursen i Azure-portalen.
Du kan också använda Azure CLI-kommandot som visas nedan för att hämta API-nyckeln från Cognitive Service-resursen.
az cognitiveservices account keys list --resource-group <resource-group-name> --name <resource-name>
Skapa KonversationAnalysisClient
När du har fastställt slutpunkten och API-nyckeln kan du instansiera en ConversationAnalysisClient
:
from azure.core.credentials import AzureKeyCredential
from azure.ai.language.conversations import ConversationAnalysisClient
endpoint = "https://<my-custom-subdomain>.cognitiveservices.azure.com/"
credential = AzureKeyCredential("<api-key>")
client = ConversationAnalysisClient(endpoint, credential)
Skapa konversationAuthoringClient
När du har fastställt slutpunkten och API-nyckeln kan du instansiera en ConversationAuthoringClient
:
from azure.core.credentials import AzureKeyCredential
from azure.ai.language.conversations.authoring import ConversationAuthoringClient
endpoint = "https://<my-custom-subdomain>.cognitiveservices.azure.com/"
credential = AzureKeyCredential("<api-key>")
client = ConversationAuthoringClient(endpoint, credential)
Skapa en klient med en Azure Active Directory-autentiseringsuppgift
Om du vill använda en AAD-tokenautentisering (Azure Active Directory) anger du en instans av önskad typ av autentiseringsuppgifter som hämtats från azure-identity-biblioteket . Observera att regionala slutpunkter inte stöder AAD-autentisering. Skapa ett anpassat underdomännamn för resursen för att använda den här typen av autentisering.
Autentisering med AAD kräver viss inledande konfiguration:
- Installera azure-identity
- Registrera ett nytt AAD-program
- Bevilja åtkomst till språktjänsten genom att tilldela rollen "Cognitive Services Language Reader" till tjänstens huvudnamn.
Efter installationen kan du välja vilken typ av autentiseringsuppgifter från azure.identity som ska användas. Till exempel kan DefaultAzureCredential användas för att autentisera klienten:
Ange värdena för klient-ID, klient-ID och klienthemlighet för AAD-programmet som miljövariabler: AZURE_CLIENT_ID
, AZURE_TENANT_ID
, AZURE_CLIENT_SECRET
Använd den returnerade tokenautentiseringsuppgiften för att autentisera klienten:
from azure.ai.language.conversations import ConversationAnalysisClient
from azure.identity import DefaultAzureCredential
credential = DefaultAzureCredential()
client = ConversationAnalysisClient(endpoint="https://<my-custom-subdomain>.cognitiveservices.azure.com/", credential=credential)
Viktiga begrepp
ConversationAnalysisClient
ConversationAnalysisClient är det primära gränssnittet för att göra förutsägelser med dina distribuerade konversationsmodeller. För asynkrona åtgärder finns en asynkron azure.ai.language.conversation.aio
i ConversationAnalysisClient
namnområdet.
ConversationAuthoringClient
Du kan använda ConversationAuthoringClient för att interagera med Azure Language Portal för att utföra redigeringsåtgärder på din språkresurs/ditt projekt. Du kan till exempel använda det för att skapa ett projekt, fylla i med träningsdata, träna, testa och distribuera. För asynkrona åtgärder finns en asynkron azure.ai.language.conversation.authoring.aio
i ConversationAuthoringClient
namnområdet.
Exempel
Klientbiblioteket azure-ai-language-conversation
innehåller både synkrona och asynkrona API:er.
I följande exempel visas vanliga scenarier med hjälp av ovanståendeclient
.
Analysera text med en konversationsapp
Om du vill extrahera anpassade avsikter och entiteter från ett användaryttrande kan du anropa metoden med konversationens client.analyze_conversation()
projektnamn på följande sätt:
# import libraries
import os
from azure.core.credentials import AzureKeyCredential
from azure.ai.language.conversations import ConversationAnalysisClient
# get secrets
clu_endpoint = os.environ["AZURE_CONVERSATIONS_ENDPOINT"]
clu_key = os.environ["AZURE_CONVERSATIONS_KEY"]
project_name = os.environ["AZURE_CONVERSATIONS_PROJECT_NAME"]
deployment_name = os.environ["AZURE_CONVERSATIONS_DEPLOYMENT_NAME"]
# analyze quey
client = ConversationAnalysisClient(clu_endpoint, AzureKeyCredential(clu_key))
with client:
query = "Send an email to Carol about the tomorrow's demo"
result = client.analyze_conversation(
task={
"kind": "Conversation",
"analysisInput": {
"conversationItem": {
"participantId": "1",
"id": "1",
"modality": "text",
"language": "en",
"text": query
},
"isLoggingEnabled": False
},
"parameters": {
"projectName": project_name,
"deploymentName": deployment_name,
"verbose": True
}
}
)
# view result
print("query: {}".format(result["result"]["query"]))
print("project kind: {}\n".format(result["result"]["prediction"]["projectKind"]))
print("top intent: {}".format(result["result"]["prediction"]["topIntent"]))
print("category: {}".format(result["result"]["prediction"]["intents"][0]["category"]))
print("confidence score: {}\n".format(result["result"]["prediction"]["intents"][0]["confidenceScore"]))
print("entities:")
for entity in result["result"]["prediction"]["entities"]:
print("\ncategory: {}".format(entity["category"]))
print("text: {}".format(entity["text"]))
print("confidence score: {}".format(entity["confidenceScore"]))
if "resolutions" in entity:
print("resolutions")
for resolution in entity["resolutions"]:
print("kind: {}".format(resolution["resolutionKind"]))
print("value: {}".format(resolution["value"]))
if "extraInformation" in entity:
print("extra info")
for data in entity["extraInformation"]:
print("kind: {}".format(data["extraInformationKind"]))
if data["extraInformationKind"] == "ListKey":
print("key: {}".format(data["key"]))
if data["extraInformationKind"] == "EntitySubtype":
print("value: {}".format(data["value"]))
Analysera text med en orkestreringsapp
Om du vill skicka användaryttrandet till din orchestrator-app (worflow) kan du anropa client.analyze_conversation()
metoden med orkestreringens projektnamn. Orchestrator-projektet samordnar helt enkelt det skickade användaryttrandet mellan dina språkappar (Luis, Konversation och Frågesvar) för att få det bästa svaret enligt användarens avsikt. Se nästa exempel:
# import libraries
import os
from azure.core.credentials import AzureKeyCredential
from azure.ai.language.conversations import ConversationAnalysisClient
# get secrets
clu_endpoint = os.environ["AZURE_CONVERSATIONS_ENDPOINT"]
clu_key = os.environ["AZURE_CONVERSATIONS_KEY"]
project_name = os.environ["AZURE_CONVERSATIONS_WORKFLOW_PROJECT_NAME"]
deployment_name = os.environ["AZURE_CONVERSATIONS_WORKFLOW_DEPLOYMENT_NAME"]
# analyze query
client = ConversationAnalysisClient(clu_endpoint, AzureKeyCredential(clu_key))
with client:
query = "Reserve a table for 2 at the Italian restaurant"
result = client.analyze_conversation(
task={
"kind": "Conversation",
"analysisInput": {
"conversationItem": {
"participantId": "1",
"id": "1",
"modality": "text",
"language": "en",
"text": query
},
"isLoggingEnabled": False
},
"parameters": {
"projectName": project_name,
"deploymentName": deployment_name,
"verbose": True
}
}
)
# view result
print("query: {}".format(result["result"]["query"]))
print("project kind: {}\n".format(result["result"]["prediction"]["projectKind"]))
# top intent
top_intent = result["result"]["prediction"]["topIntent"]
print("top intent: {}".format(top_intent))
top_intent_object = result["result"]["prediction"]["intents"][top_intent]
print("confidence score: {}".format(top_intent_object["confidenceScore"]))
print("project kind: {}".format(top_intent_object["targetProjectKind"]))
if top_intent_object["targetProjectKind"] == "Luis":
print("\nluis response:")
luis_response = top_intent_object["result"]["prediction"]
print("top intent: {}".format(luis_response["topIntent"]))
print("\nentities:")
for entity in luis_response["entities"]:
print("\n{}".format(entity))
Konversationssammanfattning
Du kan använda det här exemplet om du behöver sammanfatta en konversation i form av ett problem och en slutlig lösning. Till exempel en dialogruta från teknisk support:
# import libraries
import os
from azure.core.credentials import AzureKeyCredential
from azure.ai.language.conversations import ConversationAnalysisClient
# get secrets
endpoint = os.environ["AZURE_CONVERSATIONS_ENDPOINT"]
key = os.environ["AZURE_CONVERSATIONS_KEY"]
# analyze query
client = ConversationAnalysisClient(endpoint, AzureKeyCredential(key))
with client:
poller = client.begin_conversation_analysis(
task={
"displayName": "Analyze conversations from xxx",
"analysisInput": {
"conversations": [
{
"conversationItems": [
{
"text": "Hello, how can I help you?",
"modality": "text",
"id": "1",
"participantId": "Agent"
},
{
"text": "How to upgrade Office? I am getting error messages the whole day.",
"modality": "text",
"id": "2",
"participantId": "Customer"
},
{
"text": "Press the upgrade button please. Then sign in and follow the instructions.",
"modality": "text",
"id": "3",
"participantId": "Agent"
}
],
"modality": "text",
"id": "conversation1",
"language": "en"
},
]
},
"tasks": [
{
"taskName": "Issue task",
"kind": "ConversationalSummarizationTask",
"parameters": {
"summaryAspects": ["issue"]
}
},
{
"taskName": "Resolution task",
"kind": "ConversationalSummarizationTask",
"parameters": {
"summaryAspects": ["resolution"]
}
},
]
}
)
# view result
result = poller.result()
task_results = result["tasks"]["items"]
for task in task_results:
print(f"\n{task['taskName']} status: {task['status']}")
task_result = task["results"]
if task_result["errors"]:
print("... errors occurred ...")
for error in task_result["errors"]:
print(error)
else:
conversation_result = task_result["conversations"][0]
if conversation_result["warnings"]:
print("... view warnings ...")
for warning in conversation_result["warnings"]:
print(warning)
else:
summaries = conversation_result["summaries"]
print("... view task result ...")
for summary in summaries:
print(f"{summary['aspect']}: {summary['text']}")
Importera ett konversationsprojekt
Det här exemplet visar ett vanligt scenario för redigeringsdelen av SDK:t
import os
from azure.core.credentials import AzureKeyCredential
from azure.ai.language.conversations.authoring import ConversationAuthoringClient
clu_endpoint = os.environ["AZURE_CONVERSATIONS_ENDPOINT"]
clu_key = os.environ["AZURE_CONVERSATIONS_KEY"]
project_name = "test_project"
exported_project_assets = {
"projectKind": "Conversation",
"intents": [{"category": "Read"}, {"category": "Delete"}],
"entities": [{"category": "Sender"}],
"utterances": [
{
"text": "Open Blake's email",
"dataset": "Train",
"intent": "Read",
"entities": [{"category": "Sender", "offset": 5, "length": 5}],
},
{
"text": "Delete last email",
"language": "en-gb",
"dataset": "Test",
"intent": "Delete",
"entities": [],
},
],
}
client = ConversationAuthoringClient(
clu_endpoint, AzureKeyCredential(clu_key)
)
poller = client.begin_import_project(
project_name=project_name,
project={
"assets": exported_project_assets,
"metadata": {
"projectKind": "Conversation",
"settings": {"confidenceThreshold": 0.7},
"projectName": "EmailApp",
"multilingual": True,
"description": "Trying out CLU",
"language": "en-us",
},
"projectFileVersion": "2022-05-01",
},
)
response = poller.result()
print(response)
Valfri konfiguration
Valfria nyckelordsargument kan skickas på klient- och åtgärdsnivå. Referensdokumentationen för azure-core beskriver tillgängliga konfigurationer för återförsök, loggning, transportprotokoll med mera.
Felsökning
Allmänt
Konversationsklienten genererar undantag som definierats i Azure Core.
Loggning
Det här biblioteket använder standardloggningsbiblioteket för loggning. Grundläggande information om HTTP-sessioner (URL:er, rubriker osv.) loggas på INFO-nivå.
Detaljerad loggning på FELSÖKNINGsnivå, inklusive begärande-/svarskroppar och oredigerade huvuden, kan aktiveras på en klient med logging_enable
argumentet .
Se fullständig dokumentation om SDK-loggning med exempel här.
import sys
import logging
from azure.core.credentials import AzureKeyCredential
from azure.ai.language.conversations import ConversationAnalysisClient
# Create a logger for the 'azure' SDK
logger = logging.getLogger('azure')
logger.setLevel(logging.DEBUG)
# Configure a console output
handler = logging.StreamHandler(stream=sys.stdout)
logger.addHandler(handler)
endpoint = "https://<my-custom-subdomain>.cognitiveservices.azure.com/"
credential = AzureKeyCredential("<my-api-key>")
# This client will log detailed information about its HTTP sessions, at DEBUG level
client = ConversationAnalysisClient(endpoint, credential, logging_enable=True)
result = client.analyze_conversation(...)
logging_enable
På samma sätt kan du aktivera detaljerad loggning för en enda åtgärd, även om den inte är aktiverad för klienten:
result = client.analyze_conversation(..., logging_enable=True)
Nästa steg
Mer exempelkod
Se README-exempel för flera kodfragment som illustrerar vanliga mönster som används i CLU Python-API:et.
Bidra
Mer information om hur du skapar, testar och bidrar till det här biblioteket finns i CONTRIBUTING.md .
Det här projektet välkomnar bidrag och förslag. Merparten av bidragen kräver att du godkänner ett licensavtal för bidrag, där du deklarerar att du har behörighet att bevilja oss rättigheten att använda ditt bidrag, och att du dessutom uttryckligen gör så. Mer information finns i cla.microsoft.com.
När du skickar en pull-förfrågan avgör en CLA-robot automatiskt om du måste tillhandahålla ett licensavtal för bidrag med lämplig PR (t.ex. etikett eller kommentar). Följ bara robotens anvisningar. Du behöver bara göra detta en gång för alla repor som använder vårt licensavtal för bidrag.
Det här projektet använder sig av Microsofts uppförandekod för öppen källkod. Mer information finns i Vanliga frågor och svar om uppförandekod eller kontakt opencode@microsoft.com med ytterligare frågor eller kommentarer.
Azure SDK for Python