Természetes hangfelismerés hozzáadása a robothoz

A KÖVETKEZŐKRE VONATKOZIK: SDK v4

Nehéz lehet megérteni, hogy a felhasználó mit jelent a beszélgetésben és a kontextusban, de természetesebb beszélgetési környezetet biztosíthat a robotnak. A Language Understanding (LUIS) egy felhőalapú API-szolgáltatás, amely lehetővé teszi, hogy a robot felismerje a felhasználói üzenetek célját, természetesebb nyelvet biztosíthasson a felhasználótól, és jobban irányíthassa a beszélgetési folyamatot.

Ez a témakör végigvezeti a LUIS hozzáadásán egy járatfoglalási alkalmazáshoz, hogy felismerje a felhasználói bemenetben található különböző szándékokat és entitásokat.

Előfeltételek

A minta ismertetése

Ez az alapvető robotminta egy repülőtéri járatfoglalási alkalmazás példáját mutatja be. Egy LUIS-szolgáltatással ismeri fel a felhasználói bemenetet, és visszaadja a legjobban felismert LUIS-szándékot.

A nyelvi modell három szándékot tartalmaz: Book Flight, Cancelés None. A LUIS ezeket a szándékokat arra használja, hogy megértse, mit jelentett a felhasználó, amikor üzenetet küld a robotnak. A nyelvi modell olyan entitásokat is meghatároz, amelyeket a LUIS ki tud nyerni a felhasználó bemenetéből, például a kiindulási vagy a célteret.

A felhasználói bevitel minden feldolgozása után menti mind a kettő aktuális állapotát, DialogBot mind ConversationStatepedig a UserState . Az összes szükséges információ összegyűjtése után a kódolási minta létrehoz egy bemutató járatfoglalási foglalást. Ebben a cikkben a minta LUIS-aspektusait fogjuk lefedni. A minta általános folyamata azonban alább látható:

  • OnMembersAddedAsync A akkor lesz meghívva, amikor egy új felhasználó csatlakozik, és megjelenít egy üdvözlőkártyát.
  • OnMessageActivityAsync A minden fogadott felhasználói bemenethez meg van hívva.

LUIS sample logic flow

A OnMessageActivityAsync modul a megfelelő párbeszédpanelt futtatja a Run párbeszédpanel-bővítmény metódusán keresztül. Ezután a fő párbeszédpanel meghívja a LUIS segítőt, hogy megtalálja a legmagasabb pontszámú felhasználói szándékot. Ha a felhasználói bevitel felső szándéka "BookFlight" értéket ad vissza, a segéd kitölti a LUIS által visszaadott felhasználó adatait. Ezután a fő párbeszédpanel elindítja a BookingDialog, amely szükség szerint további információkat szerez be a felhasználótól, például:

  • Origin az eredeti város
  • TravelDate a járat lefoglalásának dátuma
  • Destination a célváros

Ez a cikk bemutatja, hogyan adhatja hozzá a LUIS-t egy robothoz. A párbeszédpanelek vagy állapotok használatával kapcsolatos információkért tekintse meg, hogyan gyűjthet be felhasználói bevitelt egy párbeszédpanelen , illetve hogyan mentheti a felhasználói és a beszélgetési adatokat.

LUIS-alkalmazás létrehozása a LUIS-portálon

  1. Jelentkezzen be a LUIS-portálra , és szükség esetén hozzon létre egy fiókot és egy szerzői erőforrást.

  2. A LUISBeszélgetési alkalmazások lapján válassza az Új alkalmazás jobb oldalán található lefelé mutató nyilat, majd válassza az Importálás JSON-ként lehetőséget.

    Create a new LUIS app

  3. Az Új alkalmazás importálása párbeszédpanelen:

    1. Válassza ki a FlightBooking.json fájlt a minta CognitiveModels mappájában.
    2. Adja meg FlightBooking az alkalmazás nem kötelező nevét, és válassza a Kész lehetőséget.
  4. A rendszer kérheti az összetett entitások frissítését. Ezt figyelmen kívül hagyhatja, és válassza az Emlékeztető később lehetőséget:

    ignore-composite-entities

  5. Betanítsa és közzétegye az alkalmazást az éles környezetben. További információkért tekintse meg az alkalmazások betanítása és közzététele luis-dokumentációját.

Miért érdemes entitásokat használni?

