Quickstart: Luis-clientbibliotheken (Language Understanding) en REST API

Belangrijk

LUIS wordt op 1 oktober 2025 buiten gebruik gesteld en vanaf 1 april 2023 kunt u geen nieuwe LUIS-resources maken. We raden u aan uw LUIS-toepassingen te migreren naar gesprekstaalbegrip om te profiteren van continue productondersteuning en meertalige mogelijkheden.

Maak een LUIS-app en voer er query's op uit met de LUIS SDK-clientbibliotheken in deze quickstart die gebruikmaakt van C#, Python of JavaScript. U kunt ook cURL gebruiken om aanvragen te verzenden met behulp van de REST API.

Met Language Understanding (LUIS) kunt u natuurlijke taalverwerking toepassen (NLP) op tekst in de natuurlijke spreektaal van een gebruiker om de algemene betekenis te voorspellen en relevante informatie eruit te filteren.

  • Met de REST API en de clientbibliotheek voor creatie kunt u uw LUIS-app maken, bewerken, trainen en publiceren.
  • Met de REST API en clientbibliotheek van de Prediction-runtime kunt u een query uitvoeren op de gepubliceerde app.

Gebruik de LUIS-clienbibliotheken (Language Understanding) voor .NET voor het volgende:

  • Een app maken
  • Een intentie, een entiteit die via machine learning is verkregen, met een voorbeelduiting toevoegen
  • App trainen en publiceren
  • Runtime queryvoorspelling

Referentiedocumentatie | Creatie en Voorspelling Broncode van bibliotheek | Creatie en Voorspelling NuGet | C# voorbeeld

Vereisten

  • De huidige versie van .NET Core en .NET Core CLI.
  • Azure-abonnement: Krijg een gratis abonnement
  • Zodra u een Azure-abonnement hebt, maakt u een Language Understanding-creatieresource in Azure Portal om uw sleutel en eindpunt op te halen. Wacht tot deze is geïmplementeerd en klik op de knop Naar de resource gaan.
    • U hebt de sleutel en het eindpunt nodig van de resource die u maakt om de toepassing te verbinden met Language Understanding-creatie. Later in de quickstart plakt u uw sleutel en eindpunt in de onderstaande code. U kunt de gratis prijscategorie (F0) gebruiken om de service te proberen.

Instellen

Een nieuwe C#-toepassing maken

Maak een nieuwe .NET Core-toepassing in uw favoriete editor of IDE.

  1. Gebruik in een consolevenster (zoals cmd, PowerShell of Bash) de opdracht dotnet new om een nieuwe console-app te maken met de naam language-understanding-quickstart. Met deze opdracht maakt u een eenvoudig Hallo wereld-C#-project met één bronbestand: Program.cs.

    dotnet new console -n language-understanding-quickstart
    
  2. Wijzig uw map in de zojuist gemaakte app-map.

    cd language-understanding-quickstart
    
  3. U kunt de toepassing maken met:

    dotnet build
    

    De build-uitvoer mag geen waarschuwingen of fouten bevatten.

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

De NuGet-bibliotheken installeren

Installeer in de toepassingsmap de creatie-clientbibliotheek van Language Understanding (LUIS) voor .NET met de volgende opdrachten:

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

Objectmodel Creatie

De creatieclient van Language Understanding (LUIS) is een LUISAuthoringClient-object dat wordt geverifieerd bij Azure, dat de creatiesleutel bevat.

Codevoorbeelden voor creatie

Als de client is gemaakt, gebruikt u deze client voor toegang tot de functionaliteit, waaronder:

Objectmodel Voorspelling

De voorspellingsruntime-client van Language Understanding (LUIS) is een LUISRuntimeClient-object dat wordt geverifieerd bij Azure, dat de bronsleutel bevat.

Codevoorbeelden voor voorspellingsruntime

Als de client is gemaakt, gebruikt u deze client voor toegang tot de functionaliteit, waaronder:

Codevoorbeelden

Deze codefragmenten laten zien hoe u het volgende kunt doen met de clientbibliotheek van Language Understanding (LUIS) voor Python:

De afhankelijkheden toevoegen

Open vanuit de projectmap het bestand Program.cs in uw favoriete editor of IDE. Vervang de bestaande using-code door de volgende using-instructies:

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;

Standaardcode toevoegen

  1. Wijzig de handtekening van de Main-methode om async-aanroepen toe te staan:

    public static async Task Main()
    
  2. Voeg de rest van de code toe aan de Main-methode van de klasse Program, tenzij anders aangegeven.

Variabelen maken voor de app

Maak twee sets variabelen: de eerste set wijzigt u, de tweede set laat u zoals wordt weergegeven in het codevoorbeeld.

Belangrijk

Vergeet niet de sleutel uit uw code te verwijderen wanneer u klaar bent, en maak deze sleutel nooit openbaar. Gebruik voor productie een veilige manier om uw referenties op te slaan en te openen, zoals Azure Key Vault. Zie het beveiligingsartikel over Azure AI-services voor meer informatie.

  1. Maak variabelen om uw ontwerpsleutel en resourcenamen op te slaan.

    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. Maak variabelen om uw eindpunten, naam van de app, versie en naam van de intenties op te slaan.

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

De client verifiëren

Maak een ApiKeyServiceClientCredentials-object met uw sleutel en gebruik het met uw eindpunt om een LUISAuthoringClient-object te maken.

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

