Condividi tramite


Integrare la comprensione del linguaggio di conversazione con Bot Framework

Un dialogo è l'interazione che si verifica tra le query utente e un'applicazione. La gestione dei dialoghi è il processo che definisce il comportamento automatico che dovrebbe avvenire per le diverse interazioni con i clienti. Anche se la comprensione del linguaggio di conversazione può classificare le finalità ed estrarre informazioni tramite entità, Bot Framework SDK consente di configurare la logica applicata per le risposte restituite.

Questa esercitazione illustra come integrare il proprio progetto CLU (Conversational Language Understanding) per un progetto di prenotazione dei voli in Bot Framework SDK che include tre finalità: Prenota volo, Vedi meteoe Nessuno.

Prerequisiti

  • Creare una risorsa di Linguaggio nel portale di Azure per ottenere la chiave e l'endpoint. Al termine della distribuzione, fare clic su Vai alla risorsa.
    • La chiave e l'endpoint della risorsa creata sono necessari per connettere il bot all'API. La chiave e l'endpoint verranno incollati nel codice riportato di seguito nell'esercitazione.
  • Scaricare l'esempio di CoreBotWithCLU.
    • Clonare l'intero repository di esempi per ottenere l'accesso a questa soluzione.

Importare un progetto nella comprensione del linguaggio di conversazione

  1. Scaricare il file di FlightBooking.json nell'esempio di Core Bot con CLU, nella cartella di Modelli cognitivi.

  2. Accedere a Language Studio e selezionare la risorsa Lingua.

  3. Passare a Conversational Language Understanding e selezionare il servizio. Si accede così alla pagina dei progetti. Selezionare il pulsante Importa accanto al pulsante Crea nuovo progetto. Importare il file di FlightBooking.json con il nome del progetto come FlightBooking. Questo importerà automaticamente il progetto CLU con tutte le finalità, le entità e le espressioni.

    Screenshot che mostra dove importare un file JSON.

  4. Dopo aver caricato il progetto, selezionare Processi di training a sinistra. Premere Avvia un processo di training, specificare il nome del modello v1 e premere Esegui training. Tutte le altre impostazioni, ad esempio Training standard e le impostazioni di valutazione possono essere lasciate così come sono.

    Screenshot della pagina di training in C L U.

  5. Al termine del training, fare clic su Distribuzione di un modello a sinistra. Selezionare Aggiungi distribuzione e creare una nuova distribuzione con il nome Testing e assegnare il modello v1 alla distribuzione.

    Screenshot della pagina di distribuzione all'interno della schermata di distribuzione del modello in C L U.

Aggiornare il file di impostazioni

Ora che il progetto CLU è stato distribuito ed è pronto, aggiornare le impostazioni che si connetteranno alla distribuzione.

Nell'esempio Core Bot aggiornare il appsettings.json con i valori appropriati.

  • Il CluProjectName è FlightBooking.
  • Il CluDeploymentName è Testing
  • CluAPIKey può essere una delle chiavi nella sezione Chiavi ed Endpoint per la Risorsa della lingua nel portale di Azure. È anche possibile copiare la chiave dalla scheda Impostazioni progetto in CLU.
  • CluAPIHostName è l'endpoint disponibile nella sezione Chiavi ed Endpoint per la Risorsa della lingua nel portale di Azure. Notare che il formato deve essere <Language_Resource_Name>.cognitiveservices.azure.com senza https://.
{
  "MicrosoftAppId": "",
  "MicrosoftAppPassword": "",
  "CluProjectName": "",
  "CluDeploymentName": "",
  "CluAPIKey": "",
  "CluAPIHostName": ""
}

Identificare i punti di integrazione

