Rövid útmutató: Language Understanding (LUIS) ügyfélkódtárak és REST API

Fontos

A LUIS 2025. október 1-jén megszűnik, és 2023. április 1-től nem hozhat létre új LUIS-erőforrásokat. Javasoljuk, hogy a LUIS-alkalmazásokat a beszélgetési nyelv megértésére migrálja, hogy kihasználhassa a terméktámogatás és a többnyelvű képességek előnyeit.

Hozzon létre és kérdezz le egy Azure LUIS mesterségesintelligencia-alkalmazást (AI) a LUIS SDK-ügyfélkódtárakkal ezzel a rövid útmutatóval C#, Python vagy JavaScript használatával. A cURL használatával kéréseket is küldhet a REST API használatával.

A Language Understanding (LUIS) lehetővé teszi, hogy természetes nyelvi feldolgozást (NLP) alkalmazzon a felhasználó beszélgetési, természetes nyelvi szövegére az általános jelentés előrejelzéséhez és a releváns, részletes információk kinyeréséhez.

  • A szerzői ügyfélkódtár és a REST API lehetővé teszi a LUIS-alkalmazás létrehozását, szerkesztését, betanítását és közzétételét.
  • Az előrejelzési futtatókörnyezeti ügyfélkódtár és a REST API lehetővé teszi a közzétett alkalmazás lekérdezését.

Használja a Language Understanding (LUIS) ügyfélkódtárakat a .NET-hez a következő célokra:

  • Alkalmazás létrehozása
  • Szándék, gép által tanult entitás hozzáadása egy példa kimondott szöveggel
  • Alkalmazás betanítása és közzététele
  • Előrejelzési futtatókörnyezet lekérdezése

Referenciadokumentáció | szerzői és előrejelzési kódtár forráskódja | Szerzői éselőrejelzési NuGet | C# minta

Előfeltételek

  • A .NET Core és a .NET Core parancssori felület aktuális verziója.
  • Azure-előfizetés – Ingyenes létrehozás
  • Az Azure-előfizetés birtokában hozzon létre egy Language Understanding szerzői erőforrást az Azure Portalon a kulcs és a végpont lekéréséhez. Várja meg, amíg üzembe helyezi, és kattintson az Erőforrás megnyitása gombra.
    • Szüksége lesz a kulcsra és a végpontra a létrehozott erőforrásból, hogy az alkalmazást a Language Understanding szerzői szolgáltatáshoz csatlakoztathassa. A rövid útmutató későbbi részében illessze be a kulcsot és a végpontot az alábbi kódba. A szolgáltatás kipróbálásához használhatja az ingyenes tarifacsomagot (F0).

Beállítás

Új C#-alkalmazás létrehozása

Hozzon létre egy új .NET Core-alkalmazást az előnyben részesített szerkesztőben vagy IDE-ben.

  1. Egy konzolablakban (például parancsmag, PowerShell vagy Bash) a dotnet new paranccsal hozzon létre egy új, a névvel language-understanding-quickstartellátott konzolalkalmazást. Ez a parancs egy egyszerű ""Helló világ!" alkalmazás" C#-projektet hoz létre egyetlen forrásfájllal: Program.cs.

    dotnet new console -n language-understanding-quickstart
    
  2. Módosítsa a könyvtárat az újonnan létrehozott alkalmazásmappára.

    cd language-understanding-quickstart
    
  3. Az alkalmazást a következőkkel hozhatja létre:

    dotnet build
    

    A buildkimenet nem tartalmazhat figyelmeztetést vagy hibát.

    ...
    Build succeeded.
     0 Warning(s)
     0 Error(s)
    ...
    

A NuGet-kódtárak telepítése

Az alkalmazáskönyvtárban telepítse a Language Understanding (LUIS) ügyfélkódtárakat a .NET-hez a következő parancsokkal:

dotnet add package Microsoft.Azure.CognitiveServices.Language.LUIS.Authoring --version 3.2.0-preview.3
dotnet add package Microsoft.Azure.CognitiveServices.Language.LUIS.Runtime --version 3.1.0-preview.1

Objektummodell készítése

A Language Understanding (LUIS) szerzői ügyfél egy LUISAuthoringClient objektum, amely hitelesíti az Azure-t, amely tartalmazza a szerzői kulcsot.

Példakódok szerzői műveletekhez

Az ügyfél létrehozása után használja ezt az ügyfelet a funkciók elérésére, beleértve a következőket:

Előrejelzési objektummodell

A Language Understanding (LUIS) előrejelzési futtatókörnyezeti ügyfél egy LUISRuntimeClient objektum, amely hitelesíti az Azure-t, amely tartalmazza az erőforráskulcsot.

Példakódok előrejelzési futtatókörnyezethez

Az ügyfél létrehozása után használja ezt az ügyfelet a funkciók elérésére, beleértve a következőket:

Kódpéldák

Ezek a kódrészletek bemutatják, hogyan végezheti el a következőket a Python Language Understanding (LUIS) ügyfélkódtárával:

Függőségek hozzáadása

A projektkönyvtárban nyissa meg a Program.cs fájlt az előnyben részesített szerkesztőben vagy IDE-ben. Cserélje le a meglévő using kódot a következő using irányelvekre:

using System;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.Azure.CognitiveServices.Language.LUIS.Authoring;
using Microsoft.Azure.CognitiveServices.Language.LUIS.Authoring.Models;
using Microsoft.Azure.CognitiveServices.Language.LUIS.Runtime;
using Microsoft.Azure.CognitiveServices.Language.LUIS.Runtime.Models;
using Newtonsoft.Json;

Sablonkód hozzáadása

  1. Módosítsa a metódus aláírását az Main aszinkron hívások engedélyezéséhez:

    public static async Task Main()
    
  2. Adja hozzá a többi kódot az Main osztály metódusához Program , kivéve, ha másként van megadva.

Változók létrehozása az alkalmazáshoz

Hozzon létre két változókészletet: az elsőt módosítja, a második készlet pedig a kódmintában látható módon marad.

Fontos

Ne felejtse el eltávolítani a kulcsot a kódból, amikor elkészült, és soha ne tegye közzé nyilvánosan. Éles környezetben biztonságos módon tárolhatja és érheti el a hitelesítő adatait, például az Azure Key Vaultot. További információkért tekintse meg az Azure AI-szolgáltatások biztonsági cikkét.

  1. Hozzon létre változókat a szerzői kulcs és az erőforrásnevek tárolásához.

    var key = "PASTE_YOUR_LUIS_AUTHORING_SUBSCRIPTION_KEY_HERE";
    
    var authoringEndpoint = "PASTE_YOUR_LUIS_AUTHORING_ENDPOINT_HERE";
    var predictionEndpoint = "PASTE_YOUR_LUIS_PREDICTION_ENDPOINT_HERE";
    
  2. Hozzon létre változókat a végpontok, az alkalmazásnév, a verzió és a szándék nevének tárolásához.

    var appName = "Contoso Pizza Company";
    var versionId = "0.1";
    var intentName = "OrderPizzaIntent";
    

Az ügyfél hitelesítése

Hozzon létre egy ApiKeyServiceClientCredentials objektumot a kulccsal, és használja a végponttal egy LUISAuthoringClient objektum létrehozásához.

var credentials = new Microsoft.Azure.CognitiveServices.Language.LUIS.Authoring.ApiKeyServiceClientCredentials(key);
var client = new LUISAuthoringClient(credentials) { Endpoint = authoringEndpoint };

LUIS-alkalmazás létrehozása

A LUIS-alkalmazás tartalmazza a természetes nyelvi feldolgozási (NLP) modellt, beleértve a szándékokat, entitásokat és példa kimondott szövegeket.

Hozzon létre egy ApplicationCreateObject objektumot. A név és a nyelvi kultúra kötelező tulajdonságok. Hívja meg az Apps.AddAsync metódust. A válasz az alkalmazás azonosítója.

var newApp = new ApplicationCreateObject
{
    Culture = "en-us",
    Name = appName,
    InitialVersionId = versionId
};

var appId = await client.Apps.AddAsync(newApp);

Szándék létrehozása az alkalmazáshoz

A LUIS-alkalmazás modelljének elsődleges objektuma a szándék. A szándék igazodik a felhasználói kimondott szöveg szándékainak csoportosításához. A felhasználók kérdéseket tehetnek fel, vagy nyilatkozatot tehetnek, amelyek egy robottól (vagy más ügyfélalkalmazástól) egy adott kívánt választ keresnek. A szándékok például a repülőjegy foglalása, a célváros időjárásával kapcsolatos kérdések és az ügyfélszolgálat kapcsolattartási adatai.

Hozzon létre egy ModelCreateObjectet az egyedi szándék nevével, majd adja át az alkalmazásazonosítót, a verzióazonosítót és a ModelCreateObjectet a Model.AddIntentAsync metódusnak. A válasz a szándék azonosítója.

Az intentName érték az alkalmazás változóinak létrehozása szakasz változóinak részeként nehezen kódoltOrderPizzaIntent.

await client.Model.AddIntentAsync(appId, versionId, new ModelCreateObject()
{
    Name = intentName
});

Entitások létrehozása az alkalmazáshoz

Bár az entitásokra nincs szükség, a legtöbb alkalmazásban megtalálhatók. Az entitás adatokat nyer ki a felhasználói kimondott szövegből, ami a felhasználó szándékának teljes körű beszivárgásához szükséges. Többféle előre összeállított és egyéni entitás létezik, amelyek mindegyike saját adatátalakítási objektummodellekkel (DTO) rendelkezik. Az alkalmazáshoz hozzáadandó gyakori előre összeállított entitások a következők: szám, datetimeV2, geographyV2, ordinal.

Fontos tudni, hogy az entitások nincsenek szándékkal megjelölve. Ezek számos szándékra alkalmazhatók és általában alkalmazhatók. Csak a példafelhasználói kimondott szövegek vannak megjelölve egy adott, egyetlen szándékhoz.

Az entitások létrehozási módszerei a Modell osztály részét képezik. Minden entitástípus saját adatátalakítási objektummal (DTO) rendelkezik, amely általában a Modellek névtérben található szót model tartalmazza.

Az entitáslétrehozás kódja létrehoz egy gépi tanulási entitást, amely az alhálózatokra alkalmazott Quantity alhálózatokat és funkciókat tartalmazza.

Partial screenshot from portal showing the entity created, a machine-learning entity with subentities and features applied to the `Quantity` subentities.

// Add Prebuilt entity
await client.Model.AddPrebuiltAsync(appId, versionId, new[] { "number" });

// Define ml entity with children and grandchildren
var mlEntityDefinition = new EntityModelCreateObject
{
    Name = "Pizza order",
    Children = new[]
    {
        new ChildEntityModelCreateObject
        {
            Name = "Pizza",
            Children = new[]
            {
                new ChildEntityModelCreateObject { Name = "Quantity" },
                new ChildEntityModelCreateObject { Name = "Type" },
                new ChildEntityModelCreateObject { Name = "Size" }
            }
        },
        new ChildEntityModelCreateObject
        {
            Name = "Toppings",
            Children = new[]
            {
                new ChildEntityModelCreateObject { Name = "Type" },
                new ChildEntityModelCreateObject { Name = "Quantity" }
            }
        }
    }
};