Een LUIS-app maken

Een LUIS-app bevat de intenties, entiteiten en voorbeelduitingen van het model voor natuurlijke taalverwerking.

Maak een ApplicationCreateObject. De naam en taalcultuur zijn vereiste eigenschappen. Roep de methode Apps.AddAsync aan. De respons is de app-id.

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

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

Intentie voor de app maken

Het primaire object in het model van een LUIS-app is de intentie. De intentie wordt in overeenstemming gebracht met een groepering intenties van uitingen van gebruikers. Een gebruiker kan een vraag stellen of een instructie maken op zoek naar een bepaalde beoogde respons van een bot (of een andere clienttoepassing). Voorbeelden van intenties zijn het reserveren van een vlucht, vragen naar het weer op de plaats van bestemming en vragen naar de contactgegevens van de klantenservice.

Maak een ModelCreateObject met de naam van de unieke intentie en geef de app-id, versie-id en ModelCreateObject door aan de methode model.AddIntentAsync. De respons is de intentie-id.

De waarde intentName wordt in code vastgelegd in OrderPizzaIntent als onderdeel van de variabelen in de sectie Variabelen maken voor de app.

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

Entiteiten voor de app maken

Hoewel entiteiten niet vereist zijn, worden ze in de meeste apps aangetroffen. De entiteit extraheert informatie uit de uiting van de gebruiker, wat nodig is om aan de bedoeling van de gebruiker tegemoet te komen. Er zijn verschillende soorten vooraf ontwikkelde en aangepaste entiteiten, elk met hun eigen gegevenstransformatieobject. Veelvoorkomende vooraf ontwikkelde entiteiten die u aan uw app kunt toevoegen, zijn number, datetimeV2, geographyV2 en ordinal.

Het is belangrijk te weten dat entiteiten niet met een intentie zijn gemarkeerd. Ze kunnen op veel intenties worden toegepast en dit gebeurt ook vaak. Alleen voorbeelden van uitingen van gebruikers zijn gemarkeerd voor een specifieke, enkelvoudige intentie.

Methoden voor het maken van entiteiten maken deel uit van de klasse Model. Elk entiteitstype heeft een eigen gegevenstransformatieobjectmodel, dat gewoonlijk het woord model bevat in de naamruimte Modellen.

Met de code voor het maken van een entiteit wordt een machine learning-entiteit gemaakt met subentiteiten en functies toegepast op de Quantity-subentiteiten.

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

Gebruik de volgende methode naar de klasse om de id van de subentiteit van de hoeveelheid te zoeken om de functies aan die subentiteit toe te wijzen.

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

Voorbeeld van uiting toevoegen aan intentie

De app heeft voorbeelden van uitingen nodig om de intentie van een uiting te kunnen vaststellen en entiteiten te kunnen ophalen. De voorbeelden moeten gericht zijn op een specifieke, afzonderlijke intentie. Alle aangepaste entiteiten moeten zijn gemarkeerd. Vooraf gemaakte entiteiten hoeven niet te worden gemarkeerd.

Voeg voorbeelduitingen toe door een lijst met ExampleLabelObject-objecten te maken, één object voor elke voorbeelduiting. Elk voorbeeld moet alle entiteiten markeren met een woordenlijst met naam-/waardeparen met de naam en de waarde van de entiteit. De waarde van de entiteit moet exact zo zijn als deze wordt weergegeven in de tekst van de voorbeelduiting.

Partial screenshot showing the labeled example utterance in the portal.

Roep Examples.AddAsync aan met de app-id, versie-id en het voorbeeld.

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

De app trainen

Zodra het model is gemaakt, moet de LUIS-app worden getraind voor deze versie van het model. Een getraind model kan worden gebruikt in een container of worden gepubliceerd naar de fasering of productsleuven.

Voor de methode Train.TrainVersionAsync is de app-id en de versie-id vereist.

Een heel klein model, kan heel snel worden getraind, zoals deze quickstart laat zien. Voor toepassingen op productieniveau moet het trainen van de app een pollingaanroep naar de methode GetStatusAsync omvatten om te bepalen of de training is geslaagd. De respons is een lijst met ModelTrainingInfo-objecten met een afzonderlijke status voor elk object. De training is pas voltooid als alle objecten zijn geslaagd.

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

App publiceren naar productiesite

Publiceer de LUIS-app met behulp van de methode PublishAsync. Hiermee wordt de huidige getrainde versie gepubliceerd naar de opgegeven sleuf op het eindpunt. Uw clienttoepassing gebruikt dit eindpunt om uitingen van gebruikers te verzenden voor het voorspellen van intenties en het extraheren van entiteiten.

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

De voorspellingsruntime-client verifiëren

Gebruik een ApiKeyServiceClientCredentials-object met uw sleutel en gebruik het met uw eindpunt om een LUISRuntimeClient-object te maken.

Let op

In deze quickstart wordt de ontwerpsleutel gebruikt als onderdeel van de runtimereferenties. De ontwerpsleutel mag een query uitvoeren op de runtime met enkele query's. Voor fasering en code op productieniveau vervangt u de ontwerpsleutel door een voorspellingssleutel.

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

Voorspelling uit runtime ophalen

Voeg de volgende code toe om de aanvraag aan de voorspellingsruntime te maken.

De uiting van de gebruiker maakt deel uit van het PredictionRequest-object.

