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

A KÖVETKEZŐKRE VONATKOZIK: SDK v4

Feljegyzés

A Language Understanding (LUIS) 2025. október 1-jén megszűnik. 2023. április 1-től nem hozhat létre új LUIS-erőforrásokat. Az Azure AI Language részeként már elérhető a nyelvértés újabb verziója.

Az Azure AI Language egyik funkciója, a beszélgetési nyelv megértése (CLU) a LUIS frissített verziója. További információ a Bot Framework SDK nyelvfelismerési támogatásáról: Természetes nyelvfelismerés.

Nehéz feladat 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 szándéká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 repülőjegy-foglalási alkalmazáshoz, hogy felismerje a felhasználói bemenetben található különböző szándékokat és entitásokat.

Feljegyzés

A Bot Framework JavaScript, C# és Python SDK-k továbbra is támogatottak lesznek, a Java SDK-t azonban 2023 novemberében végső hosszú távú támogatással kivonják.

A Java SDK-val létrehozott meglévő robotok továbbra is működni fognak.

Új robotépítéshez fontolja meg a Power Virtual Agents használatát, és olvassa el a megfelelő csevegőrobot-megoldás kiválasztását.

További információ: A robotépítés jövője.

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. 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 meghatározza azokat az entitásokat is, amelyeket a LUIS kinyerhet a felhasználó bemenetéből, például a forrás- vagy célrepülőteret.

A felhasználói bemenetek DialogBot feldolgozása után a rendszer a jelenlegi állapotot is UserStateConversationStatementi. Az összes szükséges információ összegyűjtése után a kódolási minta létrehoz egy bemutató repülőjegy foglalást. Ebben a cikkben a minta LUIS-szempontjait fogjuk lefedni. A minta általános folyamata azonban a következő:

  • OnMembersAddedAsync a rendszer meghívja, amikor egy új felhasználó csatlakozik, és üdvözlőkártyát jelenít meg.
  • OnMessageActivityAsync a rendszer minden fogadott felhasználói bemenethez meghívja.

A C#-minta szerkezetét bemutató osztálydiagram.

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

  • Origin a kiinduló város
  • TravelDate a járat lefoglalásának dátuma
  • Destination a cél város

Ez a cikk bemutatja, hogyan adhat hozzá LUIS-t egy robothoz. A párbeszédpanelek vagy állapotok használatával kapcsolatos információkért tekintse meg, hogyan gyűjthet felhasználói bemenetet egy párbeszédpanel-parancssor használatával, 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 LUIS Beszélgetési alkalmazások lapján válassza az Importálás, majd az Importálás JSON-ként lehetőséget.
  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 opcionális nevét, és válassza a Kész lehetőséget.
  4. A webhely megjelenítheti , hogyan hozhat létre hatékony LUIS-alkalmazást , és frissítheti az összetett entitások párbeszédpaneleit. Ezeket a párbeszédpaneleket bezárhatja, és folytathatja.
  5. Betanítsa az alkalmazást, majd tegye közzé 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 a robot számára, hogy 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, így a robot kérdéseket tehet fel, és intelligensebben válaszolhat. A három LUIS-szándék , a "Book Flight", a "Cancel" és a "None" definícióival együtt a FlightBooking.json fájl olyan entitásokat is tartalmaz, mint a From.Airport és a To.Airport. Ezek az entitások lehetővé teszik a LUIS számára, hogy észlelje és visszaadja a felhasználó eredeti bemenetén belül található további információkat, amikor új utazási foglalást kérnek.

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

A LUIS-alkalmazás közzététele után a robotból érheti el. Több értéket kell rögzítenie, hogy hozzáférjen a LUIS-alkalmazáshoz a roboton belül. 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. A közzétett LUIS-alkalmazás megnyitása után válassza a MANAGE lapot.

  3. Válassza a bal oldalon található Gépház lapot, és rögzítse az alkalmazásazonosítóhoz <>YOUR_APP_ID megjelenített értéket.

    Képernyőkép az alkalmazásazonosítót megjelenítő Kezelés lapról.

  4. Válassza ki az Azure-erőforrásokat, majd az előrejelzési erőforrást. A Hely értékének rögzítése YOUR_REGION> és <elsődleges kulcsként<YOUR_AUTHORING_KEY>.

    Képernyőkép a Tartózkodási helyet és az elsődleges kulcsot megjelenítő Kezelés lapról.

    Másik lehetőségként használhatja a régiót és az elsődleges kulcsot a szerzői erőforráshoz.

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ájlba. Az előző lépésben lekérte ezeket az értékeket a közzétett LUIS-alkalmazásból. Az API-gazdagép nevének formátumában <your region>.api.cognitive.microsoft.comkell lennie.

appsetting.json

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

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 appsetting.json fájlhoz hozzáadott adatokat. Az FlightBookingRecognizer osztály a appsetting.json fájlban található beállításokat tartalmazó kódot tartalmaz, és hívási RecognizeAsync metódussal lekérdezi 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 kiolvasni kívánt logikát a From, 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áskor FlightBookingRecognizer.RecognizeAsync<FlightBooking> 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 csatlakozik 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 README C#-minta, a JS-minta vagy a Python-minta fájljait.

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

Ha a LUIS által visszaadott fő szándék a "Foglalás", 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 vissza fogja adni ezt a foglalási információt a felhasználónak.

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

További információk

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

Tipp.

Az SDK különböző részei külön entitásosztályokat vagy elemeket határoznak meg. Az üzenetentitásokról az Entitások és a tevékenységtípusok című témakörben olvashat.