Dodawanie rozumienia języka naturalnego do bota

DOTYCZY: ZESTAW SDK w wersji 4

Uwaga

Usługa Language Understanding (LUIS) zostanie wycofana 1 października 2025 r. Od 1 kwietnia 2023 r. nie będzie można tworzyć nowych zasobów usługi LUIS. Nowsza wersja interpretacji języka jest teraz dostępna w ramach języka sztucznej inteligencji platformy Azure.

Język konwersacyjny (CLU), funkcja języka AI platformy Azure, to zaktualizowana wersja usługi LUIS. Aby uzyskać więcej informacji na temat obsługi języka w zestawie SDK platformy Bot Framework, zobacz Opis języka naturalnego.

Możliwość zrozumienia, co użytkownik oznacza konwersację i kontekstowo, może być trudnym zadaniem, ale może zapewnić botowi bardziej naturalne uczucie konwersacji. Language Understanding (LUIS) to oparta na chmurze usługa interfejsu API, która umożliwia wykonanie tych czynności, dzięki czemu bot może rozpoznać intencję komunikatów użytkownika, umożliwić uzyskanie większego języka naturalnego od użytkownika i lepsze kierowanie przepływu konwersacji.

W tym temacie opisano proces dodawania usługi LUIS do aplikacji rezerwacji lotów w celu rozpoznawania różnych intencji i jednostek zawartych w danych wejściowych użytkownika.

Uwaga

Zestawy SDK języka JavaScript, C# i Python platformy Bot Framework będą nadal obsługiwane, jednak zestaw SDK języka Java jest wycofywany z ostatecznym długoterminowym wsparciem kończącym się w listopadzie 2023 r. Zostaną podjęte tylko krytyczne poprawki zabezpieczeń i usterek w tym repozytorium.

Istniejące boty utworzone za pomocą zestawu JAVA SDK będą nadal działać.

W przypadku tworzenia nowego bota rozważ użycie agentów usługi Power Virtual Agents i przeczytaj o wyborze odpowiedniego rozwiązania czatbota.

Aby uzyskać więcej informacji, zobacz Przyszłość tworzenia botów.

Wymagania wstępne

Informacje o tym przykładzie

Ten podstawowy przykład bota przedstawia przykład aplikacji do rezerwacji lotów lotniskowych. Używa ona usługi LUIS do rozpoznawania danych wejściowych użytkownika i zwracania rozpoznanej intencji usługi LUIS.

Model językowy zawiera trzy intencje: Book Flight, Canceli None. Usługa LUIS użyje tych intencji, aby zrozumieć, co oznacza użytkownik podczas wysyłania komunikatu do bota. Model językowy definiuje również jednostki, które usługa LUIS może wyodrębnić z danych wejściowych użytkownika, takich jak lotnisko początkowe lub docelowe.

Po każdym przetworzeniu danych wejściowych DialogBot użytkownika zapisze bieżący stan zarówno , jak UserState i ConversationState. Po zebraniu wszystkich wymaganych informacji przykład kodu tworzy rezerwację rezerwacji lotów demonstracyjnych. W tym artykule omówimy aspekty usługi LUIS w tym przykładzie. Jednak ogólny przepływ próbki to:

  • OnMembersAddedAsync jest wywoływany, gdy nowy użytkownik jest połączony i wyświetla kartę powitalną.
  • OnMessageActivityAsync parametr jest wywoływany dla każdego odebranych danych wejściowych użytkownika.

Class diagram outlining the structure of the C# sample.

Moduł OnMessageActivityAsync uruchamia odpowiednie okno dialogowe za pomocą metody rozszerzenia okna dialogowego Run . Następnie główne okno dialogowe wywołuje pomocnika usługi LUIS, aby znaleźć intencję użytkownika oceniającego. Jeśli górna intencja danych wejściowych użytkownika zwraca wartość "BookFlight", pomocnik wypełnia informacje od użytkownika zwróconego przez usługę LUIS. Następnie główne okno dialogowe uruchamia BookingDialogelement , który uzyskuje dodatkowe informacje zgodnie z potrzebami od użytkownika, takie jak:

  • Origin miasto źródłowe
  • TravelDate data rezerwacji lotu
  • Destination miasto docelowe

W tym artykule opisano sposób dodawania usługi LUIS do bota. Aby uzyskać informacje o korzystaniu z okien dialogowych lub stanu, zobacz, jak zebrać dane wejściowe użytkownika przy użyciu monitu dialogowego lub zapisać odpowiednio dane użytkownika i konwersacji.