De GetSlotPredictionAsync-methode heeft verschillende parameters nodig, zoals de app-id, de naam van de sleuf en het voorspellingsaanvraagobject, om aan de aanvraag te voldoen. De andere opties, zoals verbose, show all intents en log, zijn optioneel.

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

De voorspellingsreactie is een JSON-object met de intentie en alle gevonden entiteiten.

{
    "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"
                        ]
                    }
                ]
            }
        }
    }
}

De toepassing uitvoeren

Voer de toepassing uit vanuit uw toepassingsmap met de opdracht dotnet run.

dotnet run

Gebruik de LUIS-clienbibliotheken (Language Understanding) voor Node.js voor het volgende:

  • Een app maken
  • Een intentie, een entiteit die via machine learning is verkregen, met een voorbeelduiting toevoegen
  • App trainen en publiceren
  • Runtime queryvoorspelling

Referentiedocumentatie voor | het ontwerpen en voorspellen van NPM | Monsters

Vereisten

  • Node.js
  • Azure-abonnement: Krijg een gratis abonnement
  • Zodra u een Azure-abonnement hebt, maakt u een Language Understanding-creatieresource in Azure Portal om uw sleutel en eindpunt op te halen. Wacht tot deze is geïmplementeerd en klik op de knop Naar de resource gaan.
    • U hebt de sleutel en het eindpunt nodig van de resource die u maakt om de toepassing te verbinden met Language Understanding-creatie. Later in de quickstart plakt u uw sleutel en eindpunt in de onderstaande code. U kunt de gratis prijscategorie (F0) gebruiken om de service te proberen.

Instellen

Een nieuwe JavaScript-toepassing maken

  1. Maak in een consolevenster een nieuwe map voor uw toepassing en ga naar die map.

    mkdir quickstart-sdk && cd quickstart-sdk
    
  2. Initialiseer de map als een JavaScript-toepassing door een package.json-bestand te maken.

    npm init -y
    
  3. Maak een bestand met de naam index.js voor uw JavaScript-code.

    touch index.js
    

De NPM-bibliotheken installeren

Installeer de afhankelijkheden in de toepassingsmap met de volgende opdrachten, waarbij één regel tegelijk wordt uitgevoerd:

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

Uw package.json moet er als volgt uitzien:

{
  "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"
  }
}

Objectmodel Creatie

De creatieclient van Language Understanding (LUIS) is een LUISAuthoringClient-object dat wordt geverifieerd bij Azure, dat de creatiesleutel bevat.

Codevoorbeelden voor creatie

Als de client is gemaakt, gebruikt u deze client voor toegang tot de functionaliteit, waaronder:

Objectmodel Voorspelling

De creatieclient van Language Understanding (LUIS) is een LUISAuthoringClient-object dat wordt geverifieerd bij Azure, dat de creatiesleutel bevat.

Codevoorbeelden voor voorspellingsruntime

Als de client is gemaakt, gebruikt u deze client voor toegang tot de functionaliteit, waaronder:

Codevoorbeelden

Deze codefragmenten laten zien hoe u het volgende kunt doen met de clientbibliotheek van Language Understanding (LUIS) voor Python:

De afhankelijkheden toevoegen

Open het index.js-bestand in uw voorkeurseditor of IDE-naam en voeg de volgende afhankelijkheden toe.

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

Standaardcode toevoegen

  1. Voeg de quickstart-methode en de aanroep toe. Deze methode bevat de meeste resterende code. Deze methode wordt op het einde van het bestand aangeroepen.

    const quickstart = async () => {
    
        // add calls here
    
    
    }
    quickstart()
        .then(result => console.log("Done"))
        .catch(err => {
            console.log(`Error: ${err}`)
            })
    
  2. Voeg de resterende code toe in de quickstart-methode tenzij anders opgegeven.

Variabelen maken voor de app

Maak twee sets variabelen: de eerste set wijzigt u, de tweede set laat u zoals wordt weergegeven in het codevoorbeeld.

Belangrijk

Vergeet niet de sleutel uit uw code te verwijderen wanneer u klaar bent, en maak deze sleutel nooit openbaar. Gebruik voor productie een veilige manier om uw referenties op te slaan en te openen, zoals Azure Key Vault. Zie het beveiligingsartikel over Azure AI-services voor meer informatie.

  1. Maak variabelen om uw ontwerpsleutel en resourcenamen op te slaan.

    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. Maak variabelen om uw eindpunten, naam van de app, versie en naam van de intenties op te slaan.

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

De client verifiëren

Maak een CognitiveServicesCredentials-object met uw sleutel en gebruik het met uw eindpunt om een LUISAuthoringClient-object te maken.

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

Een LUIS-app maken

Een LUIS-app bevat de intenties, entiteiten en voorbeelduitingen van het model voor natuurlijke taalverwerking.

Maak een add-methode van het AppsOperation-object om de app te maken. De naam en taalcultuur zijn vereiste eigenschappen.

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

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

const appId = createAppResult.body

Intentie voor de app maken

Het primaire object in het model van een LUIS-app is de intentie. De intentie wordt in overeenstemming gebracht met een groepering intenties van uitingen van gebruikers. Een gebruiker kan een vraag stellen of een instructie maken op zoek naar een bepaalde beoogde respons van een bot (of een andere clienttoepassing). Voorbeelden van intenties zijn het reserveren van een vlucht, vragen naar het weer op de plaats van bestemming en vragen naar de contactgegevens van de klantenservice.