// Add ML entity 
var mlEntityId = await client.Model.AddEntityAsync(appId, versionId, mlEntityDefinition); ;

// Add phraselist feature
var phraselistId = await client.Features.AddPhraseListAsync(appId, versionId, new PhraselistCreateObject
{
    EnabledForAllModels = false,
    IsExchangeable = true,
    Name = "QuantityPhraselist",
    Phrases = "few,more,extra"
});

// Get entity and subentities
var model = await client.Model.GetEntityAsync(appId, versionId, mlEntityId);
var toppingQuantityId = GetModelGrandchild(model, "Toppings", "Quantity");
var pizzaQuantityId = GetModelGrandchild(model, "Pizza", "Quantity");

// add model as feature to subentity model
await client.Features.AddEntityFeatureAsync(appId, versionId, pizzaQuantityId, new ModelFeatureInformation { ModelName = "number", IsRequired = true });
await client.Features.AddEntityFeatureAsync(appId, versionId, toppingQuantityId, new ModelFeatureInformation { ModelName = "number"});

// add phrase list as feature to subentity model
await client.Features.AddEntityFeatureAsync(appId, versionId, toppingQuantityId, new ModelFeatureInformation { FeatureName = "QuantityPhraselist" });

A quantity subentity azonosítójának megkereséséhez használja a következő metódust az osztályhoz, hogy a szolgáltatásokat az adott alhálózathoz rendelje.

static Guid GetModelGrandchild(NDepthEntityExtractor model, string childName, string grandchildName)
{
    return model.Children.
        Single(c => c.Name == childName).
        Children.
        Single(c => c.Name == grandchildName).Id;
}

Példa kimondott szöveg hozzáadása szándékhoz

A kimondott szöveg szándékának meghatározásához és az entitások kinyeréséhez az alkalmazásnak példákra van szüksége kimondott szövegekre. A példáknak egy adott, egyetlen szándékot kell megcélolniuk, és meg kell jelölni az összes egyéni entitást. Az előre összeállított entitásokat nem kell megjelölni.

Példa kimondott szövegek hozzáadásához hozzon létre egy exampleLabelObject objektumokat tartalmazó listát, amely minden egyes kimondott példához egy objektumot tartalmaz. Minden példában meg kell jelölni az összes entitást egy név-érték párok és entitásértékek szótárával. Az entitásértéknek pontosan úgy kell lennie, ahogyan a példa kimondott szövegében megjelenik.

Partial screenshot showing the labeled example utterance in the portal.

Az Examples.AddAsync hívása az alkalmazásazonosítóval, a verzióazonosítóval és a példával.

// Define labeled example
var labeledExampleUtteranceWithMLEntity = new ExampleLabelObject
{
    Text = "I want two small seafood pizzas with extra cheese.",
    IntentName = intentName,
    EntityLabels = new[]
    {
        new EntityLabelObject
        {
            StartCharIndex = 7,
            EndCharIndex = 48,
            EntityName = "Pizza order",
            Children = new[]
            {
                new EntityLabelObject
                {
                    StartCharIndex = 7,
                    EndCharIndex = 30,
                    EntityName = "Pizza",
                    Children = new[]
                    {
                        new EntityLabelObject { StartCharIndex = 7, EndCharIndex = 9, EntityName = "Quantity" },
                        new EntityLabelObject { StartCharIndex = 11, EndCharIndex = 15, EntityName = "Size" },
                        new EntityLabelObject { StartCharIndex = 17, EndCharIndex = 23, EntityName = "Type" }
                    }
                },
                new EntityLabelObject
                {
                    StartCharIndex = 37,
                    EndCharIndex = 48,
                    EntityName = "Toppings",
                    Children = new[]
                    {
                        new EntityLabelObject { StartCharIndex = 37, EndCharIndex = 41, EntityName = "Quantity" },
                        new EntityLabelObject { StartCharIndex = 43, EndCharIndex = 48, EntityName = "Type" }
                    }
                }
            }
        },
    }
};

// Add an example for the entity.
// Enable nested children to allow using multiple models with the same name.
// The quantity subentity and the phraselist could have the same exact name if this is set to True
await client.Examples.AddAsync(appId, versionId, labeledExampleUtteranceWithMLEntity, enableNestedChildren: true); 

Az alkalmazás betanítása

A modell létrehozása után a LUIS-alkalmazást be kell tanítani a modell ezen verziójára. A betanított modell használható egy tárolóban, vagy közzétehető az előkészítési vagy termékhelyen.

A Train.TrainVersionAsync metódusnak szüksége van az alkalmazásazonosítóra és a verzióazonosítóra.

Egy nagyon kicsi modell, például ez a rövid útmutató mutatja, nagyon gyorsan betanul. Éles szintű alkalmazások esetén az alkalmazásnak tartalmaznia kell egy lekérdezési hívást a GetStatusAsync metódushoz annak megállapításához, hogy a betanítás mikor vagy mikor sikerült. A válasz a ModelTrainingInfo objektumok listája, mindegyik objektumhoz külön állapottal. Minden objektumnak sikeresnek kell lennie ahhoz, hogy a betanítás befejezettnek minősüljön.

await client.Train.TrainVersionAsync(appId, versionId);
while (true)
{
    var status = await client.Train.GetStatusAsync(appId, versionId);
    if (status.All(m => m.Details.Status == "Success"))
    {
        // Assumes that we never fail, and that eventually we'll always succeed.
        break;
    }
}

Alkalmazás közzététele éles környezetben

Tegye közzé a LUIS-alkalmazást a PublishAsync metódussal. Ez közzéteszi az aktuális betanított verziót a végpont megadott pontjára. Az ügyfélalkalmazás ezzel a végpontkal küld felhasználói kimondott szövegeket a szándék előrejelzéséhez és az entitások kinyeréséhez.

await client.Apps.PublishAsync(appId, new ApplicationPublishObject { VersionId = versionId, IsStaging=false});

Az előrejelzési futtatókörnyezet-ügyfél hitelesítése

Használjon apiKeyServiceClientCredentials objektumot a kulccsal, és használja a végponttal egy LUISRuntimeClient objektum létrehozásához.

Figyelem

Ez a rövid útmutató a futtatókörnyezeti hitelesítő adatok részeként használja a szerzői kulcsot. A szerzői kulcs néhány lekérdezéssel lekérdezheti a futtatókörnyezetet. Átmeneti és éles szintű kód esetén cserélje le a szerkesztőkulcsot egy előrejelzési futtatókörnyezeti kulcsra.

var runtimeClient = new LUISRuntimeClient(credentials) { Endpoint = predictionEndpoint };

Előrejelzés lekérése futtatókörnyezetből

Adja hozzá a következő kódot a kérés létrehozásához az előrejelzési futtatókörnyezethez.

A felhasználói kimondott szöveg a PredictionRequest objektum része.

A GetSlotPredictionAsync metódusnak több paraméterre van szüksége, például az alkalmazásazonosítóra, a pontnévre, az előrejelzési kérelem objektumára a kérés teljesítéséhez. A többi lehetőség, például a részletesség, az összes szándék megjelenítése és a napló nem kötelező.

// Production == slot name
var request = new PredictionRequest { Query = "I want two small pepperoni pizzas with more salsa" };
var prediction = await runtimeClient.Prediction.GetSlotPredictionAsync(appId, "Production", request);
Console.Write(JsonConvert.SerializeObject(prediction, Formatting.Indented));

Az előrejelzési válasz egy JSON-objektum, amely tartalmazza a szándékot és a talált entitásokat.

{
    "query": "I want two small pepperoni pizzas with more salsa",
    "prediction": {
        "topIntent": "OrderPizzaIntent",
        "intents": {
            "OrderPizzaIntent": {
                "score": 0.753606856
            },
            "None": {
                "score": 0.119097039
            }
        },
        "entities": {
            "Pizza order": [
                {
                    "Pizza": [
                        {
                            "Quantity": [
                                2
                            ],
                            "Type": [
                                "pepperoni"
                            ],
                            "Size": [
                                "small"
                            ],
                            "$instance": {
                                "Quantity": [
                                    {
                                        "type": "builtin.number",
                                        "text": "two",
                                        "startIndex": 7,
                                        "length": 3,
                                        "score": 0.968156934,
                                        "modelTypeId": 1,
                                        "modelType": "Entity Extractor",
                                        "recognitionSources": [
                                            "model"
                                        ]
                                    }
                                ],
                                "Type": [
                                    {
                                        "type": "Type",
                                        "text": "pepperoni",
                                        "startIndex": 17,
                                        "length": 9,
                                        "score": 0.9345611,
                                        "modelTypeId": 1,
                                        "modelType": "Entity Extractor",
                                        "recognitionSources": [
                                            "model"
                                        ]
                                    }
                                ],
                                "Size": [
                                    {
                                        "type": "Size",
                                        "text": "small",
                                        "startIndex": 11,
                                        "length": 5,
                                        "score": 0.9592077,
                                        "modelTypeId": 1,
                                        "modelType": "Entity Extractor",
                                        "recognitionSources": [
                                            "model"
                                        ]
                                    }
                                ]
                            }
                        }
                    ],
                    "Toppings": [
                        {
                            "Type": [
                                "salsa"
                            ],
                            "Quantity": [
                                "more"
                            ],
                            "$instance": {
                                "Type": [
                                    {
                                        "type": "Type",
                                        "text": "salsa",
                                        "startIndex": 44,
                                        "length": 5,
                                        "score": 0.7292897,
                                        "modelTypeId": 1,
                                        "modelType": "Entity Extractor",
                                        "recognitionSources": [
                                            "model"
                                        ]
                                    }
                                ],
                                "Quantity": [
                                    {
                                        "type": "Quantity",
                                        "text": "more",
                                        "startIndex": 39,
                                        "length": 4,
                                        "score": 0.9320932,
                                        "modelTypeId": 1,
                                        "modelType": "Entity Extractor",
                                        "recognitionSources": [
                                            "model"
                                        ]
                                    }
                                ]
                            }
                        }
                    ],
                    "$instance": {
                        "Pizza": [
                            {
                                "type": "Pizza",
                                "text": "two small pepperoni pizzas",
                                "startIndex": 7,
                                "length": 26,
                                "score": 0.812199831,
                                "modelTypeId": 1,
                                "modelType": "Entity Extractor",
                                "recognitionSources": [
                                    "model"
                                ]
                            }
                        ],
                        "Toppings": [
                            {
                                "type": "Toppings",
                                "text": "more salsa",
                                "startIndex": 39,
                                "length": 10,
                                "score": 0.7250252,
                                "modelTypeId": 1,
                                "modelType": "Entity Extractor",
                                "recognitionSources": [
                                    "model"
                                ]
                            }
                        ]
                    }
                }
            ],
            "$instance": {
                "Pizza order": [
                    {
                        "type": "Pizza order",
                        "text": "two small pepperoni pizzas with more salsa",
                        "startIndex": 7,
                        "length": 42,
                        "score": 0.769223332,
                        "modelTypeId": 1,
                        "modelType": "Entity Extractor",
                        "recognitionSources": [
                            "model"
                        ]
                    }
                ]
            }
        }
    }
}