Tworzenie aplikacji usługi LUIS w portalu usługi LUIS

  1. Zaloguj się do portalu usługi LUIS i w razie potrzeby utwórz konto i zasób tworzenia.
  2. Na stronie Aplikacje konwersacji w usłudze LUIS wybierz pozycję Importuj, a następnie pozycję Importuj jako kod JSON.
  3. W oknie dialogowym Importowanie nowej aplikacji :
    1. Wybierz plik FlightBooking.json w folderze CognitiveModels przykładu.
    2. Wprowadź FlightBooking jako opcjonalną nazwę aplikacji, a następnie wybierz pozycję Gotowe.
  4. W witrynie można wyświetlić okno dialogowe Jak utworzyć efektywną aplikację usługi LUIS i uaktualnić jednostki złożone. Możesz odrzucić te okna dialogowe i kontynuować.
  5. Wytrenuj aplikację, a następnie opublikuj aplikację w środowisku produkcyjnym . Aby uzyskać więcej informacji, zobacz dokumentację usługi LUIS dotyczącą sposobu trenowania i publikowania aplikacji.

Dlaczego warto używać jednostek

Jednostki usługi LUIS umożliwiają botowi zrozumienie zdarzeń poza standardowymi intencjami. Dzięki temu można zbierać od użytkowników dodatkowe informacje, dzięki czemu bot może zadawać pytania i reagować inteligentniej. Wraz z definicjami dla trzech intencji usługi LUIS "Book Flight", "Cancel" i "None", plik FlightBooking.json zawiera również zestaw jednostek, takich jak "From.Airport" i "To.Airport". Te jednostki umożliwiają usłudze LUIS wykrywanie i zwracanie dodatkowych informacji zawartych w oryginalnych danych wejściowych użytkownika podczas żądania nowej rezerwacji podróży.

Uzyskiwanie wartości w celu nawiązania połączenia z aplikacją usługi LUIS

Po opublikowaniu aplikacji LUIS możesz uzyskać do niej dostęp z bota. Aby uzyskać dostęp do aplikacji usługi LUIS z poziomu bota, musisz zarejestrować kilka wartości. Te informacje można pobrać za pomocą portalu usługi LUIS.

Pobieranie informacji o aplikacji z portalu LUIS.ai

Plik ustawień (appsettings.json.envlub config.py) działa jako miejsce, aby połączyć wszystkie odwołania do usługi w jednym miejscu. Pobrane informacje zostaną dodane do tego pliku w następnej sekcji.

  1. Wybierz opublikowaną aplikację usługi LUIS z luis.ai.

  2. Po otwarciu opublikowanej aplikacji LUIS wybierz kartę ZARZĄDZAJ .

  3. Wybierz kartę Ustawienia po lewej stronie i zapisz wartość wyświetlaną dla pozycji Identyfikator aplikacji jako <YOUR_APP_ID>.

    Screenshot of the Manage page displaying your application ID.

  4. Wybierz pozycję Zasoby platformy Azure, a następnie zasób przewidywania. Zapisz wartość wyświetlaną dla pozycji Lokalizacja jako <YOUR_REGION> i Klucz podstawowy jako <YOUR_AUTHORING_KEY>.

    Screenshot of the Manage page displaying your location and primary key.

    Alternatywnie możesz użyć regionu i klucza podstawowego dla zasobu tworzenia.

Aktualizowanie pliku ustawień

Dodaj informacje wymagane do uzyskania dostępu do aplikacji luis, w tym identyfikator aplikacji, klucz tworzenia i region do appsettings.json pliku. W poprzednim kroku pobrano te wartości z opublikowanej aplikacji usługi LUIS. Nazwa hosta interfejsu API powinna mieć format <your region>.api.cognitive.microsoft.com.

appsetting.json

{
  "MicrosoftAppType": "",
  "MicrosoftAppId": "",
  "MicrosoftAppPassword": "",
  "MicrosoftAppTenantId": "",
  "LuisAppId": "",
  "LuisAPIKey": "",
  "LuisAPIHostName": ""
}

Konfigurowanie bota do korzystania z aplikacji usługi LUIS

Upewnij się, że pakiet NuGet Microsoft.Bot.Builder.AI.Luis jest zainstalowany dla projektu.

Aby nawiązać połączenie z usługą LUIS, bot pobiera informacje dodane do pliku appsetting.json. Klasa FlightBookingRecognizer zawiera kod z ustawieniami z pliku appsetting.json i wysyła zapytanie do usługi LUIS przez wywołanie RecognizeAsync metody .

FlightBookingRecognizer.cs

public class FlightBookingRecognizer : IRecognizer
{
    private readonly LuisRecognizer _recognizer;