Gebruik de methode model. add_intent met de naam van de unieke intentie, en voer de app-id, de versie-id en de nieuwe naam van de intentie door.

De waarde intentName wordt in code vastgelegd in OrderPizzaIntent als onderdeel van de variabelen in de sectie Variabelen maken voor de app.

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

Entiteiten voor de app maken

Hoewel entiteiten niet vereist zijn, worden ze in de meeste apps aangetroffen. De entiteit extraheert informatie uit de uiting van de gebruiker, wat nodig is om aan de bedoeling van de gebruiker tegemoet te komen. Er zijn verschillende soorten vooraf ontwikkelde en aangepaste entiteiten, elk met hun eigen gegevenstransformatieobject. Veelvoorkomende vooraf ontwikkelde entiteiten die u aan uw app kunt toevoegen, zijn number, datetimeV2, geographyV2 en ordinal.

Het is belangrijk te weten dat entiteiten niet met een intentie zijn gemarkeerd. Ze kunnen op veel intenties worden toegepast en dit gebeurt ook vaak. Alleen voorbeelden van uitingen van gebruikers zijn gemarkeerd voor een specifieke, enkelvoudige intentie.

Methoden voor het maken van entiteiten maken deel uit van de klasse Model. Elk entiteitstype heeft een eigen gegevenstransformatieobjectmodel.

Met de code voor het maken van een entiteit wordt een machine learning-entiteit gemaakt met subentiteiten en functies toegepast op de Quantity-subentiteiten.

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

Plaats de volgende methode boven de quickstart-methode om het id van de 'Quantity'-subentiteit te vinden en de functies toe te wijzen aan die subentiteit.

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

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

}

Voorbeeld van uiting toevoegen aan intentie

De app heeft voorbeelden van uitingen nodig om de intentie van een uiting te kunnen vaststellen en entiteiten te kunnen ophalen. De voorbeelden moeten gericht zijn op een specifieke, afzonderlijke intentie. Alle aangepaste entiteiten moeten zijn gemarkeerd. Vooraf gemaakte entiteiten hoeven niet te worden gemarkeerd.

Voeg voorbeelduitingen toe door een lijst met ExampleLabelObject-objecten te maken, één object voor elke voorbeelduiting. Elk voorbeeld moet alle entiteiten markeren met een woordenlijst met naam-/waardeparen met de naam en de waarde van de entiteit. De waarde van de entiteit moet exact zo zijn als deze wordt weergegeven in de tekst van de voorbeelduiting.

Partial screenshot showing the labeled example utterance in the portal.

Roep examples.add aan met de app-id, versie-id en het voorbeeld.

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

De app trainen

Zodra het model is gemaakt, moet de LUIS-app worden getraind voor deze versie van het model. Een getraind model kan worden gebruikt in een container of worden gepubliceerd naar de fasering of productsleuven.

Voor de methode train.trainVersion is de app-id en de versie-id vereist.

Een heel klein model, kan heel snel worden getraind, zoals deze quickstart laat zien. Voor toepassingen op productieniveau moet het trainen van de app een pollingaanroep naar de methode get_status omvatten om te bepalen of de training is geslaagd. De respons is een lijst met ModelTrainingInfo-objecten met een afzonderlijke status voor elk object. De training is pas voltooid als alle objecten zijn geslaagd.

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

App publiceren naar productiesite

Publiceer de LUIS-app met behulp van de methode app.publish. Hiermee wordt de huidige getrainde versie gepubliceerd naar de opgegeven sleuf op het eindpunt. Uw clienttoepassing gebruikt dit eindpunt om uitingen van gebruikers te verzenden voor het voorspellen van intenties en het extraheren van entiteiten.

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

De voorspellingsruntime-client verifiëren

Gebruik een msRest.ApiKeyCredentials-object met uw sleutel en gebruik het met uw eindpunt om een LUIS.LUISRuntimeClient-object te maken.

Let op

In deze quickstart wordt de ontwerpsleutel gebruikt als onderdeel van de runtimereferenties. De ontwerpsleutel mag een query uitvoeren op de runtime met enkele query's. Voor fasering en code op productieniveau vervangt u de ontwerpsleutel door een voorspellingssleutel.

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

Voorspelling uit runtime ophalen

Voeg de volgende code toe om de aanvraag aan de voorspellingsruntime te maken. De uiting van de gebruiker maakt deel uit van het predictionRequest-object.

De luisRuntimeClient.prediction.getSlotPrediction-methode heeft verschillende parameters nodig, zoals de app-id, de naam van de sleuf en het voorspellingsaanvraagobject, om aan de aanvraag te voldoen. De andere opties, zoals verbose, show all intents en log, zijn optioneel.

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

De voorspellingsreactie is een JSON-object met de intentie en alle gevonden entiteiten.

{
    "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"
                        ]
                    }
                ]
            }
        }
    }
}

De toepassing uitvoeren

Voer de toepassing uit met de opdracht node index.js in uw quickstart-bestand.

node index.js

Gebruik de LUIS-clienbibliotheken (Language Understanding) voor Python om:

  • Een app maken
  • Een intentie, een entiteit die via machine learning is verkregen, met een voorbeelduiting toevoegen
  • App trainen en publiceren
  • Runtime queryvoorspelling