Az alkalmazás futtatása

Futtassa az alkalmazást az dotnet run alkalmazáskönyvtárból származó paranccsal.

dotnet run

Használja a Language Understanding (LUIS) ügyfélkódtárakat a Node.js a következő célokra:

  • Alkalmazás létrehozása
  • Szándék, gép által tanult entitás hozzáadása egy példa kimondott szöveggel
  • Alkalmazás betanítása és közzététele
  • Előrejelzési futtatókörnyezet lekérdezése

Referenciadokumentáció | szerzői éselőrejelzési NPM | Minták

Előfeltételek

  • Node.js
  • Azure-előfizetés – Ingyenes létrehozás
  • Az Azure-előfizetés birtokában hozzon létre egy Language Understanding szerzői erőforrást az Azure Portalon a kulcs és a végpont lekéréséhez. Várja meg, amíg üzembe helyezi, és kattintson az Erőforrás megnyitása gombra.
    • Szüksége lesz a kulcsra és a végpontra a létrehozott erőforrásból, hogy az alkalmazást a Language Understanding szerzői szolgáltatáshoz csatlakoztathassa. A rövid útmutató későbbi részében illessze be a kulcsot és a végpontot az alábbi kódba. A szolgáltatás kipróbálásához használhatja az ingyenes tarifacsomagot (F0).

Beállítás

Új JavaScript-alkalmazás létrehozása

  1. A konzolablakban hozzon létre egy új könyvtárat az alkalmazás számára, és lépjen abba a könyvtárba.

    mkdir quickstart-sdk && cd quickstart-sdk
    
  2. Inicializálja a könyvtárat JavaScript-alkalmazásként egy package.json fájl létrehozásával.

    npm init -y
    
  3. Hozzon létre egy JavaScript-kódnak elnevezett index.js fájlt.

    touch index.js
    

Az NPM-kódtárak telepítése

Az alkalmazáskönyvtárban telepítse a függőségeket a következő parancsokkal, és egyszerre egy sort hajt végre:

npm install @azure/ms-rest-js
npm install @azure/cognitiveservices-luis-authoring
npm install @azure/cognitiveservices-luis-runtime

A package.json következőnek kell kinéznie:

{
  "name": "quickstart-sdk",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@azure/cognitiveservices-luis-authoring": "^4.0.0-preview.3",
    "@azure/cognitiveservices-luis-runtime": "^5.0.0",
    "@azure/ms-rest-js": "^2.0.8"
  }
}

Objektummodell készítése

A Language Understanding (LUIS) szerzői ügyfél egy LUISAuthoringClient objektum, amely hitelesíti az Azure-t, amely tartalmazza a szerzői kulcsot.

Példakódok szerzői műveletekhez

Az ügyfél létrehozása után használja ezt az ügyfelet a funkciók elérésére, beleértve a következőket:

Előrejelzési objektummodell

A Language Understanding (LUIS) szerzői ügyfél egy LUISAuthoringClient objektum, amely hitelesíti az Azure-t, amely tartalmazza a szerzői kulcsot.

Példakódok előrejelzési futtatókörnyezethez

Az ügyfél létrehozása után használja ezt az ügyfelet a funkciók elérésére, beleértve a következőket:

Kódpéldák

Ezek a kódrészletek bemutatják, hogyan végezheti el a következőket a Python Language Understanding (LUIS) ügyfélkódtárával:

Függőségek hozzáadása

Nyissa meg a fájlt az index.js előnyben részesített szerkesztőben vagy ide néven, majd adja hozzá a következő függőségeket.

const msRest = require("@azure/ms-rest-js");
const LUIS_Authoring = require("@azure/cognitiveservices-luis-authoring");
const LUIS_Prediction = require("@azure/cognitiveservices-luis-runtime");

Sablonkód hozzáadása

  1. Adja hozzá a metódust quickstart és a hívását. Ez a metódus a fennmaradó kód nagy részét tartalmazza. Ezt a metódust a fájl végén hívjuk meg.

    const quickstart = async () => {
    
        // add calls here
    
    
    }
    quickstart()
        .then(result => console.log("Done"))
        .catch(err => {
            console.log(`Error: ${err}`)
            })
    
  2. Adja hozzá a fennmaradó kódot a gyorsútmutató-metódushoz, kivéve, ha másként van megadva.

Változók létrehozása az alkalmazáshoz

Hozzon létre két változókészletet: az elsőt módosítja, a második készlet pedig a kódmintában látható módon marad.

Fontos

Ne felejtse el eltávolítani a kulcsot a kódból, amikor elkészült, és soha ne tegye közzé nyilvánosan. Éles környezetben biztonságos módon tárolhatja és érheti el a hitelesítő adatait, például az Azure Key Vaultot. További információkért tekintse meg az Azure AI-szolgáltatások biztonsági cikkét.

  1. Hozzon létre változókat a szerzői kulcs és az erőforrásnevek tárolásához.

    const authoringKey = 'PASTE_YOUR_LUIS_AUTHORING_SUBSCRIPTION_KEY_HERE';
    
    const authoringEndpoint = "PASTE_YOUR_LUIS_AUTHORING_ENDPOINT_HERE";
    const predictionEndpoint = "PASTE_YOUR_LUIS_PREDICTION_ENDPOINT_HERE";
    
  2. Hozzon létre változókat a végpontok, az alkalmazásnév, a verzió és a szándék nevének tárolásához.

    const appName = "Contoso Pizza Company";
    const versionId = "0.1";
    const intentName = "OrderPizzaIntent";
    

Az ügyfél hitelesítése

Hozzon létre egy CognitiveServicesCredentials objektumot a kulccsal, és használja a végponttal egy LUISAuthoringClient objektum létrehozásához.

const luisAuthoringCredentials = new msRest.ApiKeyCredentials({
    inHeader: { "Ocp-Apim-Subscription-Key": authoringKey }
});
const client = new LUIS_Authoring.LUISAuthoringClient(
    luisAuthoringCredentials,
    authoringEndpoint
);

LUIS-alkalmazás létrehozása

A LUIS-alkalmazás tartalmazza a természetes nyelvi feldolgozási (NLP) modellt, beleértve a szándékokat, entitásokat és példa kimondott szövegeket.

Hozzon létre egy AppsOperation objektum hozzáadása metódust az alkalmazás létrehozásához. A név és a nyelvi kultúra kötelező tulajdonságok.

const create_app_payload = {
    name: appName,
    initialVersionId: versionId,
    culture: "en-us"
};

const createAppResult = await client.apps.add(
    create_app_payload
);

const appId = createAppResult.body

Szándék létrehozása az alkalmazáshoz

A LUIS-alkalmazás modelljének elsődleges objektuma a szándék. A szándék a felhasználói kimondott szöveg szándékainak csoportosításához igazodik. A felhasználók kérdéseket tehetnek fel, vagy nyilatkozatot tehetnek, amelyek egy robottól (vagy más ügyfélalkalmazástól) egy adott kívánt választ keresnek. A szándékok például a repülőjegy foglalása, a célváros időjárásával kapcsolatos kérdések és az ügyfélszolgálat kapcsolattartási adatai.

Használja a model.add_intent metódust az egyedi szándék nevével, majd adja meg az alkalmazásazonosítót, a verzióazonosítót és az új szándék nevét.

Az intentName érték az alkalmazás változóinak létrehozása szakasz változóinak részeként nehezen kódoltOrderPizzaIntent.

await client.model.addIntent(
    appId,
    versionId,
    { name: intentName }
);

Entitások létrehozása az alkalmazáshoz

Bár az entitásokra nincs szükség, a legtöbb alkalmazásban megtalálhatók. Az entitás adatokat nyer ki a felhasználói kimondott szövegből, ami a felhasználó szándékának teljes körű beszivárgásához szükséges. Többféle előre összeállított és egyéni entitás létezik, amelyek mindegyike saját adatátalakítási objektummodellekkel (DTO) rendelkezik. Az alkalmazáshoz hozzáadandó gyakori előre összeállított entitások a következők: szám, datetimeV2, geographyV2, ordinal.

Fontos tudni, hogy az entitások nincsenek szándékkal megjelölve. Ezek számos szándékra alkalmazhatók és általában alkalmazhatók. Csak a példafelhasználói kimondott szövegek vannak megjelölve egy adott, egyetlen szándékhoz.

Az entitások létrehozási módszerei a Modell osztály részét képezik. Minden entitástípus saját adatátalakítási objektummal (DTO) rendelkezik.

Az entitáslétrehozás kódja létrehoz egy gépi tanulási entitást, amely az alhálózatokra alkalmazott Quantity alhálózatokat és funkciókat tartalmazza.

Partial screenshot from portal showing the entity created, a machine-learning entity with subentities and features applied to the `Quantity` subentities.

// Add Prebuilt entity
await client.model.addPrebuilt(appId, versionId, ["number"]);

// Define ml entity with children and grandchildren
const mlEntityDefinition = {
    name: "Pizza order",
    children: [
        {
            name: "Pizza",
            children: [
                { name: "Quantity" },
                { name: "Type" },
                { name: "Size" }
            ]
        },
        {
            name: "Toppings",
            children: [
                { name: "Type" },
                { name: "Quantity" }
            ]
        }
    ]
};

// Add ML entity 
const response = await client.model.addEntity(appId, versionId, mlEntityDefinition);
const mlEntityId = response.body;

// Add phraselist feature
const phraselistResponse = await client.features.addPhraseList(appId, versionId, {
    enabledForAllModels: false,
    isExchangeable: true,
    name: "QuantityPhraselist",
    phrases: "few,more,extra"
});
const phraseListId = phraselistResponse.body;

// Get entity and subentities
const model = await client.model.getEntity(appId, versionId, mlEntityId);
const toppingQuantityId = getModelGrandchild(model, "Toppings", "Quantity");
const pizzaQuantityId = getModelGrandchild(model, "Pizza", "Quantity");

// add model as feature to subentity model
await client.features.addEntityFeature(appId, versionId, pizzaQuantityId, { modelName: "number", isRequired: true });
await client.features.addEntityFeature(appId, versionId, toppingQuantityId, { modelName: "number" });

// add phrase list as feature to subentity model
await client.features.addEntityFeature(appId, versionId, toppingQuantityId, { featureName: "QuantityPhraselist" });

A quantity subentity azonosítójának megkereséséhez tegye a következő metódust a metódus fölé quickstart , hogy a szolgáltatásokat az alhálózathoz rendelje.

const getModelGrandchild = (model, childName, grandchildName) => {

    return model.children.find(c => c.name == childName).children.find(c => c.name == grandchildName).id

}