    public FlightBookingRecognizer(IConfiguration configuration)
    {
        var luisIsConfigured = !string.IsNullOrEmpty(configuration["LuisAppId"]) && !string.IsNullOrEmpty(configuration["LuisAPIKey"]) && !string.IsNullOrEmpty(configuration["LuisAPIHostName"]);
        if (luisIsConfigured)
        {
            var luisApplication = new LuisApplication(
                configuration["LuisAppId"],
                configuration["LuisAPIKey"],
                "https://" + configuration["LuisAPIHostName"]);
            // Set the recognizer options depending on which endpoint version you want to use.
            // More details can be found in https://docs.microsoft.com/en-gb/azure/cognitive-services/luis/luis-migration-api-v3
            var recognizerOptions = new LuisRecognizerOptionsV3(luisApplication)
            {
                PredictionOptions = new Bot.Builder.AI.LuisV3.LuisPredictionOptions
                {
                    IncludeInstanceData = true,
                }
            };

            _recognizer = new LuisRecognizer(recognizerOptions);
        }
    }

    // Returns true if luis is configured in the appsettings.json and initialized.
    public virtual bool IsConfigured => _recognizer != null;

    public virtual async Task<RecognizerResult> RecognizeAsync(ITurnContext turnContext, CancellationToken cancellationToken)
        => await _recognizer.RecognizeAsync(turnContext, cancellationToken);

    public virtual async Task<T> RecognizeAsync<T>(ITurnContext turnContext, CancellationToken cancellationToken)
        where T : IRecognizerConvert, new()
        => await _recognizer.RecognizeAsync<T>(turnContext, cancellationToken);
}

Zawiera FlightBookingEx.cs logikę wyodrębniania z, do i travelDate; rozszerza klasę FlightBooking.cs częściową używaną do przechowywania wyników usługi LUIS podczas wywoływania FlightBookingRecognizer.RecognizeAsync<FlightBooking> z klasy MainDialog.cs.

CognitiveModels\FlightBookingEx.cs

// Extends the partial FlightBooking class with methods and properties that simplify accessing entities in the luis results
public partial class FlightBooking
{
    public (string From, string Airport) FromEntities
    {
        get
        {
            var fromValue = Entities?._instance?.From?.FirstOrDefault()?.Text;
            var fromAirportValue = Entities?.From?.FirstOrDefault()?.Airport?.FirstOrDefault()?.FirstOrDefault();
            return (fromValue, fromAirportValue);
        }
    }

    public (string To, string Airport) ToEntities
    {
        get
        {
            var toValue = Entities?._instance?.To?.FirstOrDefault()?.Text;
            var toAirportValue = Entities?.To?.FirstOrDefault()?.Airport?.FirstOrDefault()?.FirstOrDefault();
            return (toValue, toAirportValue);
        }
    }

    // This value will be a TIMEX. And we are only interested in a Date so grab the first result and drop the Time part.
    // TIMEX is a format that represents DateTime expressions that include some ambiguity. e.g. missing a Year.
    public string TravelDate
        => Entities.datetime?.FirstOrDefault()?.Expressions.FirstOrDefault()?.Split('T')[0];
}

Usługa LUIS jest teraz skonfigurowana i połączona z botem.

Testowanie bota

Pobierz i zainstaluj najnowszą wersję emulatora platformy Bot Framework

  1. Uruchom przykład lokalnie na maszynie. Jeśli potrzebujesz instrukcji, zapoznaj się z plikiem README przykładu języka C#, przykładu JS lub przykładu języka Python.

  2. W emulatorze wpisz komunikat, taki jak "podróż do paryża" lub "przejście z paryża do Berlina". Użyj dowolnej wypowiedzi znalezionej w pliku FlightBooking.json, aby wytrenować intencję "Book flight".

Jeśli górna intencja zwrócona z usługi LUIS zostanie rozpoznana jako "Lot książki", bot zadawa więcej pytań, dopóki nie będzie miał wystarczającej ilości informacji przechowywanych w celu utworzenia rezerwacji podróży. W tym momencie zwróci te informacje o rezerwacji z powrotem do użytkownika.

W tym momencie logika bota kodu zostanie zresetowana i będzie można nadal tworzyć więcej rezerwacji.

Dodatkowe informacje

Aby uzyskać więcej informacji na temat usługi LUIS, zobacz dokumentację usługi LUIS:

Napiwek

Różne części zestawu SDK definiują oddzielne klasy jednostek lub elementy. Aby uzyskać informacje o jednostkach komunikatów, zobacz Jednostki i typy działań.