Referentiedocumentatie | Creatie en Voorspelling Broncode van bibliotheek | Pakket (Pypi) | Voorbeelden

Vereisten

  • De huidige versie van Python 3.x.
  • Azure-abonnement: Krijg een gratis abonnement
  • Zodra u een Azure-abonnement hebt, maakt u een Language Understanding-creatieresource in Azure Portal om uw sleutel en eindpunt op te halen. Wacht tot deze is geïmplementeerd en klik op de knop Naar de resource gaan.
    • U hebt de sleutel en het eindpunt nodig van de resource die u maakt om de toepassing te verbinden met Language Understanding-creatie. Later in de quickstart plakt u uw sleutel en eindpunt in de onderstaande code. U kunt de gratis prijscategorie (F0) gebruiken om de service te proberen.

Instellen

Een nieuwe Python-toepassing maken

  1. Maak in een consolevenster een nieuwe map voor uw toepassing en ga naar die map.

    mkdir quickstart-sdk && cd quickstart-sdk
    
  2. Maak een bestand met de naam authoring_and_predict.py voor uw Python-code.

    touch authoring_and_predict.py
    

De clientbibliotheek installeren met Pip

Installeer in de toepassingsmap de Language Understanding-clientbibliotheek (LUIS) voor Python met de volgende opdracht:

pip install azure-cognitiveservices-language-luis

Objectmodel Creatie

De creatieclient van Language Understanding (LUIS) is een LUISAuthoringClient-object dat wordt geverifieerd bij Azure, dat de creatiesleutel bevat.

Codevoorbeelden voor creatie

Als de client is gemaakt, gebruikt u deze client voor toegang tot de functionaliteit, waaronder:

Objectmodel Voorspelling

De voorspellingsruntime-client van Language Understanding (LUIS) is een LUISRuntimeClient-object dat wordt geverifieerd bij Azure, dat de bronsleutel bevat.

Codevoorbeelden voor voorspellingsruntime

Als de client is gemaakt, gebruikt u deze client voor toegang tot de functionaliteit, waaronder:

Codevoorbeelden

Deze codefragmenten laten zien hoe u het volgende kunt doen met de clientbibliotheek van Language Understanding (LUIS) voor Python:

De afhankelijkheden toevoegen

Voeg de clientbibliotheken toe aan het Python-bestand.

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

Standaardcode toevoegen

  1. Voeg de quickstart-methode en de aanroep toe. Deze methode bevat de meeste resterende code. Deze methode wordt op het einde van het bestand aangeroepen.

    def quickstart():
    
        # add calls here, remember to indent properly
    
    quickstart()
    
  2. Voeg de resterende code toe in de quickstart-methode tenzij anders opgegeven.

Variabelen maken voor de app

Maak twee sets variabelen: de eerste set wijzigt u, de tweede set laat u zoals wordt weergegeven in het codevoorbeeld.

Belangrijk

Vergeet niet de sleutel uit uw code te verwijderen wanneer u klaar bent, en maak deze sleutel nooit openbaar. Gebruik voor productie een veilige manier om uw referenties op te slaan en te openen, zoals Azure Key Vault. Zie het beveiligingsartikel over Azure AI-services voor meer informatie.

  1. Maak variabelen om uw ontwerpsleutel en resourcenamen op te slaan.

    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. Maak variabelen om uw eindpunten, naam van de app, versie en naam van de intenties op te slaan.

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

De client verifiëren

Maak een CognitiveServicesCredentials-object met uw sleutel en gebruik het met uw eindpunt om een LUISAuthoringClient-object te maken.

client = LUISAuthoringClient(authoringEndpoint, CognitiveServicesCredentials(authoringKey))

Een LUIS-app maken

Een LUIS-app bevat de intenties, entiteiten en voorbeelduitingen van het model voor natuurlijke taalverwerking.

Maak een add-methode van het AppsOperation-object om de app te maken. De naam en taalcultuur zijn vereiste eigenschappen.

# 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))

Intentie voor de app maken

Het primaire object in het model van een LUIS-app is de intentie. De intentie wordt in overeenstemming gebracht met een groepering intenties van uitingen van gebruikers. Een gebruiker kan een vraag stellen of een instructie maken op zoek naar een bepaalde beoogde respons van een bot (of een andere clienttoepassing). Voorbeelden van intenties zijn het reserveren van een vlucht, vragen naar het weer op de plaats van bestemming en vragen naar de contactgegevens van de klantenservice.

Gebruik de methode model. add_intent met de naam van de unieke intentie, en voer de app-id, de versie-id en de nieuwe naam van de intentie door.

De waarde intentName wordt in code vastgelegd in OrderPizzaIntent als onderdeel van de variabelen in de sectie Variabelen maken voor de app.

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

Entiteiten voor de app maken

Hoewel entiteiten niet vereist zijn, worden ze in de meeste apps aangetroffen. De entiteit extraheert informatie uit de uiting van de gebruiker, wat nodig is om aan de bedoeling van de gebruiker tegemoet te komen. Er zijn verschillende soorten vooraf ontwikkelde en aangepaste entiteiten, elk met hun eigen gegevenstransformatieobject. Veelvoorkomende vooraf ontwikkelde entiteiten die u aan uw app kunt toevoegen, zijn number, datetimeV2, geographyV2 en ordinal.

