Natuurlijke taalbegrip toevoegen aan uw bot

VAN TOEPASSING OP: SDK v4

Notitie

Language Understanding (LUIS) wordt op 1 oktober 2025 buiten gebruik gesteld. Vanaf 1 april 2023 kunt u geen nieuwe LUIS-resources maken. Er is nu een nieuwere versie van taalkennis beschikbaar als onderdeel van Azure AI Language.

Conversational Language Understanding (CLU), een functie van Azure AI Language, is de bijgewerkte versie van LUIS. Zie Natuurlijke taalkennis voor meer informatie over ondersteuning voor taalkennis in de Bot Framework SDK.

De mogelijkheid om te begrijpen wat uw gebruiker gesprekskundig en contextueel betekent, kan een moeilijke taak zijn, maar kan uw bot een natuurlijker gespreksgevoel bieden. Language Understanding (LUIS) is een cloud-API-service waarmee u dit kunt doen, zodat uw bot de intentie van gebruikersberichten kan herkennen, meer natuurlijke taal van uw gebruiker kan toestaan en de gespreksstroom beter kan doorsturen.

In dit onderwerp wordt uitgelegd hoe u LUIS toevoegt aan een vluchtboekingstoepassing om verschillende intenties en entiteiten in gebruikersinvoer te herkennen.

Notitie

De Sdk's voor Bot Framework JavaScript, C# en Python blijven ondersteund, maar de Java SDK wordt buiten gebruik gesteld met definitieve langetermijnondersteuning die eindigt op november 2023. Alleen kritieke beveiligings- en foutoplossingen in deze opslagplaats worden uitgevoerd.

Bestaande bots die zijn gebouwd met de Java SDK blijven functioneren.

Voor het bouwen van nieuwe bots kunt u Power Virtual Agents gebruiken en lezen over het kiezen van de juiste chatbotoplossing.

Zie De toekomst van botbouw voor meer informatie.

Vereisten

Over dit voorbeeld

Dit kernbotvoorbeeld toont een voorbeeld van een vluchtboekingstoepassing voor een luchthaven. Er wordt een LUIS-service gebruikt om de gebruikersinvoer te herkennen en de belangrijkste herkende LUIS-intentie te retourneren.

Het taalmodel bevat drie intenties: Book Flight, Cancelen None. LUIS gebruikt deze intenties om te begrijpen wat de gebruiker bedoelde wanneer ze een bericht naar de bot verzenden. Het taalmodel definieert ook entiteiten die LUIS kan extraheren uit de invoer van de gebruiker, zoals de luchthaven van oorsprong of bestemming.

Na elke verwerking van gebruikersinvoer wordt DialogBot de huidige status van beide UserState en ConversationState. Zodra alle vereiste informatie is verzameld, maakt het codevoorbeeld een reservering voor een demovluchtboeking. In dit artikel behandelen we de LUIS-aspecten van dit voorbeeld. De algemene stroom van de steekproef is echter:

  • OnMembersAddedAsync wordt aangeroepen wanneer een nieuwe gebruiker is verbonden en een welkomstkaart weergeeft.
  • OnMessageActivityAsync wordt aangeroepen voor elke ontvangen gebruikersinvoer.

Class diagram outlining the structure of the C# sample.

De OnMessageActivityAsync module voert het juiste dialoogvenster uit via de Run dialoogvensterextensiemethode. Vervolgens roept het hoofddialoogvenster de LUIS-helper aan om de meest scorende gebruikersintentie te vinden. Als de belangrijkste intentie voor de invoer van de gebruiker 'BookFlight' retourneert, vult de helper informatie in van de gebruiker die LUIS heeft geretourneerd. Daarna wordt het hoofddialoogvenster gestart BookingDialog, waarmee aanvullende informatie wordt verkregen van de gebruiker, zoals:

  • Origin de oorspronkelijke stad
  • TravelDate de datum waarop de vlucht moet worden geboekt
  • Destination de bestemmingsstad

In dit artikel wordt beschreven hoe u LUIS toevoegt aan een bot. Zie voor informatie over het gebruik van dialoogvensters of statussen hoe u gebruikersinvoer verzamelt met behulp van een dialoogvensterprompt of respectievelijk gebruikers- en gespreksgegevens opslaat.

Een LUIS-app maken in de LUIS-portal

  1. Meld u aan bij de LUIS-portal en maak indien nodig een account en ontwerpresource.
  2. Selecteer Importeren op de pagina Gespreks-apps in LUIS en importeer vervolgens als JSON.
  3. In het dialoogvenster Nieuwe app importeren:
    1. Kies het bestand FlightBooking.json in de map CognitiveModels van het voorbeeld.
    2. Voer FlightBooking de optionele naam van de app in en selecteer Gereed.
  4. Op de site kan worden weergegeven hoe u een effectieve LUIS-app maakt en dialoogvensters voor samengestelde entiteiten bijwerken. U kunt deze dialoogvensters sluiten en doorgaan.
  5. Train uw app en publiceer uw app vervolgens naar de productieomgeving . Zie de LUIS-documentatie over het trainen en publiceren van een app voor meer informatie.

