Přidání rozpoznávání přirozeného jazyka do robota

PLATÍ PRO: SDK v4

Poznámka:

Služba Language Understanding (LUIS) bude vyřazena 1. října 2025. Od 1. dubna 2023 nebudete moct vytvářet nové prostředky LUIS. Novější verze language understanding je teď dostupná jako součást jazyka Azure AI.

Konverzační jazyk understanding (CLU), funkce jazyka Azure AI, je aktualizovaná verze služby LUIS. Další informace o podpoře porozumění jazyku v sadě SDK služby Bot Framework najdete v tématu Principy přirozeného jazyka.

Schopnost pochopit, co uživatel znamená konverzační a kontextově, může být obtížná úloha, ale může robotovi poskytnout přirozenější pocit konverzace. Language Understanding (LUIS) je cloudová služba ROZHRANÍ API, která umožňuje provádět jenom to, aby robot mohl rozpoznat záměr uživatelských zpráv, umožnit uživatelům více přirozeného jazyka a lépe směrovat tok konverzace.

Toto téma vás provede přidáním služby LUIS do aplikace pro rezervaci letů za účelem rozpoznávání různých záměrů a entit obsažených ve vstupu uživatele.

Poznámka:

Sady SDK služby Bot Framework JavaScript, C# a Python budou nadále podporovány, ale sada Java SDK se vyřazuje s konečnou dlouhodobou podporou končící v listopadu 2023. V tomto úložišti budou provedeny pouze kritické opravy zabezpečení a chyb.

Stávající roboti sestavení pomocí sady Java SDK budou i nadále fungovat.

Pro nové vytváření robotů zvažte použití Power Virtual Agents a přečtěte si o výběru správného řešení chatovacího robota.

Další informace najdete v tématu Budoucnost vytváření robotů.

Předpoklady

O této ukázce

Tato ukázka základního robota ukazuje příklad aplikace pro rezervaci letů na letišti. Používá službu LUIS k rozpoznávání vstupu uživatele a vrácení záměru služby LUIS s nejvyšším rozpoznamem.

Jazykový model obsahuje tři záměry: Book Flight, Cancela None. Služba LUIS použije tyto záměry k pochopení toho, co uživatel myslel při odesílání zprávy robotovi. Jazykový model také definuje entity, které služba LUIS může extrahovat ze vstupu uživatele, například z počátečního nebo cílového letiště.

Po každém zpracování uživatelského vstupu DialogBot uloží aktuální stav obou UserState a ConversationState. Jakmile se shromáždí všechny požadované informace, ukázka kódování vytvoří ukázkovou rezervaci rezervace letů. V tomto článku se budeme věnujeme aspektům služby LUIS této ukázky. Obecný tok ukázky je však následující:

  • OnMembersAddedAsync je volána, když je nový uživatel připojen a zobrazí uvítací kartu.
  • OnMessageActivityAsync je volána pro každý přijatý uživatelský vstup.

Class diagram outlining the structure of the C# sample.

Modul OnMessageActivityAsync spustí příslušné dialogové okno prostřednictvím metody rozšíření dialogového Run okna. Potom hlavní dialogové okno zavolá pomocníka služby LUIS, aby zjistil záměr uživatele s nejvyšším skóre. Pokud hlavní záměr pro vstup uživatele vrátí "BookFlight", pomocná rutina vyplní informace od uživatele, který služba LUIS vrátila. Potom se spustí BookingDialoghlavní dialog , který získá další informace podle potřeby od uživatele, například:

  • Origin původní město
  • TravelDate datum rezervace letu
  • Destination cílové město

Tento článek popisuje, jak přidat službu LUIS do robota. Informace o používání dialogových oken nebo stavů najdete v tématu shromáždění uživatelského vstupu pomocí dialogového okna s výzvou nebo uložení dat uživatele a konverzace.

Vytvoření aplikace LUIS na portálu LUIS

  1. Přihlaste se k portálu LUIS a v případě potřeby vytvořte účet a prostředek pro vytváření.
  2. Na stránce Aplikace konverzace ve službě LUIS vyberte Importovat a pak importujte jako JSON.
  3. V dialogovém okně Importovat novou aplikaci :
    1. Zvolte soubor FlightBooking.json ve složce CognitiveModels ukázky.
    2. Zadejte FlightBooking jako volitelný název aplikace a vyberte Hotovo.
  4. Web může zobrazit , jak vytvořit efektivní aplikaci LUIS a upgradovat dialogové okno složených entit . Tato dialogová okna můžete zavřít a pokračovat.
  5. Vytrénujte aplikaci a pak ji publikujte do produkčního prostředí. Další informace najdete v dokumentaci služby LUIS o tom, jak vytrénovat a publikovat aplikaci.