Het is belangrijk te weten dat entiteiten niet met een intentie zijn gemarkeerd. Ze kunnen op veel intenties worden toegepast en dit gebeurt ook vaak. Alleen voorbeelden van uitingen van gebruikers zijn gemarkeerd voor een specifieke, enkelvoudige intentie.

Methoden voor het maken van entiteiten maken deel uit van de klasse ModelOperations. Elk entiteitstype heeft een eigen gegevenstransformatieobjectmodel.

Met de code voor het maken van een entiteit wordt een machine learning-entiteit gemaakt met subentiteiten en functies toegepast op de Quantity-subentiteiten.

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)

Plaats de volgende methode boven de quickstart-methode om het id van de 'Quantity'-subentiteit te vinden en de functies toe te wijzen aan die subentiteit.

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

Voorbeeld van uiting toevoegen aan intentie

De app heeft voorbeelden van uitingen nodig om de intentie van een uiting te kunnen vaststellen en entiteiten te kunnen ophalen. De voorbeelden moeten gericht zijn op een specifieke, afzonderlijke intentie. Alle aangepaste entiteiten moeten zijn gemarkeerd. Vooraf gemaakte entiteiten hoeven niet te worden gemarkeerd.

Voeg voorbeelduitingen toe door een lijst met ExampleLabelObject-objecten te maken, één object voor elke voorbeelduiting. Elk voorbeeld moet alle entiteiten markeren met een woordenlijst met naam-/waardeparen met de naam en de waarde van de entiteit. De waarde van de entiteit moet exact zo zijn als deze wordt weergegeven in de tekst van de voorbeelduiting.

Partial screenshot showing the labeled example utterance in the portal.

Roep examples.add aan met de app-id, versie-id en het voorbeeld.

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

De app trainen

Zodra het model is gemaakt, moet de LUIS-app worden getraind voor deze versie van het model. Een getraind model kan worden gebruikt in een container of worden gepubliceerd naar de fasering of productsleuven.

Voor de methode train.train_version is de app-id en de versie-id vereist.

Een heel klein model, kan heel snel worden getraind, zoals deze quickstart laat zien. Voor toepassingen op productieniveau moet het trainen van de app een pollingaanroep naar de methode get_status omvatten om te bepalen of de training is geslaagd. De respons is een lijst met ModelTrainingInfo-objecten met een afzonderlijke status voor elk object. De training is pas voltooid als alle objecten zijn geslaagd.

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

App publiceren naar productiesite

Publiceer de LUIS-app met behulp van de methode app.publish. Hiermee wordt de huidige getrainde versie gepubliceerd naar de opgegeven sleuf op het eindpunt. Uw clienttoepassing gebruikt dit eindpunt om uitingen van gebruikers te verzenden voor het voorspellen van intenties en het extraheren van entiteiten.

# 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)

De voorspellingsruntime-client verifiëren

Gebruik de referenties-object met uw sleutel en gebruik dit met uw eindpunt om een LUISRuntimeClientConfiguration-object te maken.

Let op

In deze quickstart wordt de ontwerpsleutel gebruikt als onderdeel van de runtimereferenties. De ontwerpsleutel mag een query uitvoeren op de runtime met enkele query's. Voor fasering en code op productieniveau vervangt u de ontwerpsleutel door een voorspellingssleutel.

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

Voorspelling uit runtime ophalen

Voeg de volgende code toe om de aanvraag aan de voorspellingsruntime te maken.

De uiting van de gebruiker maakt deel uit van het prediction_request-object.

De get_slot_prediction-methode heeft verschillende parameters nodig, zoals de app-id, de naam van de sleuf en het voorspellingsaanvraagobject, om aan de aanvraag te voldoen. De andere opties, zoals verbose, show all intents en log, zijn optioneel. De aanvraag retourneert een PredictionResponse-object.

# 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))

De voorspellingsreactie is een JSON-object met de intentie en alle gevonden entiteiten.

{
    "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"
                        ]
                    }
                ]
            }
        }
    }
}

De toepassing uitvoeren

Voer de toepassing uit met de opdracht python in uw quickstart-bestand.

python authoring_and_predict.py

Door deze quickstart te volgen, voert u drie opeenvolgende REST-aanroepen uit.

Referentiedocumentatie

Vereisten

  • Een gratis LUIS-account.

  • Een teksteditor zoals Visual Studio Code.

  • Het opdrachtregelprogramma cURL. Het programma cURL is al geïnstalleerd op macOS, de meeste Linux-distributies en Windows 10 build 1803 en hoger.

    Als u een cURL moet installeren, kunt u dit downloaden op de Downloadpagina voor cURL.

Pizza-app maken

Maak de Pizza-app.

  1. Selecteer pizza-app-for-luis-v6.json om de GitHub-pagina voor het pizza-app-for-luis.json-bestand te openen.
  2. Klik met de rechtermuisknop of tik lang op de knop Onbewerkt en selecteer Koppeling opslaan als om de pizza-app-for-luis.json op uw computer op te slaan.
  3. Meld u aan bij de LUIS-portal.
  4. Selecteer Mijn apps.
  5. Selecteer op de pagina Mijn apps de optie + Nieuwe app voor conversatie.
  6. Selecteer Importeren als JSON.
  7. Selecteer in het dialoogvenster Nieuwe app importeren de knop Bestand kiezen.
  8. Selecteer het pizza-app-for-luis.json-bestand dat u hebt gedownload en selecteer Openen.
  9. Voer in het veld Naam in het dialoogvenster Nieuwe app importeren een naam in voor uw Pizza-app en selecteer vervolgens de knop Gereed.