Nell'esempio Core Bot è possibile controllare il file FlightBookingRecognizer.cs. È qui che viene eseguita la chiamata API CLU all'endpoint distribuito per recuperare la stima CLU per finalità ed entità.

        public FlightBookingRecognizer(IConfiguration configuration)
        {
            var cluIsConfigured = !string.IsNullOrEmpty(configuration["CluProjectName"]) && !string.IsNullOrEmpty(configuration["CluDeploymentName"]) && !string.IsNullOrEmpty(configuration["CluAPIKey"]) && !string.IsNullOrEmpty(configuration["CluAPIHostName"]);
            if (cluIsConfigured)
            {
                var cluApplication = new CluApplication(
                    configuration["CluProjectName"],
                    configuration["CluDeploymentName"],
                    configuration["CluAPIKey"],
                    "https://" + configuration["CluAPIHostName"]);
                // Set the recognizer options depending on which endpoint version you want to use.
                var recognizerOptions = new CluOptions(cluApplication)
                {
                    Language = "en"
                };

                _recognizer = new CluRecognizer(recognizerOptions);
            }

Nella cartella Dialoghi individuare il MainDialog che usa quanto segue per eseguire una stima CLU.

            var cluResult = await _cluRecognizer.RecognizeAsync<FlightBooking>(stepContext.Context, cancellationToken);

Segue la logica che determina le operazioni da eseguire con il risultato del CLU.

 switch (cluResult.TopIntent().intent)
            {
                case FlightBooking.Intent.BookFlight:
                    // Initialize BookingDetails with any entities we may have found in the response.
                    var bookingDetails = new BookingDetails()
                    {
                        Destination = cluResult.Entities.toCity,
                        Origin = cluResult.Entities.fromCity,
                        TravelDate = cluResult.Entities.flightDate,
                    };

                    // Run the BookingDialog giving it whatever details we have from the CLU call, it will fill out the remainder.
                    return await stepContext.BeginDialogAsync(nameof(BookingDialog), bookingDetails, cancellationToken);

                case FlightBooking.Intent.GetWeather:
                    // We haven't implemented the GetWeatherDialog so we just display a TODO message.
                    var getWeatherMessageText = "TODO: get weather flow here";
                    var getWeatherMessage = MessageFactory.Text(getWeatherMessageText, getWeatherMessageText, InputHints.IgnoringInput);
                    await stepContext.Context.SendActivityAsync(getWeatherMessage, cancellationToken);
                    break;

                default:
                    // Catch all for unhandled intents
                    var didntUnderstandMessageText = $"Sorry, I didn't get that. Please try asking in a different way (intent was {cluResult.TopIntent().intent})";
                    var didntUnderstandMessage = MessageFactory.Text(didntUnderstandMessageText, didntUnderstandMessageText, InputHints.IgnoringInput);
                    await stepContext.Context.SendActivityAsync(didntUnderstandMessage, cancellationToken);
                    break;
            }

Eseguire il bot nell’ambiente locale

Eseguire l'esempio in locale nel computer OPPURE eseguire il bot da un terminale o da Visual Studio:

Eseguire il bot da un terminale

Da un terminale passare alla cartella cognitive-service-language-samples/CoreBotWithCLU.

Quindi eseguire il comando seguente

# run the bot
dotnet run

Eseguire il bot in Visual Studio

  1. Avviare Visual Studio
  2. Nel menu di spostamento superiore selezionare File, Apri, quindi Progetto/Soluzione
  3. Passare alla cartella cognitive-service-language-samples/CoreBotWithCLU
  4. Selezionare il file CoreBotCLU.csproj
  5. Premere F5 per eseguire il progetto

Testare il bot usando Bot Framework Emulator

Bot Framework Emulator è un'applicazione desktop che consente agli sviluppatori di bot di eseguire il test e il debug dei bot in localhost o in remoto tramite un tunnel.

Connettersi al bot usando Bot Framework Emulator

  1. Avviare Bot Framework Emulator
  2. Selezionare File, quindi Apri
  3. Immettere un URL Bot di http://localhost:3978/api/messages, premere Connetti e attendere il caricamento
  4. È ora possibile eseguire una query per esempi diversi, ad esempio "Viaggio dal Cairo a Parigi" e osservare i risultati

Se la finalità superiore restituita da CLU viene risolta in "Prenotazione volo". Il bot chiederà altre domande fino ad archiviare le informazioni necessarie per creare una prenotazione di viaggio. A quel punto, restituirà le informazioni su questa prenotazione all'utente.

Passaggi successivi

Altre informazioni sul Bot Framework SDK.