Proč používat entity

Entity SLUŽBY LUIS umožňují robotovi porozumět událostem nad rámec standardních záměrů. Díky tomu můžete shromažďovat další informace od uživatelů, aby robot mohl klást otázky a reagovat inteligentněji. Spolu s definicemi tří záměrů LUIS "Book Flight" (Rezervovat let), Cancel (Zrušit) a None (Žádný) obsahuje soubor FlightBooking.json také sadu entit, jako je From.Airport (Z.Airport) a To.Airport (To.Airport). Tyto entity umožňují službě LUIS zjišťovat a vracet další informace obsažené v původním vstupu uživatele, když požádá o novou cestovní rezervaci.

Získání hodnot pro připojení k aplikaci LUIS

Jakmile je vaše aplikace LUIS publikovaná, můžete k ní přistupovat z robota. Abyste mohli získat přístup k aplikaci LUIS z robota, budete muset zaznamenat několik hodnot. Tuto informaci můžete načíst pomocí portálu LUIS.

Načtení informací o aplikaci z portálu LUIS.ai

Soubor nastavení (appsettings.json.envneboconfig.py) funguje jako místo, kde jsou všechny odkazy na služby na jednom místě. Informace, které načtete, se do tohoto souboru přidají v další části.

  1. V luis.ai vyberte publikovanou aplikaci LUIS.

  2. Po otevření publikované aplikace LUIS vyberte kartu SPRAVOVAT .

  3. Vyberte kartu Nastavení na levé straně a poznamenejte si hodnotu zobrazenou pro ID aplikace jako <YOUR_APP_ID>.

    Screenshot of the Manage page displaying your application ID.

  4. Vyberte prostředky Azure a pak prediktivní prostředek. Poznamenejte si hodnotu zobrazenou pro umístění jako YOUR_REGION a primární klíč jako <YOUR_AUTHORING_KEY>.><

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

    Alternativně můžete pro prostředek vytváření použít oblast a primární klíč.

Aktualizace souboru nastavení

Přidejte do souboru informace potřebné pro přístup k aplikaci LUIS, včetně ID aplikace, klíče pro vytváření obsahu a oblasti appsettings.json . V předchozím kroku jste tyto hodnoty načetli z publikované aplikace LUIS. Název hostitele rozhraní API by měl být ve formátu <your region>.api.cognitive.microsoft.com.

appsetting.json

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

Konfigurace robota pro použití aplikace LUIS

Ujistěte se, že je pro váš projekt nainstalovaný balíček NuGet Microsoft.Bot.Builder.AI.Luis .

Pokud se chcete připojit ke službě LUIS, robot načte informace, které jste přidali do souboru appsetting.json. Třída FlightBookingRecognizer obsahuje kód s nastavením ze souboru appsetting.json a dotazuje službu LUIS voláním 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);
}

Obsahuje FlightBookingEx.cs logiku pro extrakci from, To a TravelDate; rozšiřuje částečnou třídu FlightBooking.cs použitou k ukládání výsledků služby LUIS při volání FlightBookingRecognizer.RecognizeAsync<FlightBooking> z objektu 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];
}

Služba LUIS je teď nakonfigurovaná a připojená pro vašeho robota.

Otestování robota

Stažení a instalace nejnovější aplikace Bot Framework Emulator

  1. Spusťte ukázku místně na svém počítači. Pokud potřebujete pokyny, projděte si README soubor ukázky jazyka C#, ukázky JS nebo ukázky Pythonu.

  2. V emulátoru zadejte zprávu, například "cesta do paříže" nebo "cesta z paříže do Berlína". K trénování záměru Book flight flight použijte libovolnou promluvu, která se nachází v souboru FlightBooking.json.

Pokud se hlavní záměr vrácený ze služby LUIS vyřeší na "Rezervovat let", robot bude klást další otázky, dokud nebude mít dostatek informací uložených k vytvoření cestovní rezervace. V tomto okamžiku vrátí tyto informace o rezervaci zpět uživateli.

V tuto chvíli se logika robota kódu resetuje a můžete pokračovat v vytváření dalších rezervací.

Další informace

Další informace o službě LUIS najdete v dokumentaci ke službě LUIS:

Tip

Různé části sady SDK definují samostatné třídy entit nebo prvky. U entit zpráv naleznete v tématu Entity a typy aktivit.