Példa kimondott szöveg hozzáadása szándékhoz

A kimondott szöveg szándékának meghatározásához és az entitások kinyeréséhez az alkalmazásnak példákra van szüksége kimondott szövegekre. A példáknak egy adott, egyetlen szándékot kell megcélolniuk, és meg kell jelölni az összes egyéni entitást. Az előre összeállított entitásokat nem kell megjelölni.

Példa kimondott szövegek hozzáadásához hozzon létre egy exampleLabelObject objektumokat tartalmazó listát, amely minden egyes kimondott példához egy objektumot tartalmaz. Minden példában meg kell jelölni az összes entitást egy név-érték párok és entitásértékek szótárával. Az entitásértéknek pontosan úgy kell lennie, ahogyan a példa kimondott szövegében megjelenik.

Partial screenshot showing the labeled example utterance in the portal.

Az examples.add hívása az alkalmazásazonosítóval, a verzióazonosítóval és a példával.

// Define labeled example
const labeledExampleUtteranceWithMLEntity =
{
    text: "I want two small seafood pizzas with extra cheese.",
    intentName: intentName,
    entityLabels: [
        {
            startCharIndex: 7,
            endCharIndex: 48,
            entityName: "Pizza order",
            children: [
                {
                    startCharIndex: 7,
                    endCharIndex: 30,
                    entityName: "Pizza",
                    children: [
                        {
                            startCharIndex: 7,
                            endCharIndex: 9,
                            entityName: "Quantity"
                        },
                        {
                            startCharIndex: 11,
                            endCharIndex: 15,
                            entityName: "Size"
                        },
                        {
                            startCharIndex: 17,
                            endCharIndex: 23,
                            entityName: "Type"
                        }]
                },
                {
                    startCharIndex: 37,
                    endCharIndex: 48,
                    entityName: "Toppings",
                    children: [
                        {
                            startCharIndex: 37,
                            endCharIndex: 41,
                            entityName: "Quantity"
                        },
                        {
                            startCharIndex: 43,
                            endCharIndex: 48,
                            entityName: "Type"
                        }]
                }
            ]
        }
    ]
};

console.log("Labeled Example Utterance:", JSON.stringify(labeledExampleUtteranceWithMLEntity, null, 4 ));

// Add an example for the entity.
// Enable nested children to allow using multiple models with the same name.
// The quantity subentity and the phraselist could have the same exact name if this is set to True
await client.examples.add(appId, versionId, labeledExampleUtteranceWithMLEntity, { enableNestedChildren: true });

Az alkalmazás betanítása

A modell létrehozása után a LUIS-alkalmazást be kell tanítani a modell ezen verziójára. A betanított modell használható egy tárolóban, vagy közzétehető az előkészítési vagy termékhelyen.

A train.trainVersion metódusnak szüksége van az alkalmazásazonosítóra és a verzióazonosítóra.

Egy nagyon kicsi modell, például ez a rövid útmutató mutatja, nagyon gyorsan betanul. Éles szintű alkalmazások esetén a betanításnak tartalmaznia kell egy lekérdezési hívást a get_status metódushoz annak megállapításához, hogy a betanítás mikor vagy mikor sikerült. A válasz a ModelTrainingInfo objektumok listája, mindegyik objektumhoz külön állapottal. Minden objektumnak sikeresnek kell lennie ahhoz, hogy a betanítás befejezettnek minősüljön.

await client.train.trainVersion(appId, versionId);
while (true) {
    const status = await client.train.getStatus(appId, versionId);
    if (status.every(m => m.details.status == "Success")) {
        // Assumes that we never fail, and that eventually we'll always succeed.
        break;
    }
}

Alkalmazás közzététele éles környezetben

Tegye közzé a LUIS-alkalmazást az app.publish metódussal. Ez közzéteszi az aktuális betanított verziót a végpont megadott pontjára. Az ügyfélalkalmazás ezzel a végpontkal küld felhasználói kimondott szövegeket a szándék előrejelzéséhez és az entitások kinyeréséhez.

await client.apps.publish(appId, { versionId: versionId, isStaging: false });

Az előrejelzési futtatókörnyezet-ügyfél hitelesítése

Használjon msRest.ApiKeyCredentials objektumot a kulccsal, és használja a végponttal egy LUIS létrehozásához. LUISRuntimeClient objektum.

Figyelem

Ez a rövid útmutató a futtatókörnyezeti hitelesítő adatok részeként használja a szerzői kulcsot. A szerzői kulcs néhány lekérdezéssel lekérdezheti a futtatókörnyezetet. Átmeneti és éles szintű kód esetén cserélje le a szerkesztőkulcsot egy előrejelzési futtatókörnyezeti kulcsra.

const luisPredictionClient = new LUIS_Prediction.LUISRuntimeClient(
    luisAuthoringCredentials,
    predictionEndpoint
);

Előrejelzés lekérése futtatókörnyezetből

Adja hozzá a következő kódot a kérés létrehozásához az előrejelzési futtatókörnyezethez. A felhasználói kimondott szöveg a predictionRequest objektum része.

A luisRuntimeClient.prediction.getSlotPrediction metódusnak több paraméterre van szüksége, például az alkalmazásazonosítóra, a pont nevére és az előrejelzési kérelem objektumára a kérés teljesítéséhez. A többi lehetőség, például a részletesség, az összes szándék megjelenítése és a napló nem kötelező.

// Production == slot name
const request = { query: "I want two small pepperoni pizzas with more salsa" };
const response = await luisPredictionClient.prediction.getSlotPrediction(appId, "Production", request);
console.log(JSON.stringify(response.prediction, null, 4 ));

Az előrejelzési válasz egy JSON-objektum, amely tartalmazza a szándékot és a talált entitásokat.

{
    "query": "I want two small pepperoni pizzas with more salsa",
    "prediction": {
        "topIntent": "OrderPizzaIntent",
        "intents": {
            "OrderPizzaIntent": {
                "score": 0.753606856
            },
            "None": {
                "score": 0.119097039
            }
        },
        "entities": {
            "Pizza order": [
                {
                    "Pizza": [
                        {
                            "Quantity": [
                                2
                            ],
                            "Type": [
                                "pepperoni"
                            ],
                            "Size": [
                                "small"
                            ],
                            "$instance": {
                                "Quantity": [
                                    {
                                        "type": "builtin.number",
                                        "text": "two",
                                        "startIndex": 7,
                                        "length": 3,
                                        "score": 0.968156934,
                                        "modelTypeId": 1,
                                        "modelType": "Entity Extractor",
                                        "recognitionSources": [
                                            "model"
                                        ]
                                    }
                                ],
                                "Type": [
                                    {
                                        "type": "Type",
                                        "text": "pepperoni",
                                        "startIndex": 17,
                                        "length": 9,
                                        "score": 0.9345611,
                                        "modelTypeId": 1,
                                        "modelType": "Entity Extractor",
                                        "recognitionSources": [
                                            "model"
                                        ]
                                    }
                                ],
                                "Size": [
                                    {
                                        "type": "Size",
                                        "text": "small",
                                        "startIndex": 11,
                                        "length": 5,
                                        "score": 0.9592077,
                                        "modelTypeId": 1,
                                        "modelType": "Entity Extractor",
                                        "recognitionSources": [
                                            "model"
                                        ]
                                    }
                                ]
                            }
                        }
                    ],
                    "Toppings": [
                        {
                            "Type": [
                                "salsa"
                            ],
                            "Quantity": [
                                "more"
                            ],
                            "$instance": {
                                "Type": [
                                    {
                                        "type": "Type",
                                        "text": "salsa",
                                        "startIndex": 44,
                                        "length": 5,
                                        "score": 0.7292897,
                                        "modelTypeId": 1,
                                        "modelType": "Entity Extractor",
                                        "recognitionSources": [
                                            "model"
                                        ]
                                    }
                                ],
                                "Quantity": [
                                    {
                                        "type": "Quantity",
                                        "text": "more",
                                        "startIndex": 39,
                                        "length": 4,
                                        "score": 0.9320932,
                                        "modelTypeId": 1,
                                        "modelType": "Entity Extractor",
                                        "recognitionSources": [
                                            "model"
                                        ]
                                    }
                                ]
                            }
                        }
                    ],
                    "$instance": {
                        "Pizza": [
                            {
                                "type": "Pizza",
                                "text": "two small pepperoni pizzas",
                                "startIndex": 7,
                                "length": 26,
                                "score": 0.812199831,
                                "modelTypeId": 1,
                                "modelType": "Entity Extractor",
                                "recognitionSources": [
                                    "model"
                                ]
                            }
                        ],
                        "Toppings": [
                            {
                                "type": "Toppings",
                                "text": "more salsa",
                                "startIndex": 39,
                                "length": 10,
                                "score": 0.7250252,
                                "modelTypeId": 1,
                                "modelType": "Entity Extractor",
                                "recognitionSources": [
                                    "model"
                                ]
                            }
                        ]
                    }
                }
            ],
            "$instance": {
                "Pizza order": [
                    {
                        "type": "Pizza order",
                        "text": "two small pepperoni pizzas with more salsa",
                        "startIndex": 7,
                        "length": 42,
                        "score": 0.769223332,
                        "modelTypeId": 1,
                        "modelType": "Entity Extractor",
                        "recognitionSources": [
                            "model"
                        ]
                    }
                ]
            }
        }
    }
}

Az alkalmazás futtatása

Futtassa az alkalmazást a node index.js paranccsal a gyorsútmutatós fájlon.

node index.js

A Python Language Understanding (LUIS) ügyfélkódtárait a következő célokra használhatja:

  • Alkalmazás létrehozása
  • Szándék, gép által tanult entitás hozzáadása egy példa kimondott szöveggel
  • Alkalmazás betanítása és közzététele
  • Előrejelzési futtatókörnyezet lekérdezése

Referenciadokumentáció | szerzői és előrejelzési kódtár forráskódja | Csomagminták (Pypi) | -minták

Előfeltételek

  • A Python 3.x jelenlegi verziója.
  • Azure-előfizetés – Ingyenes létrehozás
  • Az Azure-előfizetés birtokában hozzon létre egy Language Understanding szerzői erőforrást az Azure Portalon a kulcs és a végpont lekéréséhez. Várja meg, amíg üzembe helyezi, és kattintson az Erőforrás megnyitása gombra.
    • Szüksége lesz a kulcsra és a végpontra a létrehozott erőforrásból, hogy az alkalmazást a Language Understanding szerzői szolgáltatáshoz csatlakoztathassa. A rövid útmutató későbbi részében illessze be a kulcsot és a végpontot az alábbi kódba. A szolgáltatás kipróbálásához használhatja az ingyenes tarifacsomagot (F0).

Beállítás

Új Python-alkalmazás létrehozása

  1. A konzolablakban hozzon létre egy új könyvtárat az alkalmazás számára, és lépjen abba a könyvtárba.

    mkdir quickstart-sdk && cd quickstart-sdk
    
  2. Hozzon létre egy Python-kódnak elnevezett authoring_and_predict.py fájlt.

    touch authoring_and_predict.py
    

