Lägg till förståelse av naturligt språk i din chattrobot

GÄLLER FÖR: SDK v4

Kommentar

Language Understanding (LUIS) dras tillbaka den 1 oktober 2025. Från och med den 1 april 2023 kan du inte skapa nya LUIS-resurser. En nyare version av språktolkning är nu tillgänglig som en del av Azure AI Language.

Conversational Language Understanding (CLU), en funktion i Azure AI Language, är den uppdaterade versionen av LUIS. Mer information om stöd för språktolkning i Bot Framework SDK finns i Förstå naturligt språk.

Möjligheten att förstå vad användaren menar konversationsmässigt och kontextuellt kan vara en svår uppgift, men kan ge roboten en mer naturlig konversationskänsla. Language Understanding (LUIS) är en molnbaserad API-tjänst som gör att du kan göra just detta så att roboten kan känna igen avsikten med användarmeddelanden, tillåta mer naturligt språk från användaren och bättre dirigera konversationsflödet.

Det här avsnittet beskriver hur du lägger till LUIS i ett flygbokningsprogram för att identifiera olika avsikter och entiteter som ingår i användarindata.

Kommentar

Bot Framework JavaScript-, C#- och Python-SDK:erna fortsätter att stödjas, men Java SDK dras tillbaka med slutligt långsiktigt stöd som slutar i november 2023.

Befintliga robotar som skapats med Java SDK fortsätter att fungera.

Om du vill skapa en ny robot kan du använda Microsoft Copilot Studio och läsa om hur du väljer rätt copilot-lösning.

Mer information finns i Framtiden för robotbygge.

Förutsättningar

Om det här exemplet

Det här exemplet på kärnroboten visar ett exempel på en flygbokningsapp på flygplatsen. Den använder en LUIS-tjänst för att identifiera användarindata och returnera den mest identifierade LUIS-avsikten.

Språkmodellen innehåller tre avsikter: Book Flight, Canceloch None. LUIS använder dessa avsikter för att förstå vad användaren menade när de skickar ett meddelande till roboten. Språkmodellen definierar också entiteter som LUIS kan extrahera från användarens indata, till exempel ursprunget eller målflygplatsen.

Efter varje bearbetning av användarindata DialogBot sparar du det aktuella tillståndet för både UserState och ConversationState. När all nödvändig information har samlats in skapar kodningsexemplet en bokningsreservation för demoflyg. I den här artikeln ska vi ta upp LUIS-aspekterna i det här exemplet. Det allmänna flödet i exemplet är dock:

  • OnMembersAddedAsync anropas när en ny användare är ansluten och visar ett välkomstkort.
  • OnMessageActivityAsync anropas för varje användarindata som tas emot.

Klassdiagram som beskriver strukturen för C#-exemplet.

Modulen OnMessageActivityAsync kör lämplig dialogruta via Run dialogtilläggsmetoden. Sedan anropar huvuddialogrutan LUIS-hjälpen för att hitta avsikten med den mest poänggivande användaren. Om den främsta avsikten för användarindata returnerar "BookFlight" fyller hjälpverktyget i information från användaren som LUIS returnerade. Därefter startar BookingDialoghuvuddialogrutan , som hämtar ytterligare information efter behov från användaren, till exempel:

  • Origin den ursprungliga staden
  • TravelDate datumet då flygresan skulle bokas
  • Destination målstaden

Den här artikeln beskriver hur du lägger till LUIS i en robot. Information om hur du använder dialogrutor eller tillstånd finns i samla in användarindata med hjälp av en dialogruta eller spara användar- respektive konversationsdata.

Skapa en LUIS-app i LUIS-portalen

  1. Logga in på LUIS-portalen och skapa vid behov ett konto och en redigeringsresurs.
  2. På sidan Konversationsappar i LUIS väljer du Importera och sedan Importera som JSON.
  3. I dialogrutan Importera ny app:
    1. Välj filen FlightBooking.json i mappen CognitiveModels i exemplet.
    2. Ange FlightBooking som valfritt namn på appen och välj Klar.
  4. Webbplatsen kan visa Hur du skapar en effektiv LUIS-app och Uppgradera dina sammansatta entitetsdialogrutor . Du kan stänga dessa dialogrutor och fortsätta.
  5. Träna appen och publicera sedan appen i produktionsmiljön . Mer information finns i LUIS-dokumentationen om hur du tränar och publicerar en app.