De app wordt geïmporteerd.

Sluit het dialoogvenster Een effectieve LUIS-app maken zodra dit wordt weergegeven.

De Pizza-app trainen en publiceren

Als het goed is, wordt de pagina Intenties weergegeven, met een lijst van de intenties in de Pizza-app.

  1. Selecteer rechts bovenaan op de LUIS-website de knop Train.

    Train button

  2. Training is voltooid wanneer de knop Trainen is uitgeschakeld.

Als u een LUIS-voorspelling wilt ontvangen in een chatbot of andere clienttoepassingen, moet u de app publiceren naar het voorspellingseindpunt.

  1. Selecteer Publiceren in de navigatiebalk rechtsboven.

    A screenshot of the button for publishing to the endpoint.

  2. Selecteer de Productiesite en selecteer vervolgens Gereed.

    A screenshot of LUIS publishing to the endpoint.

  3. Selecteer Uw eindpunt-URL's openen in de melding om naar de pagina Azure-resources te gaan. U kunt de URL's alleen zien als u een voorspellingsresource hebt die aan de app is gekoppeld. U vindt de pagina Azure-resources ook door op Beheren te klikken.

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

Een ontwerpresource aan de Pizza-app toevoegen

  1. Selecteer BEHEREN.
  2. Selecteer Azure-resources.
  3. Selecteer Ontwerpresource.
  4. Selecteer Ontwerpresource wijzigen.

Als u een ontwerpresource hebt, voert u de tenantnaam, abonnementsnaam en LUIS-resourcenaam van uw ontwerpresource in.

Als u geen ontwerpresource hebt:

  1. Selecteer Nieuwe resource maken.
  2. Voer een tenantnaam, resourcenaam, abonnementsnaam en naam van de Azure-resourcegroep in.

Uw Pizza-app is nu klaar voor gebruik.

De toegangswaarden voor uw Pizza-app vastleggen

Als u uw nieuwe Pizza-app wilt gebruiken, hebt u de app-id, een ontwerpsleutel en een ontwerpeindpunt van uw Pizza-app nodig. U hebt een afzonderlijk voorspellingseindpunt en een afzonderlijke voorspellingssleutel nodig om voorspellingen op te halen.

Deze waarden zoeken:

  1. Selecteer op de pagina Intenties de optie BEHEREN.
  2. Noteer de app-id op de pagina Toepassingsinstellingen.
  3. Selecteer Azure-resources.
  4. Selecteer Ontwerpresource.
  5. Noteer de Primaire sleutel die u ziet op de tabbladen Ontwerpresource en Voorspellingsresources. Deze waarde is uw ontwerpsleutel.
  6. Noteer de eindpunt-URL. Deze waarde is uw ontwerpeindpunt.

Een JSON-bestand maken om de Pizza-app te trainen

Om een JSON-bestand met drie voorbeelduitingen wilt maken, slaat u de volgende JSON-gegevens op in een bestand met de naam ExampleUtterances.JSON:

[
  {
    "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
      }
    ]
  }
]`

De JSON met voorbeelduitingen volgt een specifieke indeling.

Het veld text bevat de tekst van de voorbeeldutterance. Het veld intentName moet overeenkomen met de naam van een bestaande intentie in de LUIS-app. Het veld entityLabels is vereist. Als u niet alle entiteiten een label wilt geven, geeft u een lege matrix op.

Als de entityLabels-matrix niet leeg is, moeten startCharIndex en endCharIndex de entiteit markeren waarnaar wordt verwezen in het veld entityName. De index is gebaseerd op nul. Als u het label begint of beëindigt met een spatie in de tekst, mislukt de API-aanroep om de uitingen toe te voegen.

Voorbeelden van uitingen toevoegen

  1. Om de batch met voorbeelduitingen te uploaden, kopieert u deze opdracht in uw teksteditor:

    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. Vervang de waarden die beginnen met ***YOUR- door uw eigen waarden.

    Gegevens Doel
    ***YOUR-AUTHORING-ENDPOINT*** Het eindpunt van uw ontwerp-URL. Bijvoorbeeld "https://REPLACE-WITH-YOUR-RESOURCE-NAME.api.cognitive.microsoft.com/". U heeft uw resourcenaam ingesteld toen u de resource aanmaakte.
    ***YOUR-APP-ID*** De id van uw LUIS-app.
    ***YOUR-APP-VERSION*** De versie van uw LUIS-app. Voor de Pizza-app is het versienummer '0.1' zonder aanhalingstekens.
    ***YOUR-AUTHORING-KEY*** Uw ontwerpsleutel van 32 tekens.

    Toegewezen sleutels en resources zijn zichtbaar in het LUIS-portaal in de sectie Beheren op de pagina Azure-resources. De App-ID is beschikbaar in hetzelfde gedeelte Beheren op de pagina Toepassingsinstellingen.

    Belangrijk

    Vergeet niet de sleutel uit uw code te verwijderen wanneer u klaar bent, en maak deze sleutel nooit openbaar. Gebruik voor productie een veilige manier om uw referenties op te slaan en te openen, zoals Azure Key Vault. Zie het beveiligingsartikel over Azure AI-services voor meer informatie.

  3. Start een Opdrachtprompt (Windows) of Terminal (macOS en Linux) en verander de mappen naar dezelfde map waarin u het ExampleUtterances.JSON-bestand hebt opgeslagen.

  4. Kopieer de cURL-opdracht uit de editor en plak deze in een Opdrachtprompt (Windows) of Terminal (macOS en Linux). Druk op Enter om de opdracht uit te voeren.

    U ziet de volgende antwoorden:

    [{"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}]
    

    Dit is de uitvoer, opgemaakt voor leesbaarheid:

    [
      {
        "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
      }
    ]
    

Het model voor de Pizza-app trainen

  1. Als u een trainingssessie voor de pizza-app wilt starten, kopieert u deze opdracht naar uw teksteditor:

    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. Vervang, zoals u zonet deed, de waarden die beginnen met ***YOUR- door uw eigen waarden.

  3. Kopieer de cURL-opdracht uit de editor en plak deze in een Opdrachtprompt (Windows) of Terminal (macOS en Linux). Druk op Enter om de opdracht uit te voeren.

    U ziet de volgende antwoorden:

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

    Dit is de uitvoer, opgemaakt voor leesbaarheid:

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

De status van een training ophalen

  1. Als u de trainingsstatus voor de trainingssessie wilt ophalen, kopieert u deze opdracht naar uw teksteditor:

    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. Vervang, zoals u zonet deed, de waarden die beginnen met ***YOUR- door uw eigen waarden.

  3. Kopieer de cURL-opdracht uit de editor en plak deze in een Opdrachtprompt (Windows) of Terminal (macOS en Linux). Druk op Enter om de opdracht uit te voeren.

    U ziet de volgende antwoorden:

    [{"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}}]
    

    Dit is de uitvoer, opgemaakt voor leesbaarheid:

    [
      {
        "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
        }
      }
    ]
    

Intent ophalen vanaf het voorspellingseindpunt

Gebruik cURL om een query uit te voeren op het voorspellingseindpunt en een voorspellingsresultaat op te halen.

Notitie

Deze opdracht maakt gebruik van uw voorspellingseindpunt.

  1. Kopieer deze opdracht naar uw teksteditor:

    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. Vervang de waarden die beginnen met ***YOUR- door uw eigen waarden.

    Gegevens Doel
    ***YOUR-PREDICTION-ENDPOINT*** Het eindpunt voor de voorspellings-URL. De Azure Resources-pagina voor uw app in het LUIS-portal.
    Bijvoorbeeld: https://westus.api.cognitive.microsoft.com/.
    ***YOUR-APP-ID*** Uw app-ID. De pagina met toepassingsinstellingen voor uw app in het LUIS-portal.
    ***YOUR-PREDICTION-KEY*** Uw voorspellingssleutel van 32 tekens. De Azure Resources-pagina voor uw app in het LUIS-portal.
  3. Kopieer de tekst naar een consolevenster en druk op Enter om de opdracht uit te voeren:

  4. Controleer het voorspellingsantwoord dat geretourneerd wordt als JSON:

    {"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"]}]}}}}
    

    JSON-antwoord opgemaakt voor leesbaarheid:

    {
      "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"
                ]
              }
            ]
          }
        }
      }
    }
    

Resources opschonen

U kunt de app verwijderen uit de LUIS-portal en de Azure-resources verwijderen uit Azure Portal.

Als u de REST API gebruikt, verwijdert u het bestand ExampleUtterances.JSON uit het bestandssysteem wanneer u klaar bent met de quickstart.

Problemen oplossen

  • Verificatie bij de clientbibliotheek: verificatiefouten geven meestal aan dat de verkeerde sleutel en eindpunt is gebruikt. Deze quickstart maakt gebruik van de ontwerpsleutel en het eindpunt voor de prediction runtime, maar werkt alleen als u het maandelijkse quotum nog niet hebt gebruikt. Als u de ontwerpsleutel en het eindpunt niet kunt gebruiken, moet u de prediction runtime-sleutel en eindpunt gebruiken bij het openen van de prediction runtime SDK-clientbibliotheek.
  • Entiteiten maken: als er een fout optreedt bij het maken van de geneste machine learning-entiteit die in deze zelfstudie wordt gebruikt, moet u ervoor zorgen dat u de code hebt gekopieerd en de code niet hebt gewijzigd om een andere entiteit te maken.
  • Voorbeeld-uitingen: als u een foutbericht krijgt bij het maken van de gelabelde voorbeelduiting die in deze zelfstudie wordt gebruikt, moet u ervoor zorgen dat u de code hebt gekopieerd en de code niet hebt gewijzigd om een ander gelabeld voorbeeld te maken.
  • Training: als u een trainingsfout krijgt, duidt dit meestal op een lege app (geen intenties met voorbeelduitingen) of een app met intenties of entiteiten die misvormd zijn.
  • Diverse fouten: omdat de code clientbibliotheken met tekst- en JSON-objecten aanroept, moet u ervoor zorgen dat u de code niet hebt gewijzigd.

Andere fouten: als er een fout optreedt die hierboven niet wordt behandeld, laat het ons dan weten door onderaan deze pagina feedback te geven. Vermeld de programmeertaal en -versie van de clientbibliotheken die u hebt geïnstalleerd.

Volgende stappen