Az ügyfélkódtár telepítése Pip használatával

Az alkalmazáskönyvtárban telepítse a Python Language Understanding (LUIS) ügyfélkódtárát a következő paranccsal:

pip install azure-cognitiveservices-language-luis

Objektummodell készítése

A Language Understanding (LUIS) szerzői ügyfél egy LUISAuthoringClient objektum, amely hitelesíti az Azure-t, amely tartalmazza a szerzői kulcsot.

Példakódok szerzői műveletekhez

Az ügyfél létrehozása után használja ezt az ügyfelet a funkciók elérésére, beleértve a következőket:

Előrejelzési objektummodell

A Language Understanding (LUIS) előrejelzési futtatókörnyezeti ügyfél egy LUISRuntimeClient objektum, amely hitelesíti az Azure-t, amely tartalmazza az erőforráskulcsot.

Példakódok előrejelzési futtatókörnyezethez

Az ügyfél létrehozása után használja ezt az ügyfelet a funkciók elérésére, beleértve a következőket:

Kódpéldák

Ezek a kódrészletek bemutatják, hogyan végezheti el a következőket a Python Language Understanding (LUIS) ügyfélkódtárával:

Függőségek hozzáadása

Adja hozzá az ügyfélkódtárakat a Python-fájlhoz.

from azure.cognitiveservices.language.luis.authoring import LUISAuthoringClient
from azure.cognitiveservices.language.luis.authoring.models import ApplicationCreateObject
from azure.cognitiveservices.language.luis.runtime import LUISRuntimeClient
from msrest.authentication import CognitiveServicesCredentials
from functools import reduce

import json, time, uuid

Sablonkód hozzáadása

  1. Adja hozzá a metódust quickstart és a hívását. Ez a metódus a fennmaradó kód nagy részét tartalmazza. Ezt a metódust a fájl végén hívjuk meg.

    def quickstart():
    
        # add calls here, remember to indent properly
    
    quickstart()
    
  2. Adja hozzá a fennmaradó kódot a gyorsútmutató-metódushoz, kivéve, ha másként van megadva.

Változók létrehozása az alkalmazáshoz

Hozzon létre két változókészletet: az elsőt módosítja, a második készlet pedig a kódmintában látható módon marad.

Fontos

Ne felejtse el eltávolítani a kulcsot a kódból, amikor elkészült, és soha ne tegye közzé nyilvánosan. Éles környezetben biztonságos módon tárolhatja és érheti el a hitelesítő adatait, például az Azure Key Vaultot. További információkért tekintse meg az Azure AI-szolgáltatások biztonsági cikkét.

  1. Hozzon létre változókat a szerzői kulcs és az erőforrásnevek tárolásához.

    authoringKey = 'PASTE_YOUR_LUIS_AUTHORING_SUBSCRIPTION_KEY_HERE'
    authoringEndpoint = 'PASTE_YOUR_LUIS_AUTHORING_ENDPOINT_HERE'
    predictionKey = 'PASTE_YOUR_LUIS_PREDICTION_SUBSCRIPTION_KEY_HERE'
    predictionEndpoint = 'PASTE_YOUR_LUIS_PREDICTION_ENDPOINT_HERE'
    
  2. Hozzon létre változókat a végpontok, az alkalmazásnév, a verzió és a szándék nevének tárolásához.

    # We use a UUID to avoid name collisions.
    appName = "Contoso Pizza Company " + str(uuid.uuid4())
    versionId = "0.1"
    intentName = "OrderPizzaIntent"
    

Az ügyfél hitelesítése

Hozzon létre egy CognitiveServicesCredentials objektumot a kulccsal, és használja a végponttal egy LUISAuthoringClient objektum létrehozásához.

client = LUISAuthoringClient(authoringEndpoint, CognitiveServicesCredentials(authoringKey))

LUIS-alkalmazás létrehozása

A LUIS-alkalmazás tartalmazza a természetes nyelvi feldolgozási (NLP) modellt, beleértve a szándékokat, entitásokat és példa kimondott szövegeket.

Hozzon létre egy AppsOperation objektum hozzáadása metódust az alkalmazás létrehozásához. A név és a nyelvi kultúra kötelező tulajdonságok.

# define app basics
appDefinition = ApplicationCreateObject (name=appName, initial_version_id=versionId, culture='en-us')

# create app
app_id = client.apps.add(appDefinition)

# get app id - necessary for all other changes
print("Created LUIS app with ID {}".format(app_id))

Szándék létrehozása az alkalmazáshoz

A LUIS-alkalmazás modelljének elsődleges objektuma a szándék. A szándék a felhasználói kimondott szöveg szándékainak csoportosításához igazodik. A felhasználók kérdéseket tehetnek fel, vagy nyilatkozatot tehetnek, amelyek egy robottól (vagy más ügyfélalkalmazástól) egy adott kívánt választ keresnek. A szándékok például a repülőjegy foglalása, a célváros időjárásával kapcsolatos kérdések és az ügyfélszolgálat kapcsolattartási adatai.

Használja a model.add_intent metódust az egyedi szándék nevével, majd adja meg az alkalmazásazonosítót, a verzióazonosítót és az új szándék nevét.

Az intentName érték az alkalmazás változóinak létrehozása szakasz változóinak részeként nehezen kódoltOrderPizzaIntent.

client.model.add_intent(app_id, versionId, intentName)

Entitások létrehozása az alkalmazáshoz

Bár az entitásokra nincs szükség, a legtöbb alkalmazásban megtalálhatók. Az entitás adatokat nyer ki a felhasználói kimondott szövegből, ami a felhasználó szándékának teljes körű beszivárgásához szükséges. Többféle előre összeállított és egyéni entitás létezik, amelyek mindegyike saját adatátalakítási objektummodellekkel (DTO) rendelkezik. Az alkalmazáshoz hozzáadandó gyakori előre összeállított entitások a következők: szám, datetimeV2, geographyV2, ordinal.

Fontos tudni, hogy az entitások nincsenek szándékkal megjelölve. Ezek számos szándékra alkalmazhatók és általában alkalmazhatók. Csak a példafelhasználói kimondott szövegek vannak megjelölve egy adott, egyetlen szándékhoz.

Az entitások létrehozási módszerei a ModelOperations osztály részét képezik. Minden entitástípus saját adatátalakítási objektummal (DTO) rendelkezik.

Az entitáslétrehozás kódja létrehoz egy gépi tanulási entitást, amely az alhálózatokra alkalmazott Quantity alhálózatokat és funkciókat tartalmazza.

Partial screenshot from portal showing the entity created, a machine-learning entity with subentities and features applied to the `Quantity` subentities.

# Add Prebuilt entity
client.model.add_prebuilt(app_id, versionId, prebuilt_extractor_names=["number"])

# define machine-learned entity
mlEntityDefinition = [
{
    "name": "Pizza",
    "children": [
        { "name": "Quantity" },
        { "name": "Type" },
        { "name": "Size" }
    ]
},
{
    "name": "Toppings",
    "children": [
        { "name": "Type" },
        { "name": "Quantity" }
    ]
}]

# add entity to app
modelId = client.model.add_entity(app_id, versionId, name="Pizza order", children=mlEntityDefinition)

# define phraselist - add phrases as significant vocabulary to app
phraseList = {
    "enabledForAllModels": False,
    "isExchangeable": True,
    "name": "QuantityPhraselist",
    "phrases": "few,more,extra"
}

# add phrase list to app
phraseListId = client.features.add_phrase_list(app_id, versionId, phraseList)

# Get entity and subentities
modelObject = client.model.get_entity(app_id, versionId, modelId)
toppingQuantityId = get_grandchild_id(modelObject, "Toppings", "Quantity")
pizzaQuantityId = get_grandchild_id(modelObject, "Pizza", "Quantity")

# add model as feature to subentity model
prebuiltFeatureRequiredDefinition = { "model_name": "number", "is_required": True }
client.features.add_entity_feature(app_id, versionId, pizzaQuantityId, prebuiltFeatureRequiredDefinition)

# add model as feature to subentity model
prebuiltFeatureNotRequiredDefinition = { "model_name": "number" }
client.features.add_entity_feature(app_id, versionId, toppingQuantityId, prebuiltFeatureNotRequiredDefinition)

# add phrase list as feature to subentity model
phraseListFeatureDefinition = { "feature_name": "QuantityPhraselist", "model_name": None }
client.features.add_entity_feature(app_id, versionId, toppingQuantityId, phraseListFeatureDefinition)

A quantity subentity azonosítójának megkereséséhez tegye a következő metódust a metódus fölé quickstart , hogy a szolgáltatásokat az alhálózathoz rendelje.

def get_grandchild_id(model, childName, grandChildName):
    
    theseChildren = next(filter((lambda child: child.name == childName), model.children))
    theseGrandchildren = next(filter((lambda child: child.name == grandChildName), theseChildren.children))
    
    grandChildId = theseGrandchildren.id
    
    return grandChildId

Példa kimondott szöveg hozzáadása szándékhoz

A kimondott szöveg szándékának meghatározásához és az entitások kinyeréséhez az alkalmazásnak példákra van szüksége kimondott szövegekre. A példáknak egy adott, egyetlen szándékot kell megcélolniuk, és meg kell jelölni az összes egyéni entitást. Az előre összeállított entitásokat nem kell megjelölni.

Példa kimondott szövegek hozzáadásához hozzon létre egy exampleLabelObject objektumokat tartalmazó listát, amely minden egyes kimondott példához egy objektumot tartalmaz. Minden példában meg kell jelölni az összes entitást egy név-érték párok és entitásértékek szótárával. Az entitásértéknek pontosan úgy kell lennie, ahogyan a példa kimondott szövegében megjelenik.

Partial screenshot showing the labeled example utterance in the portal.

Az examples.add hívása az alkalmazásazonosítóval, a verzióazonosítóval és a példával.

# Define labeled example
labeledExampleUtteranceWithMLEntity = {
    "text": "I want two small seafood pizzas with extra cheese.",
    "intentName": intentName,
    "entityLabels": [
        {
            "startCharIndex": 7,
            "endCharIndex": 48,
            "entityName": "Pizza order",
            "children": [
                {
                    "startCharIndex": 7,
                    "endCharIndex": 30,
                    "entityName": "Pizza",
                    "children": [
                        {
                            "startCharIndex": 7,
                            "endCharIndex": 9,
                            "entityName": "Quantity"
                        },
                        {
                            "startCharIndex": 11,
                            "endCharIndex": 15,
                            "entityName": "Size"
                        },
                        {
                            "startCharIndex": 17,
                            "endCharIndex": 23,
                            "entityName": "Type"
                        }]
                },
                {
                    "startCharIndex": 37,
                    "endCharIndex": 48,
                    "entityName": "Toppings",
                    "children": [
                        {
                            "startCharIndex": 37,
                            "endCharIndex": 41,
                            "entityName": "Quantity"
                        },
                        {
                            "startCharIndex": 43,
                            "endCharIndex": 48,
                            "entityName": "Type"
                        }]
                }
            ]
        }
    ]
}