Varför använda entiteter

LUIS-entiteter gör det möjligt för roboten att förstå händelser utöver standard avsikter. På så sätt kan du samla in ytterligare information från användarna, så att din robot kan ställa frågor och svara mer intelligent. Tillsammans med definitioner för de tre LUIS-avsikterna "Book Flight", "Cancel" och "None" innehåller filen FlightBooking.json också en uppsättning entiteter som "From.Airport" och "To.Airport". Dessa entiteter gör det möjligt för LUIS att identifiera och returnera ytterligare information som finns i användarens ursprungliga indata när de begär en ny resebokning.

Hämta värden för att ansluta till luis-appen

När luis-appen har publicerats kan du komma åt den från din robot. Du måste registrera flera värden för att få åtkomst till LUIS-appen inifrån roboten. Du kan hämta den informationen med hjälp av LUIS-portalen.

Hämta programinformation från LUIS.ai-portalen

Inställningsfilen (appsettings.json.enveller config.py) fungerar som platsen för att samla alla tjänstreferenser på ett och samma ställe. Informationen du hämtar läggs till i den här filen i nästa avsnitt.

  1. Välj din publicerade LUIS-app från luis.ai.

  2. När den publicerade LUIS-appen är öppen väljer du fliken HANTERA .

  3. Välj fliken Inställningar till vänster och registrera värdet som visas för program-ID som <YOUR_APP_ID>.

    Skärmbild av sidan Hantera som visar ditt program-ID.

  4. Välj Azure-resurser och sedan Förutsägelseresurs. Registrera värdet som visas för Plats som <YOUR_REGION> och Primärnyckel som <YOUR_AUTHORING_KEY>.

    Skärmbild av sidan Hantera som visar din plats och primärnyckel.

    Du kan också använda regionen och primärnyckeln för redigeringsresursen.

Uppdatera inställningsfilen

Lägg till den information som krävs för att komma åt LUIS-appen, inklusive program-ID, redigeringsnyckel och region i appsettings.json filen. I föregående steg hämtade du dessa värden från din publicerade LUIS-app. API-värdnamnet ska vara i formatet <your region>.api.cognitive.microsoft.com.

appsetting.json

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

Konfigurera roboten så att den använder LUIS-appen

Kontrollera att NuGet-paketet Microsoft.Bot.Builder.AI.Luis är installerat för projektet.

För att ansluta till LUIS-tjänsten hämtar roboten den information som du lade till i appsetting.json-filen. Klassen FlightBookingRecognizer innehåller kod med dina inställningar från appsetting.json-filen och frågar LUIS-tjänsten genom att anropa RecognizeAsync metoden.

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

FlightBookingEx.cs Innehåller logiken för att extrahera Från, Till och TravelDate. Den utökar den partiella klass FlightBooking.cs som används för att lagra LUIS-resultat vid anrop FlightBookingRecognizer.RecognizeAsync<FlightBooking> från 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 har nu konfigurerats och anslutits för din robot.

Testa roboten

Ladda ned och installera den senaste Bot Framework-emulatorn

  1. Kör exemplet lokalt på datorn. Om du behöver instruktioner kan du läsa README filen för C#-exempel, JS-exempel eller Python-exempel.

  2. I emulatorn skriver du ett meddelande som "resa till Paris" eller "åka från Paris till Berlin". Använd alla yttranden som finns i filen FlightBooking.json för att träna avsikten "Book flight".

Om den främsta avsikten som returneras från LUIS matchar "Boka flyg" kommer roboten att ställa fler frågor tills den har tillräckligt med information lagrad för att skapa en resebokning. Då returneras den här bokningsinformationen tillbaka till din användare.

Nu återställs logiken för kodroboten och du kan fortsätta att skapa fler bokningar.

Ytterligare information

Mer information om LUIS finns i LUIS-dokumentationen:

Dricks

Olika delar av SDK definierar separata entitetsklasser eller element. Information om meddelandeentiteter finns i Entiteter och aktivitetstyper.