A LUIS-entitások lehetővé teszik, hogy a robot megértse a szabványos szándékokon túli eseményeket. Ez lehetővé teszi, hogy további információkat gyűjtsön a felhasználóktól, amelyek lehetővé teszik a kérdések továbbítását és az intelligensebb válaszadást. A FlightBooking.json fájl a három LUIS-szándék definíciói mellett a "Book Flight", a "Cancel" és a "None" szándékot is tartalmazza, például a "From.Airport" és a "To.Airport" entitásokat. Ezek az entitások lehetővé teszik a LUIS számára, hogy észlelje és visszaadja a felhasználó eredeti bemenetében található további információkat, amikor új utazási foglalást kér.

Értékek beszerzése a LUIS-alkalmazáshoz való csatlakozáshoz

A LUIS-alkalmazás közzététele után a robotból érheti el. A LUIS-alkalmazás roboton belüli eléréséhez több értéket is rögzítenie kell. Ezeket az információkat a LUIS-portálon lehet lekérni.

Alkalmazásadatok lekérése a LUIS.ai portálról

A beállításfájl (appsettings.json.envvagy config.py) az összes szolgáltatáshivatkozás egy helyen való összevonásának helye. A lekért információk a következő szakaszban lesznek hozzáadva ehhez a fájlhoz.

  1. Válassza ki a közzétett LUIS-alkalmazást a luis.ai.

  2. Amikor meg van nyitva a közzétett LUIS-alkalmazás, válassza a KEZELÉS lapot.

  3. Válassza a bal oldalon a Beállítások lapot, és rögzítse az alkalmazásazonosítóhoz<megjelenített értéket YOUR_APP_ID>.

    Manage LUIS application information

  4. Válassza a bal oldalon az Azure-erőforrások lapot, majd a Szerzői erőforrás csoportot. Jegyezze fel a Hely<> mezőben YOUR_REGION és az elsődleges kulcs<értékét YOUR_AUTHORING_KEY>.

    Manage LUIS authoring information

A beállításfájl frissítése

Adja hozzá a LUIS-alkalmazás eléréséhez szükséges információkat, beleértve az alkalmazásazonosítót, a szerzői kulcsot és a régiót a appsettings.json fájlban. Ezek azok az értékek, amelyeket korábban mentett a közzétett LUIS-alkalmazásból. Vegye figyelembe, hogy az API-gazdagép nevének formátumának <your region>.api.cognitive.microsoft.comkell lennie.

appsetting.json

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

A robot konfigurálása a LUIS-alkalmazás használatára

Győződjön meg arról, hogy a Microsoft.Bot.Builder.AI.Luis NuGet-csomag telepítve van a projekthez.

A LUIS-szolgáltatáshoz való csatlakozáshoz a robot lekéri a fent megadott információkat az appsetting.json fájlból. Az FlightBookingRecognizer osztály az appsetting.json fájlban található beállításokat tartalmazó kódot tartalmaz, és meghívja RecognizeAsync a LUIS-szolgáltatást.

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

Ez FlightBookingEx.cs tartalmazza a kinyerni kívánt logikát a Feladó, a To és a TravelDate között; kiterjeszti a LUIS-eredmények tárolására használt részleges osztályt FlightBooking.cs a hívás FlightBookingRecognizer.RecognizeAsync<FlightBooking> során a 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];
}

A LUIS most már konfigurálva van, és csatlakoztatva van a robothoz.

A robot tesztelése

Töltse le és telepítse a legújabb Bot Framework Emulatort

  1. Futtassa a mintát helyileg a számítógépen. Ha útmutatásra van szüksége, tekintse meg a READMEC#-minta, a JS-minta vagy a Python-minta fájljait.

  2. Az Emulatorban írjon be egy üzenetet, például"utazás Párizsba" vagy "párizsból Berlinbe". A FlightBooking.json fájlban található bármely kimondott szöveget használhatja a "Book flight" szándék betanításához.

LUIS booking input

Ha a LUIS által visszaadott leggyakoribb szándék "Repülőjegy lefoglalása" lesz, a robot további kérdéseket tesz fel, amíg nem rendelkezik elegendő információval az utazási foglalás létrehozásához. Ezen a ponton visszaküldi ezt a foglalási információt a felhasználónak.

LUIS booking result

Ezen a ponton a kódrobot logikája alaphelyzetbe áll, és továbbra is létrehozhat további foglalásokat.

További információ

A LUIS-ról további információt a LUIS dokumentációban talál:

Megjegyzés

Az SDK különböző részei külön entitásosztályokat vagy elemeket határoznak meg. Üzenetentitások: Entitások és tevékenységtípusok.

Következő lépések