print("Labeled Example Utterance:", labeledExampleUtteranceWithMLEntity)

# Add an example for the entity.
# Enable nested children to allow using multiple models with the same name.
# The quantity subentity and the phraselist could have the same exact name if this is set to True
client.examples.add(app_id, versionId, labeledExampleUtteranceWithMLEntity, { "enableNestedChildren": True })

Az alkalmazás betanítása

A modell létrehozása után a LUIS-alkalmazást be kell tanítani a modell ezen verziójára. A betanított modell használható egy tárolóban, vagy közzétehető az előkészítési vagy termékhelyen.

A train.train_version metódusnak szüksége van az alkalmazásazonosítóra és a verzióazonosítóra.

Egy nagyon kicsi modell, például ez a rövid útmutató mutatja, nagyon gyorsan betanul. Éles szintű alkalmazások esetén a betanításnak tartalmaznia kell egy lekérdezési hívást a get_status metódushoz annak megállapításához, hogy a betanítás mikor vagy mikor sikerült. A válasz a ModelTrainingInfo objektumok listája, mindegyik objektumhoz külön állapottal. Minden objektumnak sikeresnek kell lennie ahhoz, hogy a betanítás befejezettnek minősüljön.

client.train.train_version(app_id, versionId)
waiting = True
while waiting:
    info = client.train.get_status(app_id, versionId)

    # get_status returns a list of training statuses, one for each model. Loop through them and make sure all are done.
    waiting = any(map(lambda x: 'Queued' == x.details.status or 'InProgress' == x.details.status, info))
    if waiting:
        print ("Waiting 10 seconds for training to complete...")
        time.sleep(10)
    else: 
        print ("trained")
        waiting = False

Alkalmazás közzététele éles környezetben

Tegye közzé a LUIS-alkalmazást az app.publish metódussal. Ez közzéteszi az aktuális betanított verziót a végpont megadott pontjára. Az ügyfélalkalmazás ezzel a végpontkal küld felhasználói kimondott szövegeket a szándék előrejelzéséhez és az entitások kinyeréséhez.

# Mark the app as public so we can query it using any prediction endpoint.
# Note: For production scenarios, you should instead assign the app to your own LUIS prediction endpoint. See:
# https://docs.microsoft.com/en-gb/azure/cognitive-services/luis/luis-how-to-azure-subscription#assign-a-resource-to-an-app
client.apps.update_settings(app_id, is_public=True)

responseEndpointInfo = client.apps.publish(app_id, versionId, is_staging=False)

Az előrejelzési futtatókörnyezet-ügyfél hitelesítése

Használja a hitelesítő adatok objektumot a kulccsal, és használja a végponttal egy LUISRuntimeClientConfiguration objektum létrehozásához.

Figyelem

Ez a rövid útmutató a futtatókörnyezeti hitelesítő adatok részeként használja a szerzői kulcsot. A szerzői kulcs néhány lekérdezéssel lekérdezheti a futtatókörnyezetet. Átmeneti és éles szintű kód esetén cserélje le a szerkesztőkulcsot egy előrejelzési futtatókörnyezeti kulcsra.

runtimeCredentials = CognitiveServicesCredentials(predictionKey)
clientRuntime = LUISRuntimeClient(endpoint=predictionEndpoint, credentials=runtimeCredentials)

Előrejelzés lekérése futtatókörnyezetből

Adja hozzá a következő kódot a kérés létrehozásához az előrejelzési futtatókörnyezethez.

A felhasználói kimondott szöveg a prediction_request objektum része.

A get_slot_prediction metódusnak több paraméterre van szüksége, például az alkalmazásazonosítóra, a pontnévre és az előrejelzési kérelem objektumára a kérés teljesítéséhez. A többi lehetőség, például a részletesség, az összes szándék megjelenítése és a napló nem kötelező. A kérés egy PredictionResponse objektumot ad vissza.

# Production == slot name
predictionRequest = { "query" : "I want two small pepperoni pizzas with more salsa" }

predictionResponse = clientRuntime.prediction.get_slot_prediction(app_id, "Production", predictionRequest)
print("Top intent: {}".format(predictionResponse.prediction.top_intent))
print("Sentiment: {}".format (predictionResponse.prediction.sentiment))
print("Intents: ")

for intent in predictionResponse.prediction.intents:
    print("\t{}".format (json.dumps (intent)))
print("Entities: {}".format (predictionResponse.prediction.entities))

Az előrejelzési válasz egy JSON-objektum, amely tartalmazza a szándékot és a talált entitásokat.

{
    "query": "I want two small pepperoni pizzas with more salsa",
    "prediction": {
        "topIntent": "OrderPizzaIntent",
        "intents": {
            "OrderPizzaIntent": {
                "score": 0.753606856
            },
            "None": {
                "score": 0.119097039
            }
        },
        "entities": {
            "Pizza order": [
                {
                    "Pizza": [
                        {
                            "Quantity": [
                                2
                            ],
                            "Type": [
                                "pepperoni"
                            ],
                            "Size": [
                                "small"
                            ],
                            "$instance": {
                                "Quantity": [
                                    {
                                        "type": "builtin.number",
                                        "text": "two",
                                        "startIndex": 7,
                                        "length": 3,
                                        "score": 0.968156934,
                                        "modelTypeId": 1,
                                        "modelType": "Entity Extractor",
                                        "recognitionSources": [
                                            "model"
                                        ]
                                    }
                                ],
                                "Type": [
                                    {
                                        "type": "Type",
                                        "text": "pepperoni",
                                        "startIndex": 17,
                                        "length": 9,
                                        "score": 0.9345611,
                                        "modelTypeId": 1,
                                        "modelType": "Entity Extractor",
                                        "recognitionSources": [
                                            "model"
                                        ]
                                    }
                                ],
                                "Size": [
                                    {
                                        "type": "Size",
                                        "text": "small",
                                        "startIndex": 11,
                                        "length": 5,
                                        "score": 0.9592077,
                                        "modelTypeId": 1,
                                        "modelType": "Entity Extractor",
                                        "recognitionSources": [
                                            "model"
                                        ]
                                    }
                                ]
                            }
                        }
                    ],
                    "Toppings": [
                        {
                            "Type": [
                                "salsa"
                            ],
                            "Quantity": [
                                "more"
                            ],
                            "$instance": {
                                "Type": [
                                    {
                                        "type": "Type",
                                        "text": "salsa",
                                        "startIndex": 44,
                                        "length": 5,
                                        "score": 0.7292897,
                                        "modelTypeId": 1,
                                        "modelType": "Entity Extractor",
                                        "recognitionSources": [
                                            "model"
                                        ]
                                    }
                                ],
                                "Quantity": [
                                    {
                                        "type": "Quantity",
                                        "text": "more",
                                        "startIndex": 39,
                                        "length": 4,
                                        "score": 0.9320932,
                                        "modelTypeId": 1,
                                        "modelType": "Entity Extractor",
                                        "recognitionSources": [
                                            "model"
                                        ]
                                    }
                                ]
                            }
                        }
                    ],
                    "$instance": {
                        "Pizza": [
                            {
                                "type": "Pizza",
                                "text": "two small pepperoni pizzas",
                                "startIndex": 7,
                                "length": 26,
                                "score": 0.812199831,
                                "modelTypeId": 1,
                                "modelType": "Entity Extractor",
                                "recognitionSources": [
                                    "model"
                                ]
                            }
                        ],
                        "Toppings": [
                            {
                                "type": "Toppings",
                                "text": "more salsa",
                                "startIndex": 39,
                                "length": 10,
                                "score": 0.7250252,
                                "modelTypeId": 1,
                                "modelType": "Entity Extractor",
                                "recognitionSources": [
                                    "model"
                                ]
                            }
                        ]
                    }
                }
            ],
            "$instance": {
                "Pizza order": [
                    {
                        "type": "Pizza order",
                        "text": "two small pepperoni pizzas with more salsa",
                        "startIndex": 7,
                        "length": 42,
                        "score": 0.769223332,
                        "modelTypeId": 1,
                        "modelType": "Entity Extractor",
                        "recognitionSources": [
                            "model"
                        ]
                    }
                ]
            }
        }
    }
}

Az alkalmazás futtatása

Futtassa az alkalmazást a python paranccsal a gyorsútmutatós fájlon.

python authoring_and_predict.py

A rövid útmutató követésével egymás után három REST-hívást fog végrehajtani.

Referenciadokumentáció

Előfeltételek

  • Ingyenes LUIS-fiók .

  • Szövegszerkesztő, például Visual Studio Code.

  • A parancssori program cURL. A cURL program már telepítve van a macOS-en, a legtöbb Linux-disztribúción és a Windows 10 1803-ás és újabb buildjén.

    Ha telepítenie kell a cURL-t, letöltheti a cURL-t a cURL letöltési oldaláról.

Pizza alkalmazás létrehozása

Hozza létre a pizzaalkalmazást.

  1. Válassza a pizza-app-for-luis-v6.json a fájl GitHub-oldalának megjelenítéséhez pizza-app-for-luis.json .
  2. Kattintson a jobb gombbal vagy hosszan a Nyers gombra, és válassza a Mentés hivatkozást a pizza-app-for-luis.json számítógépre való mentéshez.
  3. Jelentkezzen be a LUIS-portálra.
  4. Válassza a Saját alkalmazások.
  5. A Saját alkalmazások lapon válassza az + Új alkalmazás lehetőséget a beszélgetéshez.
  6. Válassza az Importálás JSON-ként lehetőséget.
  7. Az Új alkalmazás importálása párbeszédpanelen válassza a Fájl kiválasztása gombot.
  8. Jelölje ki a pizza-app-for-luis.json letöltött fájlt, majd válassza a Megnyitás lehetőséget.
  9. Az Új alkalmazás importálása párbeszédpanel Név mezőjébe írja be a Pizza alkalmazás nevét, majd válassza a Kész gombot.

Az alkalmazás importálva lesz.

Ha megjelenik egy párbeszédpanel : Hatékony LUIS-alkalmazás létrehozása, zárja be a párbeszédpanelt.

A Pizza alkalmazás betanítása és közzététele

A Szándékok lapnak meg kell jelennie a Pizza alkalmazásban található szándékok listájával.

  1. A LUIS-webhely jobb felső részén válassza a Betanítása gombot.

    Train button

  2. A betanítás akkor fejeződik be, ha a Betanítás gomb le van tiltva.