Waarom entiteiten gebruiken

Met LUIS-entiteiten kan uw bot gebeurtenissen begrijpen die verder gaan dan standaardintenties. Hierdoor kunt u aanvullende informatie verzamelen van gebruikers, zodat uw bot vragen kan stellen en intelligenter kan reageren. Samen met definities voor de drie LUIS-intenties 'Book Flight', 'Cancel' en 'None', bevat het bestand FlightBooking.json ook een set entiteiten, zoals 'Van.Airport' en 'Naar.Airport'. Met deze entiteiten kan LUIS aanvullende informatie detecteren en retourneren die is opgenomen in de oorspronkelijke invoer van de gebruiker wanneer ze een nieuwe reisboeking aanvragen.

Waarden verkrijgen om verbinding te maken met uw LUIS-app

Zodra uw LUIS-app is gepubliceerd, kunt u deze openen vanuit uw bot. U moet verschillende waarden vastleggen voor toegang tot uw LUIS-app vanuit uw bot. U kunt deze informatie ophalen met behulp van de LUIS-portal.

Toepassingsgegevens ophalen uit de LUIS.ai-portal

Het instellingenbestand (appsettings.jsonof .envconfig.py) fungeert als de plaats waar alle serviceverwijzingen op één plaats worden samengevoegd. De informatie die u ophaalt, wordt toegevoegd aan dit bestand in de volgende sectie.

  1. Selecteer uw gepubliceerde LUIS-app in luis.ai.

  2. Wanneer uw gepubliceerde LUIS-app is geopend, selecteert u het tabblad BEHEREN .

  3. Selecteer het tabblad Instellingen aan de linkerkant en noteer de waarde die wordt weergegeven voor de toepassings-id als <YOUR_APP_ID>.

    Screenshot of the Manage page displaying your application ID.

  4. Selecteer Azure-resources en vervolgens Voorspellingsresource. Noteer de waarde die wordt weergegeven voor Locatie als <YOUR_REGION> en primaire sleutel als <YOUR_AUTHORING_KEY>.

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

    U kunt ook de regio en primaire sleutel voor uw ontwerpresource gebruiken.

Het instellingenbestand bijwerken

Voeg de informatie toe die nodig is voor toegang tot uw LUIS-app, inclusief toepassings-id, ontwerpsleutel en regio in het appsettings.json bestand. In de vorige stap hebt u deze waarden opgehaald uit uw gepubliceerde LUIS-app. De NAAM van de API-host moet de indeling <your region>.api.cognitive.microsoft.comhebben.

appsetting.json

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

Uw bot configureren voor het gebruik van uw LUIS-app

Zorg ervoor dat het Microsoft.Bot.Builder.AI.Luis NuGet-pakket is geïnstalleerd voor uw project.

Om verbinding te maken met de LUIS-service, haalt de bot de informatie op die u hebt toegevoegd aan het bestand appsetting.json. De FlightBookingRecognizer klasse bevat code met uw instellingen uit het bestand appsetting.json en voert query's uit op de LUIS-service door methode aan te roepen RecognizeAsync .

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);
}

De FlightBookingEx.cs bevat de logica voor het extraheren van, Naar en TravelDate; het breidt de gedeeltelijke klasse FlightBooking.cs uit die wordt gebruikt om LUIS-resultaten op te slaan bij het aanroepen FlightBookingRecognizer.RecognizeAsync<FlightBooking> van de 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];
}

LUIS is nu geconfigureerd en verbonden voor uw bot.

De bot testen

De nieuwste Bot Framework Emulator downloaden en installeren

  1. Voer het voorbeeld lokaal uit op uw computer. Als u instructies nodig hebt, raadpleegt u het bestand voor het README C#-voorbeeld, JS-voorbeeld of Python-voorbeeld.

  2. Typ in de Emulator een bericht zoals 'reizen naar Parijs' of 'van Parijs naar Berlijn'. Gebruik een utterance in het bestand FlightBooking.json voor het trainen van de intentie 'Boek vlucht'.

Als de belangrijkste intentie die door LUIS wordt geretourneerd, wordt omgezet in 'Boekvlucht', stelt uw bot meer vragen totdat er voldoende informatie is opgeslagen om een reisboeking te maken. Op dat moment worden deze boekingsgegevens teruggezet naar uw gebruiker.

Op dit moment wordt de logica van de codebot opnieuw ingesteld en kunt u meer boekingen blijven maken.

Aanvullende informatie

Zie de LUIS-documentatie voor meer informatie over LUIS:

Fooi

Verschillende onderdelen van de SDK definiëren afzonderlijke entiteitsklassen of -elementen. Zie Entiteiten en activiteitstypen voor berichtentiteiten.