1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
|
# coding=utf-8
# ------------------------------------
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.
# ------------------------------------
"""
FILE: sample_orchestration_prediction.py
DESCRIPTION:
This sample demonstrates how to analyze a user query using an orchestration project.
In this sample, the orchestration project's top intent routes to a QnA project.
USAGE:
python sample_orchestration_prediction.py
REQUIRED ENV VARS (for AAD / DefaultAzureCredential):
AZURE_CONVERSATIONS_ENDPOINT
AZURE_CLIENT_ID
AZURE_TENANT_ID
AZURE_CLIENT_SECRET
AZURE_CONVERSATIONS_PROJECT_NAME
AZURE_CONVERSATIONS_DEPLOYMENT_NAME
NOTE:
If you want to use AzureKeyCredential instead, set:
- AZURE_CONVERSATIONS_ENDPOINT
- AZURE_CONVERSATIONS_KEY
- AZURE_CONVERSATIONS_PROJECT_NAME
- AZURE_CONVERSATIONS_DEPLOYMENT_NAME
"""
# [START orchestration_prediction]
import os
from azure.identity import DefaultAzureCredential
from azure.ai.language.conversations import ConversationAnalysisClient
from azure.ai.language.conversations.models import (
ConversationActionContent,
ConversationAnalysisInput,
TextConversationItem,
StringIndexType,
ConversationLanguageUnderstandingInput,
OrchestrationPrediction,
QuestionAnsweringTargetIntentResult,
ConversationActionResult,
)
def sample_orchestration_prediction():
# settings
endpoint = os.environ["AZURE_CONVERSATIONS_ENDPOINT"]
project_name = os.environ["AZURE_CONVERSATIONS_PROJECT_NAME"]
deployment_name = os.environ["AZURE_CONVERSATIONS_DEPLOYMENT_NAME"]
credential = DefaultAzureCredential()
client = ConversationAnalysisClient(endpoint, credential=credential)
# Build request using strongly-typed models
data = ConversationLanguageUnderstandingInput(
conversation_input=ConversationAnalysisInput(
conversation_item=TextConversationItem(
id="1",
participant_id="participant1",
text="How are you?",
)
),
action_content=ConversationActionContent(
project_name=project_name,
deployment_name=deployment_name,
string_index_type=StringIndexType.UTF16_CODE_UNIT,
),
)
# Call sync API
response = client.analyze_conversation(data)
# Narrow to expected result types
if isinstance(response, ConversationActionResult):
pred = response.result.prediction
if isinstance(pred, OrchestrationPrediction):
# Top intent name is the routed project name
top_intent = pred.top_intent
if not top_intent:
print("No top intent was returned by orchestration.")
return
print(f"Top intent (responding project): {top_intent}")
# Look up the routed target result
target_intent_result = pred.intents.get(top_intent)
if not isinstance(target_intent_result, QuestionAnsweringTargetIntentResult):
print("Top intent did not route to a Question Answering result.")
return
qa = target_intent_result.result
if qa is not None and qa.answers is not None:
for ans in qa.answers:
print(ans.answer or "")
else:
print("Prediction was not an OrchestrationPrediction.")
else:
print("Unexpected result type from analyze_conversation.")
# [END orchestration_prediction]
def main():
sample_orchestration_prediction()
if __name__ == "__main__":
main()
|