Ahhoz, hogy LUIS-előrejelzést kapjon egy csevegőrobotban vagy más ügyfélalkalmazásban, közzé kell tennie az alkalmazást az előrejelzési végponton.

  1. A jobb felső navigációs sávon válassza a Közzététel lehetőséget.

    A screenshot of the button for publishing to the endpoint.

  2. Válassza ki az éles pontot, majd válassza a Kész lehetőséget.

    A screenshot of LUIS publishing to the endpoint.

  3. Válassza a Végpont URL-címeinek elérése lehetőséget az értesítésben az Azure-erőforrások lapra való ugráshoz. Csak akkor láthatja az URL-címeket, ha egy előrejelzési erőforrás van társítva az alkalmazáshoz. Az Azure-erőforrások lap a Kezelés gombra kattintva is megtalálható.

    A screenshot of a message showing the app has been published.

Szerzői erőforrás hozzáadása a Pizza alkalmazáshoz

  1. Válassza a MANAGE (KEZELÉS) lehetőséget.
  2. Válassza az Azure Resources (Azure-erőforrások) lehetőséget.
  3. Válassza a Szerzői erőforrás lehetőséget.
  4. Válassza a Szerkesztési erőforrás módosítása lehetőséget.

Ha szerzői erőforrással rendelkezik, adja meg a szerzői erőforrás bérlőnevét, előfizetésének nevét és LUIS-erőforrásnevét .

Ha nem rendelkezik szerzői erőforrással:

  1. Válassza az Új erőforrás létrehozása lehetőséget.
  2. Adja meg a bérlő nevét, az erőforrás nevét, az előfizetés nevét és az Azure-erőforráscsoport nevét.

A Pizza alkalmazás készen áll a használatra.

A Pizza alkalmazás hozzáférési értékeinek rögzítése

Az új Pizza-alkalmazás használatához szüksége lesz az alkalmazásazonosítóra, a szerzői kulcsra és a Pizza-alkalmazás szerzői végpontjára. Az előrejelzések lekéréséhez külön előrejelzési végpontra és előrejelzési kulcsra lesz szüksége.

Az alábbi értékek megkeresése:

  1. A Szándékok lapon válassza a MANAGE lehetőséget.
  2. Az Alkalmazás Gépház lapon rögzítse az alkalmazásazonosítót.
  3. Válassza az Azure Resources (Azure-erőforrások) lehetőséget.
  4. Válassza a Szerzői erőforrás lehetőséget.
  5. A Szerzői erőforrás és előrejelzési erőforrások lapon jegyezze fel az elsődleges kulcsot. Ez az érték a szerzői kulcs.
  6. Rögzítse a végpont URL-címét. Ez az érték a szerzői végpont.

JSON-fájl létrehozása a Pizza alkalmazás betanítása érdekében

Ha három kimondott példaszöveget tartalmazó JSON-fájlt szeretne létrehozni, mentse a következő JSON-adatokat egy nevesített ExampleUtterances.JSONfájlba:

[
  {
    "text": "order a pizza",
    "intentName": "ModifyOrder",
    "entityLabels": [
      {
        "entityName": "Order",
        "startCharIndex": 6,
        "endCharIndex": 12
      }
    ]
  },
  {
    "text": "order a large pepperoni pizza",
    "intentName": "ModifyOrder",
    "entityLabels": [
      {
        "entityName": "Order",
        "startCharIndex": 6,
        "endCharIndex": 28
      },
      {
        "entityName": "FullPizzaWithModifiers",
        "startCharIndex": 6,
        "endCharIndex": 28
      },
      {
        "entityName": "PizzaType",
        "startCharIndex": 14,
        "endCharIndex": 28
      },
      {
        "entityName": "Size",
        "startCharIndex": 8,
        "endCharIndex": 12
      }
    ]
  },
  {
    "text": "I want two large pepperoni pizzas on thin crust",
    "intentName": "ModifyOrder",
    "entityLabels": [
      {
        "entityName": "Order",
        "startCharIndex": 7,
        "endCharIndex": 46
      },
      {
        "entityName": "FullPizzaWithModifiers",
        "startCharIndex": 7,
        "endCharIndex": 46
      },
      {
        "entityName": "PizzaType",
        "startCharIndex": 17,
        "endCharIndex": 32
      },
      {
        "entityName": "Size",
        "startCharIndex": 11,
        "endCharIndex": 15
      },
      {
        "entityName": "Quantity",
        "startCharIndex": 7,
        "endCharIndex": 9
      },
      {
        "entityName": "Crust",
        "startCharIndex": 37,
        "endCharIndex": 46
      }
    ]
  }
]`

A JSON-példaszövegek egy adott formátumot követnek.

A text mező a kimondott példaszövegeket tartalmazza. Az intentName mezőnek a LUIS-alkalmazásban található létező szándék nevének kell megfelelnie. Az entityLabels mező kötelező. Ha nem szeretne entitásokat megcímkézni, adjon meg egy üres tömböt.

Ha az entityLabels tömb nem üres, a startCharIndex és az endCharIndex indexnek az entityName mezőben hivatkozott entitást kell jelölnie. Az index nulla alapú. Ha a feliratot a szöveg egy részén kezdi vagy befejezi, a kimondott szövegek hozzáadására irányuló API-hívás meghiúsul.

Példa kimondott szövegek hozzáadása

  1. A példaszövegek kötegének feltöltéséhez másolja ezt a parancsot a szövegszerkesztőbe:

    curl "***YOUR-AUTHORING-ENDPOINT***/luis/authoring/v3.0-preview/apps/***YOUR-APP-ID***/versions/***YOUR-APP-VERSION***/examples?verbose=true&show-all-intents=true" ^
          --request POST ^
          --header "Content-Type:application/json" ^
          --header "Ocp-Apim-Subscription-Key: ***YOUR-AUTHORING-KEY***" ^
          --data "@ExampleUtterances.JSON"
    
  2. Cserélje le a saját értékekkel ***YOUR- kezdődő értékeket.

    Tájékoztatás Cél
    ***YOUR-AUTHORING-ENDPOINT*** A szerzői URL-végpont. Például: "https://REPLACE-WITH-YOUR-RESOURCE-NAME.api.cognitive.microsoft.com/". Az erőforrás létrehozásakor be kell állítania az erőforrás nevét.
    ***YOUR-APP-ID*** A LUIS-alkalmazás azonosítója.
    ***YOUR-APP-VERSION*** A LUIS-alkalmazás verziója. A Pizza alkalmazás esetében a verziószám "0.1" az idézőjelek nélkül.
    ***YOUR-AUTHORING-KEY*** A 32 karakteres szerzői kulcs.

    A hozzárendelt kulcsok és erőforrások a LUIS-portál Kezelés szakaszában, az Azure-erőforrások oldalán láthatók. Az alkalmazásazonosító az Alkalmazás Gépház lapon található Kezelés szakaszban érhető el.

    Fontos

    Ne felejtse el eltávolítani a kulcsot a kódból, amikor elkészült, és soha ne tegye közzé nyilvánosan. Éles környezetben biztonságos módon tárolhatja és érheti el a hitelesítő adatait, például az Azure Key Vaultot. További információkért tekintse meg az Azure AI-szolgáltatások biztonsági cikkét.

  3. Indítsa el a parancssort (Windows) vagy terminált (macOS és Linux), és módosítsa a könyvtárakat ugyanarra a könyvtárra, ahová a ExampleUtterances.JSON fájlt mentette.

  4. Másolja ki a cURL parancsot a szerkesztőből, és illessze be egy parancssorba (Windows) vagy terminálba (macOS és Linux). Nyomja le az Enter billentyűt a parancs végrehajtásához.

    A következő választ kell látnia:

    [{"value":{"ExampleId":1255129706,"UtteranceText":"order a pizza"},"hasError":false},{"value":{"ExampleId":1255129707,"UtteranceText":"order a large pepperoni pizza"},"hasError":false},{"value":{"ExampleId":1255129708,"UtteranceText":"i want two large pepperoni pizzas on thin crust"},"hasError":false}]
    

    Az alábbiakban az olvashatóság érdekében formázott kimenet látható:

    [
      {
        "value": {
          "ExampleId": 1255129706,
          "UtteranceText": "order a pizza"
        },
        "hasError": false
      },
      {
        "value": {
          "ExampleId": 1255129707,
          "UtteranceText": "order a large pepperoni pizza"
        },
        "hasError": false
      },
      {
        "value": {
          "ExampleId": 1255129708,
          "UtteranceText": "i want two large pepperoni pizzas on thin crust"
        },
        "hasError": false
      }
    ]
    

A Pizza alkalmazásmodell betanítása

  1. A Pizza alkalmazás betanítási munkamenetének megkezdéséhez másolja ezt a parancsot a szövegszerkesztőbe:

    curl "***YOUR-AUTHORING-ENDPOINT***/luis/authoring/v3.0-preview/apps/***YOUR-APP-ID***/versions/***YOUR-APP-VERSION***/train?verbose=true&show-all-intents=true" ^
          --data "" ^
          --request POST ^
          --header "Content-Type:application/json" ^
          --header "Ocp-Apim-Subscription-Key: ***YOUR-AUTHORING-KEY***"
    
  2. Ahogy korábban is tette, cserélje le az értékeket a saját értékeire ***YOUR- .

  3. Másolja ki a cURL parancsot a szerkesztőből, és illessze be egy parancssorba (Windows) vagy terminálba (macOS és Linux). Nyomja le az Enter billentyűt a parancs végrehajtásához.

    A következő választ kell látnia:

    {"statusId":2,"status":"UpToDate"}
    

    Az alábbiakban az olvashatóság érdekében formázott kimenet látható:

    {
      "statusId": 2,
      "status": "UpToDate"
    }
    

A betanítás állapotának lekérése

  1. A betanítási munkamenet betanítási állapotának lekéréséhez másolja ezt a parancsot a szövegszerkesztőbe:

    curl "***YOUR-AUTHORING-ENDPOINT***/luis/authoring/v3.0-preview/apps/***YOUR-APP-ID***/versions/***YOUR-APP-VERSION***/train?verbose=true&show-all-intents=true" ^
            --request GET ^
            --header "Content-Type:application/json" ^
            --header "Ocp-Apim-Subscription-Key: ***YOUR-AUTHORING-KEY***"
    
  2. Ahogy korábban is tette, cserélje le az értékeket a saját értékeire ***YOUR- .

  3. Másolja ki a cURL parancsot a szerkesztőből, és illessze be egy parancssorba (Windows) vagy terminálba (macOS és Linux). Nyomja le az Enter billentyűt a parancs végrehajtásához.

    A következő választ kell látnia:

    [{"modelId":"8eb7ad8f-5db5-4c28-819b-ca3905fffd80","details":{"statusId":2,"status":"UpToDate","exampleCount":171}},{"modelId":"6f53bc92-ae54-44ce-bc4e-010d1f8cfda0","details":{"statusId":2,"status":"UpToDate","exampleCount":171}},{"modelId":"6cb17888-ad6e-464c-82c0-d37fd1f2c4f8","details":{"statusId":2,"status":"UpToDate","exampleCount":171}},{"modelId":"a16fc4fd-1949-4e77-9de3-30369f16c3a5","details":{"statusId":2,"status":"UpToDate","exampleCount":171}},{"modelId":"6bacdb75-1889-4f93-8971-8c8995ff8960","details":{"statusId":2,"status":"UpToDate","exampleCount":171}},{"modelId":"be963f4c-4898-48d7-9eba-3c6af0867b9d","details":{"statusId":2,"status":"UpToDate","exampleCount":171}}]
    

    Az alábbiakban az olvashatóság érdekében formázott kimenet látható:

    [
      {
        "modelId": "8eb7ad8f-5db5-4c28-819b-ca3905fffd80",
        "details": {
          "statusId": 2,
          "status": "UpToDate",
          "exampleCount": 171
        }
      },
      {
        "modelId": "6f53bc92-ae54-44ce-bc4e-010d1f8cfda0",
        "details": {
          "statusId": 2,
          "status": "UpToDate",
          "exampleCount": 171
        }
      },
      {
        "modelId": "6cb17888-ad6e-464c-82c0-d37fd1f2c4f8",
        "details": {
          "statusId": 2,
          "status": "UpToDate",
          "exampleCount": 171
        }
      },
      {
        "modelId": "a16fc4fd-1949-4e77-9de3-30369f16c3a5",
        "details": {
          "statusId": 2,
          "status": "UpToDate",
          "exampleCount": 171
        }
      },
      {
        "modelId": "6bacdb75-1889-4f93-8971-8c8995ff8960",
        "details": {
          "statusId": 2,
          "status": "UpToDate",
          "exampleCount": 171
        }
      },
      {
        "modelId": "be963f4c-4898-48d7-9eba-3c6af0867b9d",
        "details": {
          "statusId": 2,
          "status": "UpToDate",
          "exampleCount": 171
        }
      }
    ]
    

Szándék lekérése az előrejelzési végpontról

A cURL használatával lekérdezheti az előrejelzési végpontot , és előrejelzési eredményt kaphat.

Feljegyzés

Ez a parancs az előrejelzési végpontot használja.

  1. Másolja ezt a parancsot a szövegszerkesztőbe:

    curl "https://***YOUR-PREDICTION-ENDPOINT***/luis/prediction/v3.0/apps/***YOUR-APP-ID***/slots/production/predict" ^
          --request GET ^
          --get ^
          --data "subscription-key=***YOUR-PREDICTION-KEY***" ^
          --data "verbose=true" ^
          --data "show-all-intents=true" ^
          --data-urlencode "query=I want two large pepperoni pizzas on thin crust please"
    
  2. Cserélje le a saját értékekkel ***YOUR- kezdődő értékeket.

    Tájékoztatás Cél
    ***YOUR-PREDICTION-ENDPOINT*** Az előrejelzési URL-végpont. A LUIS-portál azure-erőforrások lapján található az alkalmazáshoz.
    Például: https://westus.api.cognitive.microsoft.com/.
    ***YOUR-APP-ID*** Az alkalmazás azonosítója. A LUIS-portálon található Alkalmazás Gépház az alkalmazás lapja.
    ***YOUR-PREDICTION-KEY*** A 32 karakteres előrejelzési kulcs. A LUIS-portál azure-erőforrások lapján található az alkalmazáshoz.
  3. Másolja a szöveget egy konzolablakba, és nyomja le az Enter billentyűt a parancs végrehajtásához:

  4. Tekintse át az előrejelzési választ, amelyet JSON-ként ad vissza:

    {"query":"I want two large pepperoni pizzas on thin crust please","prediction":{"topIntent":"ModifyOrder","intents":{"ModifyOrder":{"score":1.0},"None":{"score":8.55E-09},"Greetings":{"score":1.82222226E-09},"CancelOrder":{"score":1.47272727E-09},"Confirmation":{"score":9.8125E-10}},"entities":{"Order":[{"FullPizzaWithModifiers":[{"PizzaType":["pepperoni pizzas"],"Size":[["Large"]],"Quantity":[2],"Crust":[["Thin"]],"$instance":{"PizzaType":[{"type":"PizzaType","text":"pepperoni pizzas","startIndex":17,"length":16,"score":0.9978157,"modelTypeId":1,"modelType":"Entity Extractor","recognitionSources":["model"]}],"Size":[{"type":"SizeList","text":"large","startIndex":11,"length":5,"score":0.9984481,"modelTypeId":1,"modelType":"Entity Extractor","recognitionSources":["model"]}],"Quantity":[{"type":"builtin.number","text":"two","startIndex":7,"length":3,"score":0.999770939,"modelTypeId":1,"modelType":"Entity Extractor","recognitionSources":["model"]}],"Crust":[{"type":"CrustList","text":"thin crust","startIndex":37,"length":10,"score":0.933985531,"modelTypeId":1,"modelType":"Entity Extractor","recognitionSources":["model"]}]}}],"$instance":{"FullPizzaWithModifiers":[{"type":"FullPizzaWithModifiers","text":"two large pepperoni pizzas on thin crust","startIndex":7,"length":40,"score":0.90681237,"modelTypeId":1,"modelType":"Entity Extractor","recognitionSources":["model"]}]}}],"ToppingList":[["Pepperoni"]],"$instance":{"Order":[{"type":"Order","text":"two large pepperoni pizzas on thin crust","startIndex":7,"length":40,"score":0.9047088,"modelTypeId":1,"modelType":"Entity Extractor","recognitionSources":["model"]}],"ToppingList":[{"type":"ToppingList","text":"pepperoni","startIndex":17,"length":9,"modelTypeId":5,"modelType":"List Entity Extractor","recognitionSources":["model"]}]}}}}
    

    Az olvashatóság érdekében formázott JSON-válasz:

    {
      "query": "I want two large pepperoni pizzas on thin crust please",
      "prediction": {
        "topIntent": "ModifyOrder",
        "intents": {
          "ModifyOrder": {
            "score": 1.0
          },
          "None": {
            "score": 8.55e-9
          },
          "Greetings": {
            "score": 1.82222226e-9
          },
          "CancelOrder": {
            "score": 1.47272727e-9
          },
          "Confirmation": {
            "score": 9.8125e-10
          }
        },
        "entities": {
          "Order": [
            {
              "FullPizzaWithModifiers": [
                {
                  "PizzaType": [
                    "pepperoni pizzas"
                  ],
                  "Size": [
                    [
                      "Large"
                    ]
                  ],
                  "Quantity": [
                    2
                  ],
                  "Crust": [
                    [
                      "Thin"
                    ]
                  ],
                  "$instance": {
                    "PizzaType": [
                      {
                        "type": "PizzaType",
                        "text": "pepperoni pizzas",
                        "startIndex": 17,
                        "length": 16,
                        "score": 0.9978157,
                        "modelTypeId": 1,
                        "modelType": "Entity Extractor",
                        "recognitionSources": [
                          "model"
                        ]
                      }
                    ],
                    "Size": [
                      {
                        "type": "SizeList",
                        "text": "large",
                        "startIndex": 11,
                        "length": 5,
                        "score": 0.9984481,
                        "modelTypeId": 1,
                        "modelType": "Entity Extractor",
                        "recognitionSources": [
                          "model"
                        ]
                      }
                    ],
                    "Quantity": [
                      {
                        "type": "builtin.number",
                        "text": "two",
                        "startIndex": 7,
                        "length": 3,
                        "score": 0.999770939,
                        "modelTypeId": 1,
                        "modelType": "Entity Extractor",
                        "recognitionSources": [
                          "model"
                        ]
                      }
                    ],
                    "Crust": [
                      {
                        "type": "CrustList",
                        "text": "thin crust",
                        "startIndex": 37,
                        "length": 10,
                        "score": 0.933985531,
                        "modelTypeId": 1,
                        "modelType": "Entity Extractor",
                        "recognitionSources": [
                          "model"
                        ]
                      }
                    ]
                  }
                }
              ],
              "$instance": {
                "FullPizzaWithModifiers": [
                  {
                    "type": "FullPizzaWithModifiers",
                    "text": "two large pepperoni pizzas on thin crust",
                    "startIndex": 7,
                    "length": 40,
                    "score": 0.90681237,
                    "modelTypeId": 1,
                    "modelType": "Entity Extractor",
                    "recognitionSources": [
                      "model"
                    ]
                  }
                ]
              }
            }
          ],
          "ToppingList": [
            [
              "Pepperoni"
            ]
          ],
          "$instance": {
            "Order": [
              {
                "type": "Order",
                "text": "two large pepperoni pizzas on thin crust",
                "startIndex": 7,
                "length": 40,
                "score": 0.9047088,
                "modelTypeId": 1,
                "modelType": "Entity Extractor",
                "recognitionSources": [
                  "model"
                ]
              }
            ],
            "ToppingList": [
              {
                "type": "ToppingList",
                "text": "pepperoni",
                "startIndex": 17,
                "length": 9,
                "modelTypeId": 5,
                "modelType": "List Entity Extractor",
                "recognitionSources": [
                  "model"
                ]
              }
            ]
          }
        }
      }
    }
    

Az erőforrások eltávolítása

Törölheti az alkalmazást a LUIS-portálról , és törölheti az Azure-erőforrásokat az Azure Portalról.

Ha REST API-t használ, törölje a fájlt a ExampleUtterances.JSON fájlrendszerből, amikor elkészült a rövid útmutatóval.

Hibaelhárítás

  • Hitelesítés az ügyfélkódtárhoz – a hitelesítési hibák általában azt jelzik, hogy a rendszer nem a megfelelő kulcs & végpontot használta. Ez a rövid útmutató a szerkesztőkulcsot és a végpontot használja az előrejelzési futtatókörnyezethez, de csak akkor működik, ha még nem használta a havi kvótát. Ha nem tudja használni a szerkesztőkulcsot és a végpontot, az előrejelzési futtatókörnyezet kulcsát és végpontját kell használnia az előrejelzési futtatókörnyezetI SDK-ügyfélkódtár elérésekor.
  • Entitások létrehozása – ha hibaüzenet jelenik meg az oktatóanyagban használt beágyazott gépi tanulási entitás létrehozásakor, győződjön meg arról, hogy átmásolta a kódot, és nem módosította a kódot egy másik entitás létrehozásához.
  • Példa kimondott szövegek létrehozása – ha hibaüzenetet kap az oktatóanyagban használt feliratos példaszöveg létrehozásakor, győződjön meg arról, hogy másolta a kódot, és nem módosította a kódot egy másik címkével ellátott példa létrehozásához.
  • Betanítás – ha betanítási hibát kap, az általában üres alkalmazást (például kimondott szövegeket tartalmazó szándékok nélkül) vagy helytelen szándékokkal vagy entitásokkal rendelkező alkalmazást jelez.
  • Egyéb hibák – mivel a kód szöveggel és JSON-objektumokkal hívja meg az ügyfélkódtárakat, győződjön meg arról, hogy nem módosította a kódot.

Egyéb hibák – ha olyan hibát kap, amely nem szerepel az előző listában, küldjön visszajelzést az oldal alján. Adja meg a telepített ügyfélkódtárak programozási nyelvét és verzióját.

Következő lépések