Schnellstart: LUIS-Clientbibliotheken (Language Understanding) und REST-APIQuickstart: Language Understanding (LUIS) client libraries and REST API

In dieser Schnellstartanleitung erfahren Sie, wie Sie mit den LUIS-SDK-Clientbibliotheken eine Azure LUIS-KI-App (Künstliche Intelligenz) mithilfe von C#, Python oder JavaScript erstellen und abfragen.Create and query an Azure LUIS artificial intelligence (AI) app with the LUIS SDK client libraries with this quickstart using C#, Python, or JavaScript. Sie können auch cURL verwenden, um Anforderungen über die REST-API zu senden.You can also use cURL to send requests using the REST API.

Language Understanding (LUIS) ermöglicht das Anwenden von NLP (Natural Language Processing, Verarbeitung natürlicher Sprache) auf Benutzertext mit natürlicher Sprache, um die allgemeine Bedeutung vorherzusagen sowie relevante, detaillierte Informationen zu extrahieren.Language Understanding (LUIS) enables you to apply natural language processing (NLP) to a user's conversational, natural language text to predict overall meaning, and pull out relevant, detailed information.

  • Mit der Authoring-Clientbibliothek und -REST-API können Sie Ihre LUIS-App erstellen, bearbeiten, trainieren und veröffentlichen.The authoring client library and REST API allows you to create, edit, train, and publish your LUIS app.
  • Mit der Prediction Runtime-Clientbibliothek und -REST-API können Sie die veröffentlichte App abfragen.The prediction runtime client library and REST API allows you to query the published app.

Verwenden Sie die LUIS-Clientbibliotheken (Language Understanding) für .NET für Folgendes:Use the Language Understanding (LUIS) client libraries for .NET to:

  • Erstellen einer AppCreate an app
  • Hinzufügen einer Absicht (eine durch maschinelles Lernen erworbene Entität) mit einer BeispieläußerungAdd an intent, a machine-learned entity, with an example utterance
  • Trainieren und Veröffentlichen der AppTrain and publish app
  • Abfragen der VorhersagelaufzeitQuery prediction runtime

Referenzdokumentation | Quellcode für Erstellungs- und Vorhersagebibliothek | NuGet für Erstellung und Vorhersage | C#-BeispielReference documentation | Authoring and Prediction Library source code | Authoring and Prediction NuGet | C# Sample

VoraussetzungenPrerequisites

  • Aktuelle Version von .NET Core und .NET Core-CLIThe current version of .NET Core and .NET Core CLI.
  • Azure-Abonnement – Erstellen eines kostenlosen KontosAzure subscription - Create one for free
  • Sobald Sie über Ihr Azure-Abonnement verfügen, erstellen Sie eine Language Understanding-Erstellungsressource im Azure-Portal, um an Ihren Schlüssel und Ihren Endpunkt zu gelangen.Once you have your Azure subscription, create a Language Understanding authoring resource in the Azure portal to get your key and endpoint. Warten Sie ihre Bereitstellung ab, und klicken Sie auf die Schaltfläche Zu Ressource wechseln.Wait for it to deploy and click the Go to resource button.
    • Sie benötigen den Schlüssel und Endpunkt der von Ihnen erstellten Ressource, um Ihre Anwendung mit der Language Understanding-Erstellung zu verbinden.You will need the key and endpoint from the resource you create to connect your application to Language Understanding authoring. Der Schlüssel und der Endpunkt werden weiter unten in der Schnellstartanleitung in den Code eingefügt.You'll paste your key and endpoint into the code below later in the quickstart. Sie können den kostenlosen Tarif (F0) verwenden, um den Dienst auszuprobieren.You can use the free pricing tier (F0) to try the service.

EinrichtenSetting up

Erstellen einer neuen C#-AnwendungCreate a new C# application

Erstellen Sie eine neue .NET Core-Anwendung in Ihrem bevorzugten Editor oder Ihrer bevorzugten IDE.Create a new .NET Core application in your preferred editor or IDE.

  1. Verwenden Sie in einem Konsolenfenster (z. B. cmd, PowerShell oder Bash) den Befehl dotnet new zum Erstellen einer neuen Konsolen-App mit dem Namen language-understanding-quickstart.In a console window (such as cmd, PowerShell, or Bash), use the dotnet new command to create a new console app with the name language-understanding-quickstart. Dieser Befehl erstellt ein einfaches „Hallo Welt“-C#-Projekt mit einer einzigen Quelldatei: Program.cs.This command creates a simple "Hello World" C# project with a single source file: Program.cs.

    dotnet new console -n language-understanding-quickstart
    
  2. Wechseln Sie zum Ordner der neu erstellten App.Change your directory to the newly created app folder.

    cd language-understanding-quickstart
    
  3. Sie können die Anwendung mit folgendem Befehl erstellen:You can build the application with:

    dotnet build
    

    Die Buildausgabe sollte keine Warnungen oder Fehler enthalten.The build output should contain no warnings or errors.

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

Installieren der NuGet-BibliothekenInstall the NuGet libraries

Installieren Sie innerhalb des Anwendungsverzeichnisses die LUIS-Clientbibliotheken (Language Understanding) für .NET mithilfe der folgenden Befehle:Within the application directory, install the Language Understanding (LUIS) client libraries for .NET with the following commands:

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

ErstellungsobjektmodellAuthoring Object model

Der LUIS-Erstellungsclient (Language Understanding) ist ein Objekt vom Typ LUISAuthoringClient, das sich bei Azure authentifiziert und Ihren Erstellungsschlüssel enthält.The Language Understanding (LUIS) authoring client is a LUISAuthoringClient object that authenticates to Azure, which contains your authoring key.

Codebeispiele für die ErstellungCode examples for authoring

Nach der Erstellung des Clients können Sie damit unter anderem auf folgende Funktionen zugreifen:Once the client is created, use this client to access functionality including:

VorhersageobjektmodellPrediction Object model

Der LUIS-Vorhersagelaufzeit-Client (Language Understanding) ist ein Objekt vom Typ LUISRuntimeClient, das sich bei Azure authentifiziert und Ihren Ressourcenschlüssel enthält.The Language Understanding (LUIS) prediction runtime client is a LUISRuntimeClient object that authenticates to Azure, which contains your resource key.

Codebeispiele für die VorhersagelaufzeitCode examples for prediction runtime

Nach der Erstellung des Clients können Sie damit unter anderem auf folgende Funktionen zugreifen:Once the client is created, use this client to access functionality including:

CodebeispieleCode examples

In den bereitgestellten Codeausschnitten wird veranschaulicht, wie Sie die folgenden Vorgänge mit der LUIS-Clientbibliothek (Language Understanding) für Python ausführen:These code snippets show you how to do the following with the Language Understanding (LUIS) client library for python:

Hinzufügen der AbhängigkeitenAdd the dependencies

Öffnen Sie aus dem Projektverzeichnis die Datei Program.cs in Ihrem bevorzugten Editor oder Ihrer bevorzugten IDE.From the project directory, open the Program.cs file in your preferred editor or IDE. Ersetzen Sie den vorhandenen using-Code durch die folgenden using-Anweisungen:Replace the existing using code with the following using directives:

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;

Hinzufügen von CodebausteinenAdd boilerplate code

  1. Ändern Sie die Signatur der Main-Methode, um asynchrone Aufrufe zuzulassen:Change the signature of the Main method to allow async calls:

    public static async Task Main()
    
  2. Fügen Sie den restlichen Code in der Main-Methode der Program-Klasse hinzu, sofern nicht anders angegeben.Add the rest of the code in the Main method of the Program class unless otherwise specified.

Erstellen von Variablen für die AppCreate variables for the app

Erstellen Sie zwei Sätze von Variablen: Sie ändern den ersten Satz, der zweite bleibt, wie er im Codebeispiel angezeigt wird.Create two sets of variables: the first set you change, the second set leave as they appear in the code sample.

  1. Erstellen Sie Variablen für Ihren Erstellungsschlüssel und Ihre Ressourcennamen.Create variables to hold your authoring key and resource names.

    var key = "REPLACE-WITH-YOUR-AUTHORING-KEY";
    
    var authoringResourceName = "REPLACE-WITH-YOUR-AUTHORING-RESOURCE-NAME";
    var predictionResourceName = "REPLACE-WITH-YOUR-PREDICTION-RESOURCE-NAME";
    
  2. Erstellen Sie Variablen für Ihre Endpunkte, den App-Namen, die Version und den Namen der Absicht.Create variables to hold your endpoints, app name, version, and intent name.

    var authoringEndpoint = String.Format("https://{0}.cognitiveservices.azure.com/", authoringResourceName);
    var predictionEndpoint = String.Format("https://{0}.cognitiveservices.azure.com/", predictionResourceName);
    
    var appName = "Contoso Pizza Company";
    var versionId = "0.1";
    var intentName = "OrderPizzaIntent";
    

Authentifizieren des ClientsAuthenticate the client

Erstellen Sie ein Objekt vom Typ ApiKeyServiceClientCredentials mit Ihrem Schlüssel, und verwenden Sie es mit Ihrem Endpunkt, um ein Objekt vom Typ LUISAuthoringClient zu erstellen.Create an ApiKeyServiceClientCredentials object with your key, and use it with your endpoint to create an LUISAuthoringClient object.

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

Erstellen einer LUIS-AppCreate a LUIS app

Eine LUIS-App enthält das NLP-Modell (Natural Language Processing, Verarbeitung natürlicher Sprache) mit Absichten, Entitäten und Beispieläußerungen.A LUIS app contains the natural language processing (NLP) model including intents, entities, and example utterances.

Erstellen Sie ein Objekt vom Typ ApplicationCreateObject.Create a ApplicationCreateObject. Name und Sprachkultur sind erforderliche Eigenschaften.The name and language culture are required properties. Rufen Sie die Methode Apps.AddAsync auf.Call the Apps.AddAsync method. Die Antwort ist die App-ID.The response is the app ID.

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

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

Erstellen der Absicht für die AppCreate intent for the app

Das primäre Objekt im Modell einer LUIS-App ist die Absicht.The primary object in a LUIS app's model is the intent. Die Absicht orientiert sich an einer Gruppierung der Absichten von Benutzeräußerungen.The intent aligns with a grouping of user utterance intentions. Ein Benutzer kann eine Frage stellen oder etwas sagen, um eine bestimmte beabsichtigte Antwort von einem Bot (oder von einer anderen Clientanwendung) zu erhalten.A user may ask a question, or make a statement looking for a particular intended response from a bot (or other client application). Beispiele für Absichten wären etwa das Buchen eines Flugs, das Einholen von Wetterinformationen für eine Zielstadt oder das Erfragen von Kontaktinformationen für den Kundendienst.Examples of intentions are booking a flight, asking about weather in a destination city, and asking about contact information for customer service.

Erstellen Sie ein Objekt vom Typ ModelCreateObject mit dem Namen der eindeutigen Absicht, und übergeben Sie dann die App-ID, die Versions-ID und das ModelCreateObject-Objekt an die Methode Model.AddIntentAsync.Create a ModelCreateObject with the name of the unique intent then pass the app ID, version ID, and the ModelCreateObject to the Model.AddIntentAsync method. Die Antwort ist die Absichts-ID.The response is the intent ID.

Der Wert intentName wird im Abschnitt Erstellen von Variablen für die App als OrderPizzaIntent hartcodiert und ist Teil der Variablen.The intentName value is hard-coded to OrderPizzaIntent as part of the variables in the Create variables for the app section.

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

Erstellen von Entitäten für die AppCreate entities for the app

Entitäten sind zwar nicht erforderlich, aber in den meisten Apps vorhanden.While entities are not required, they are found in most apps. Die Entität extrahiert Informationen aus der Benutzeräußerung, die zur Erfüllung der Absicht des Benutzers erforderlich sind.The entity extracts information from the user utterance, necessary to fullfil the user's intention. Es gibt mehrere Arten von vordefinierten und benutzerdefinierten Entitäten, die jeweils über ein eigenes DTO-Modell (Data Transformation Object) verfügen.There are several types of prebuilt and custom entities, each with their own data transformation object (DTO) models. Zu den gängigen vordefinierten Entitäten, die Sie Ihrer App hinzufügen können, zählen etwa number, datetimeV2, geographyV2 und ordinal.Common prebuilt entities to add to your app include number, datetimeV2, geographyV2, ordinal.

Wichtig: Entitäten sind nicht mit einer Absicht gekennzeichnet.It is important to know that entities are not marked with an intent. Sie gelten in der Regel für mehrere Absichten.They can and usually do apply to many intents. Nur die exemplarischen Benutzeräußerungen sind für eine bestimmte, einzelne Absicht gekennzeichnet.Only the example user utterances are marked for a specific, single intent.

Erstellungsmethoden für Entitäten sind Teil der Klasse Model.Creation methods for entities are part of the Model class. Jeder Entitätstyp verfügt über ein eigenes DTO-Modell (Data Transformation Object), das in der Regel das Wort model im Namespace Models enthält.Each entity type has its own data transformation object (DTO) model, usually containing the word model in the Models namespace.

Mit dem Code für die Entitätserstellung wird eine Machine Learning-Entität mit untergeordneten Entitäten und Features erstellt, die auf die untergeordneten Entitäten vom Typ Quantity angewendet werden.The entity creation code creates a machine-learning entity with subentities and features applied to the Quantity subentities.

Ausschnitt aus einem Screenshot des Portals: erstellte Entität, Machine Learning-Entität mit untergeordneten Entitäten und Features, die auf die untergeordneten Entitäten vom Typ „Quantity“ angewendet werden

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

Verwenden Sie die folgende Methode für die Klasse, um die ID der untergeordneten Entität vom Typ „Quantity“ zu ermitteln und dieser untergeordneten Entität die entsprechenden Features zuzuweisen.Use the following method to the class to find the Quantity subentity's ID, in order to assign the features to that subentity.

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

Hinzufügen einer Beispieläußerung zu einer AbsichtAdd example utterance to intent

Um die Absicht einer Äußerung ermitteln und Entitäten extrahieren zu können, benötigt die App Beispiele für Äußerungen.In order to determine an utterance's intention and extract entities, the app needs examples of utterances. Die Beispiele müssen auf eine bestimmte, einzelne Absicht ausgerichtet sein und alle benutzerdefinierten Entitäten markieren.The examples need to target a specific, single intent and should mark all custom entities. Vordefinierte Entitäten müssen nicht markiert werden.Prebuilt entities do not need to be marked.

Fügen Sie Beispieläußerungen hinzu, indem Sie eine Liste mit Objekten vom Typ ExampleLabelObject erstellen (jeweils ein Objekt pro Beispieläußerung).Add example utterances by creating a list of ExampleLabelObject objects, one object for each example utterance. Jedes Beispiel muss alle Entitäten mit einem Wörterbuch mit Name-Wert-Paaren (Entitätsname und Entitätswert) markieren.Each example should mark all entities with a dictionary of name/value pairs of entity name and entity value. Der Entitätswert muss exakt dem Vorkommen im Text der Beispieläußerung entsprechen.The entity value should be exactly as it appears in the text of the example utterance.

Ausschnitt eines Screenshots mit der bezeichneten Beispieläußerung im Portal

Rufen Sie Examples.AddAsync mit der App-ID, der Versions-ID und dem Beispiel auf.Call Examples.AddAsync with the app ID, version ID, and the example.

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

Trainieren der AppTrain the app

Nach Erstellung des Modells muss die LUIS-App für diese Version des Modells trainiert werden.Once the model is created, the LUIS app needs to be trained for this version of the model. Ein trainiertes Modell kann in einem Container verwendet oder in den Staging- oder Produktslots veröffentlicht werden.A trained model can be used in a container, or published to the staging or product slots.

Für die Methode Train.TrainVersionAsync müssen die App-ID und die Versions-ID angegeben werden.The Train.TrainVersionAsync method needs the app ID and the version ID.

Bei sehr kleinen Modellen (wie etwa in dieser Schnellstartanleitung) dauert das Training nicht sehr lang.A very small model, such as this quickstart shows, will train very quickly. Bei Produktionsanwendungen muss das App-Training auch einen Abfrageaufruf für die Methode GetStatusAsync enthalten, um zu bestimmen, wann bzw. ob das Training erfolgreich war.For production-level applications, training the app should include a polling call to the GetStatusAsync method to determine when or if the training succeeded. Die Antwort ist eine Liste mit Objekten vom Typ ModelTrainingInfo, die jeweils einen separaten Status für die einzelnen Objekte besitzen.The response is a list of ModelTrainingInfo objects with a separate status for each object. Alle Objekte müssen erfolgreich sein, damit das Training als abgeschlossen gilt.All objects must be successful for the training to be considered complete.

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

Veröffentlichen der App im ProduktionsslotPublish app to production slot

Veröffentlichen Sie die LUIS-App mithilfe der Methode PublishAsync.Publish the LUIS app using the PublishAsync method. Dadurch wird die aktuelle trainierte Version im angegebenen Slot am Endpunkt veröffentlicht.This publishes the current trained version to the specified slot at the endpoint. Ihre Clientanwendung verwendet diesen Endpunkt zum Senden von Benutzeräußerungen für die Absichtsvorhersage und die Entitätsextraktion.Your client application uses this endpoint to send user utterances for prediction of intent and entity extraction.

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

Authentifizieren des VorhersageruntimeclientsAuthenticate the prediction runtime client

Verwenden Sie ein Objekt vom Typ ApiKeyServiceClientCredentials mit Ihrem Schlüssel und mit Ihrem Endpunkt, um ein Objekt vom Typ LUISRuntimeClient zu erstellen.Use an ApiKeyServiceClientCredentials object with your key, and use it with your endpoint to create an LUISRuntimeClient object.

Achtung

In dieser Schnellstartanleitung wird der Erstellungsschlüssel als Teil der Runtimeanmeldeinformationen verwendet.This quickstart uses the authoring key as as part of the runtime credentials. Der Erstellungsschlüssel kann einige Abfragen an die Runtime senden.The authoring key is allowed to query the runtime with a few queries. Ersetzen Sie für Code auf Staging- und Produktionsebene den Erstellungsschlüssel durch einen Vorhersageruntimeschlüssel.For staging and production-level code, replace the authoring key with a prediction runtime key.

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

Abrufen der Vorhersage aus der LaufzeitGet prediction from runtime

Fügen Sie den folgenden Code hinzu, um die Anforderung an die Vorhersageruntime zu erstellen.Add the following code to create the request to the prediction runtime.

Die Benutzeräußerung ist Teil des PredictionRequest-Objekts.The user utterance is part of the PredictionRequest object.

Die GetSlotPredictionAsync-Methode benötigt mehrere Parameter, wie z. B. die App-ID, den Slotnamen, das Vorhersageanforderungsobjekt, um die Anforderung zu erfüllen.The GetSlotPredictionAsync method needs several parameters such as the app ID, the slot name, the prediction request object to fulfill the request. Die anderen Optionen, wie z. B. „Ausführlich“, „Alle Absichten anzeigen“ und „Protokollieren“, sind optional.The other options such as verbose, show all intents, and log are optional.

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

Die Vorhersageantwort ist ein JSON-Objekt, das die Absicht und alle gefundenen Entitäten enthält.The prediction response is a JSON object including the intent and any entities found.

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

Ausführen der AnwendungRun the application

Führen Sie die Anwendung mit dem Befehl dotnet run aus dem Anwendungsverzeichnis aus.Run the application with the dotnet run command from your application directory.

dotnet run

Verwenden Sie die LUIS-Clientbibliotheken (Language Understanding) für Node.js für Folgendes:Use the Language Understanding (LUIS) client libraries for Node.js to:

  • Erstellen einer AppCreate an app
  • Hinzufügen einer Absicht (eine durch maschinelles Lernen erworbene Entität) mit einer BeispieläußerungAdd an intent, a machine-learned entity, with an example utterance
  • Trainieren und Veröffentlichen der AppTrain and publish app
  • Abfragen der VorhersagelaufzeitQuery prediction runtime

Referenzdokumentation | Quellcode für die Erstellungs- und Vorhersagebibliothek | NPM für Erstellung und Vorhersage | BeispieleReference documentation | Authoring and Prediction Library source code | Authoring and Prediction NPM | Samples

VoraussetzungenPrerequisites

  • Node.jsNode.js
  • Azure-Abonnement – Erstellen eines kostenlosen KontosAzure subscription - Create one for free
  • Sobald Sie über Ihr Azure-Abonnement verfügen, erstellen Sie eine Language Understanding-Erstellungsressource im Azure-Portal, um an Ihren Schlüssel und Ihren Endpunkt zu gelangen.Once you have your Azure subscription, create a Language Understanding authoring resource in the Azure portal to get your key and endpoint. Warten Sie ihre Bereitstellung ab, und klicken Sie auf die Schaltfläche Zu Ressource wechseln.Wait for it to deploy and click the Go to resource button.
    • Sie benötigen den Schlüssel und Endpunkt der von Ihnen erstellten Ressource, um Ihre Anwendung mit der Language Understanding-Erstellung zu verbinden.You will need the key and endpoint from the resource you create to connect your application to Language Understanding authoring. Der Schlüssel und der Endpunkt werden weiter unten in der Schnellstartanleitung in den Code eingefügt.You'll paste your key and endpoint into the code below later in the quickstart. Sie können den kostenlosen Tarif (F0) verwenden, um den Dienst auszuprobieren.You can use the free pricing tier (F0) to try the service.

EinrichtenSetting up

Erstellen einer neuen JavaScript-AnwendungCreate a new JavaScript application

  1. Erstellen Sie in einem Konsolenfenster ein neues Verzeichnis für Ihre Anwendung, und wechseln Sie in dieses Verzeichnis.In a console window create a new directory for your application and move into that directory.

    mkdir quickstart-sdk && cd quickstart-sdk
    
  2. Initialisieren Sie das Verzeichnis als JavaScript-Anwendung, indem Sie eine package.json-Datei erstellen.Initialize the directory as a JavaScript application by creating a package.json file.

    npm init -y
    
  3. Erstellen Sie eine Datei mit dem Namen index.js für Ihren JavaScript-Code.Create a file named index.js for your JavaScript code.

    touch index.js
    

Installieren der NPM-BibliothekenInstall the NPM libraries

Führen Sie nacheinander die folgenden Befehle aus, um die Abhängigkeiten in Ihrem Anwendungsverzeichnis zu installieren:Within the application directory, install the dependencies with the following commands, executed one line at a time:

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

package.json sollte wie folgt aussehen:Your package.json should look like:

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

ErstellungsobjektmodellAuthoring Object model

Der LUIS-Erstellungsclient (Language Understanding) ist ein Objekt vom Typ LUISAuthoringClient, das sich bei Azure authentifiziert und Ihren Erstellungsschlüssel enthält.The Language Understanding (LUIS) authoring client is a LUISAuthoringClient object that authenticates to Azure, which contains your authoring key.

Codebeispiele für die ErstellungCode examples for authoring

Nach der Erstellung des Clients können Sie damit unter anderem auf folgende Funktionen zugreifen:Once the client is created, use this client to access functionality including:

VorhersageobjektmodellPrediction Object model

Der LUIS-Erstellungsclient (Language Understanding) ist ein Objekt vom Typ LUISAuthoringClient, das sich bei Azure authentifiziert und Ihren Erstellungsschlüssel enthält.The Language Understanding (LUIS) authoring client is a LUISAuthoringClient object that authenticates to Azure, which contains your authoring key.

Codebeispiele für die VorhersagelaufzeitCode examples for prediction runtime

Nach der Erstellung des Clients können Sie damit unter anderem auf folgende Funktionen zugreifen:Once the client is created, use this client to access functionality including:

CodebeispieleCode examples

In den bereitgestellten Codeausschnitten wird veranschaulicht, wie Sie die folgenden Vorgänge mit der LUIS-Clientbibliothek (Language Understanding) für Python ausführen:These code snippets show you how to do the following with the Language Understanding (LUIS) client library for python:

Hinzufügen der AbhängigkeitenAdd the dependencies

Öffnen Sie die Datei index.js in Ihrem bevorzugten Editor bzw. Ihrer bevorzugten IDE, und fügen Sie dann die folgenden Abhängigkeiten hinzu:Open the index.js file in your preferred editor or IDE named then add the following dependencies.

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

Hinzufügen von CodebausteinenAdd boilerplate code

  1. Fügen Sie die quickstart-Methode und Ihren Aufruf hinzu.Add the quickstart method and its call. Diese Methode enthält den Großteil des restlichen Codes.This method holds most of the remaining code. Diese Methode wird am Ende der Datei aufgerufen.This method is called at the end of the file.

    const quickstart = async () => {
    
        // add calls here
    
    
    }
    quickstart()
        .then(result => console.log("Done"))
        .catch(err => {
            console.log(`Error: ${err}`)
            })
    
  2. Fügen Sie den verbleibenden Code in der quickstart-Methode hinzu, sofern nicht anders angegeben.Add the remaining code in the quickstart method unless otherwise specified.

Erstellen von Variablen für die AppCreate variables for the app

Erstellen Sie zwei Sätze von Variablen: Sie ändern den ersten Satz, der zweite bleibt, wie er im Codebeispiel angezeigt wird.Create two sets of variables: the first set you change, the second set leave as they appear in the code sample.

  1. Erstellen Sie Variablen für Ihren Erstellungsschlüssel und Ihre Ressourcennamen.Create variables to hold your authoring key and resource names.

    const authoringKey = 'REPLACE-WITH-YOUR-ASSIGNED-AUTHORING-KEY';
    
    const authoringResourceName = "REPLACE-WITH-YOUR-AUTHORING-RESOURCE-NAME";
    const predictionResourceName = "REPLACE-WITH-YOUR-PREDICTION-RESOURCE-NAME";
    
  2. Erstellen Sie Variablen für Ihre Endpunkte, den App-Namen, die Version und den Namen der Absicht.Create variables to hold your endpoints, app name, version, and intent name.

    const authoringEndpoint = `https://${authoringResourceName}.cognitiveservices.azure.com/`;
    const predictionEndpoint = `https://${predictionResourceName}.cognitiveservices.azure.com/`;
    
    const appName = "Contoso Pizza Company";
    const versionId = "0.1";
    const intentName = "OrderPizzaIntent";
    

Authentifizieren des ClientsAuthenticate the client

Erstellen Sie ein Objekt vom Typ CognitiveServicesCredentials mit Ihrem Schlüssel, und verwenden Sie es mit Ihrem Endpunkt, um ein Objekt vom Typ LUISAuthoringClient zu erstellen.Create an CognitiveServicesCredentials object with your key, and use it with your endpoint to create an LUISAuthoringClient object.

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

Erstellen einer LUIS-AppCreate a LUIS app

Eine LUIS-App enthält das NLP-Modell (Natural Language Processing, Verarbeitung natürlicher Sprache) mit Absichten, Entitäten und Beispieläußerungen.A LUIS app contains the natural language processing (NLP) model including intents, entities, and example utterances.

Erstellen Sie zum Generieren der App eine Methode vom Typ add für das AppsOperation-Objekt.Create a AppsOperation object's add method to create the app. Name und Sprachkultur sind erforderliche Eigenschaften.The name and language culture are required properties.

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

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

const appId = createAppResult.body

Erstellen der Absicht für die AppCreate intent for the app

Das primäre Objekt im Modell einer LUIS-App ist die Absicht.The primary object in a LUIS app's model is the intent. Die Absicht orientiert sich an einer Gruppierung der Absichten von Benutzeräußerungen.The intent aligns's with a grouping of user utterance intentions. Ein Benutzer kann eine Frage stellen oder etwas sagen, um eine bestimmte beabsichtigte Antwort von einem Bot (oder von einer anderen Clientanwendung) zu erhalten.A user may ask a question, or make a statement looking for a particular intended response from a bot (or other client application). Beispiele für Absichten wären etwa das Buchen eines Flugs, das Einholen von Wetterinformationen für eine Zielstadt oder das Erfragen von Kontaktinformationen für den Kundendienst.Examples of intentions are booking a flight, asking about weather in a destination city, and asking about contact information for customer service.

Verwenden Sie die Methode model.add_intent mit dem Namen der eindeutigen Absicht, und übergeben Sie anschließend die App-ID, die Versions-ID und den Namen der neuen Absicht.Use the model.add_intent method with the name of the unique intent then pass the app ID, version ID, and new intent name.

Der Wert intentName wird im Abschnitt Erstellen von Variablen für die App als OrderPizzaIntent hartcodiert und ist Teil der Variablen.The intentName value is hard-coded to OrderPizzaIntent as part of the variables in the Create variables for the app section.

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

Erstellen von Entitäten für die AppCreate entities for the app

Entitäten sind zwar nicht erforderlich, aber in den meisten Apps vorhanden.While entities are not required, they are found in most apps. Die Entität extrahiert Informationen aus der Benutzeräußerung, die zur Erfüllung der Absicht des Benutzers erforderlich sind.The entity extracts information from the user utterance, necessary to fullfil the user's intention. Es gibt mehrere Arten von vordefinierten und benutzerdefinierten Entitäten, die jeweils über ein eigenes DTO-Modell (Data Transformation Object) verfügen.There are several types of prebuilt and custom entities, each with their own data transformation object (DTO) models. Zu den gängigen vordefinierten Entitäten, die Sie Ihrer App hinzufügen können, zählen etwa number, datetimeV2, geographyV2 und ordinal.Common prebuilt entities to add to your app include number, datetimeV2, geographyV2, ordinal.

Wichtig: Entitäten sind nicht mit einer Absicht gekennzeichnet.It is important to know that entities are not marked with an intent. Sie gelten in der Regel für mehrere Absichten.They can and usually do apply to many intents. Nur exemplarische Benutzeräußerungen sind für eine bestimmte, einzelne Absicht gekennzeichnet.Only example user utterances are marked for a specific, single intent.

Erstellungsmethoden für Entitäten sind Teil der Klasse Model.Creation methods for entities are part of the Model class. Jeder Entitätstyp verfügt über ein eigenes DTO-Modell (Data Transformation Object).Each entity type has its own data transformation object (DTO) model.

Mit dem Code für die Entitätserstellung wird eine Machine Learning-Entität mit untergeordneten Entitäten und Features erstellt, die auf die untergeordneten Entitäten vom Typ Quantity angewendet werden.The entity creation code creates a machine-learning entity with subentities and features applied to the Quantity subentities.

Ausschnitt aus einem Screenshot des Portals: erstellte Entität, Machine Learning-Entität mit untergeordneten Entitäten und Features, die auf die untergeordneten Entitäten vom Typ „Quantity“ angewendet werden

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

Fügen Sie die folgende Methode oberhalb der quickstart-Methode ein, um die ID der untergeordneten Entität vom Typ „Quantity“ zu ermitteln und dieser untergeordneten Entität die entsprechenden Features zuzuweisen.Put the following method above the quickstart method to find the Quantity subentity's ID, in order to assign the features to that subentity.

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

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

}

Hinzufügen einer Beispieläußerung zu einer AbsichtAdd example utterance to intent

Um die Absicht einer Äußerung ermitteln und Entitäten extrahieren zu können, benötigt die App Beispiele für Äußerungen.In order to determine an utterance's intention and extract entities, the app needs examples of utterances. Die Beispiele müssen auf eine bestimmte, einzelne Absicht ausgerichtet sein und alle benutzerdefinierten Entitäten markieren.The examples need to target a specific, single intent and should mark all custom entities. Vordefinierte Entitäten müssen nicht markiert werden.Prebuilt entities do not need to be marked.

Fügen Sie Beispieläußerungen hinzu, indem Sie eine Liste mit Objekten vom Typ ExampleLabelObject erstellen (jeweils ein Objekt pro Beispieläußerung).Add example utterances by creating a list of ExampleLabelObject objects, one object for each example utterance. Jedes Beispiel muss alle Entitäten mit einem Wörterbuch mit Name-Wert-Paaren (Entitätsname und Entitätswert) markieren.Each example should mark all entities with a dictionary of name/value pairs of entity name and entity value. Der Entitätswert muss exakt dem Vorkommen im Text der Beispieläußerung entsprechen.The entity value should be exactly as it appears in the text of the example utterance.

Ausschnitt eines Screenshots mit der bezeichneten Beispieläußerung im Portal

Rufen Sie examples.add mit der App-ID, der Versions-ID und dem Beispiel auf.Call examples.add with the app ID, version ID, and the example.

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

Trainieren der AppTrain the app

Nach Erstellung des Modells muss die LUIS-App für diese Version des Modells trainiert werden.Once the model is created, the LUIS app needs to be trained for this version of the model. Ein trainiertes Modell kann in einem Container verwendet oder in den Staging- oder Produktslots veröffentlicht werden.A trained model can be used in a container, or published to the staging or product slots.

Für die Methode train.trainVersion müssen die App-ID und die Versions-ID angegeben werden.The train.trainVersion method needs the app ID and the version ID.

Bei sehr kleinen Modellen (wie etwa in dieser Schnellstartanleitung) dauert das Training nicht sehr lang.A very small model, such as this quickstart shows, will train very quickly. Bei Produktionsanwendungen muss das App-Training auch einen Abfrageaufruf für die Methode get_status enthalten, um zu bestimmen, wann bzw. ob das Training erfolgreich war.For production-level applications, training the app should include a polling call to the get_status method to determine when or if the training succeeded. Die Antwort ist eine Liste mit Objekten vom Typ ModelTrainingInfo, die jeweils einen separaten Status für die einzelnen Objekte besitzen.The response is a list of ModelTrainingInfo objects with a separate status for each object. Alle Objekte müssen erfolgreich sein, damit das Training als abgeschlossen gilt.All objects must be successful for the training to be considered complete.

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

Veröffentlichen der App im ProduktionsslotPublish app to production slot

Veröffentlichen Sie die LUIS-App mithilfe der Methode app.publish.Publish the LUIS app using the app.publish method. Dadurch wird die aktuelle trainierte Version im angegebenen Slot am Endpunkt veröffentlicht.This publishes the current trained version to the specified slot at the endpoint. Ihre Clientanwendung verwendet diesen Endpunkt zum Senden von Benutzeräußerungen für die Absichtsvorhersage und die Entitätsextraktion.Your client application uses this endpoint to send user utterances for prediction of intent and entity extraction.

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

Authentifizieren des VorhersageruntimeclientsAuthenticate the prediction runtime client

Verwenden Sie ein Objekt vom Typ „msRest.ApiKeyCredentials“ mit Ihrem Schlüssel, und verwenden Sie es mit Ihrem Endpunkt, um ein Objekt vom Typ LUIS.LUISRuntimeClient zu erstellen.Use an msRest.ApiKeyCredentials object with your key, and use it with your endpoint to create an LUIS.LUISRuntimeClient object.

Achtung

In dieser Schnellstartanleitung wird der Erstellungsschlüssel als Teil der Runtimeanmeldeinformationen verwendet.This quickstart uses the authoring key as as part of the runtime credentials. Der Erstellungsschlüssel kann einige Abfragen an die Runtime senden.The authoring key is allowed to query the runtime with a few queries. Ersetzen Sie für Code auf Staging- und Produktionsebene den Erstellungsschlüssel durch einen Vorhersageruntimeschlüssel.For staging and production-level code, replace the authoring key with a prediction runtime key.

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

Abrufen der Vorhersage aus der LaufzeitGet prediction from runtime

Fügen Sie den folgenden Code hinzu, um die Anforderung an die Vorhersageruntime zu erstellen.Add the following code to create the request to the prediction runtime. Die Benutzeräußerung ist Teil des Objekts predictionRequest.The user utterance is part of the predictionRequest object.

Die Methode luisRuntimeClient.prediction.getSlotPrediction benötigt mehrere Parameter, um die Anforderung erfüllen zu können. Hierzu zählen beispielsweise die App-ID, der Slotname und das Vorhersageanforderungsobjekt.The luisRuntimeClient.prediction.getSlotPrediction method needs several parameters such as the app ID, the slot name, and the prediction request object to fulfill the request. Die anderen Optionen, wie z. B. „Ausführlich“, „Alle Absichten anzeigen“ und „Protokollieren“, sind optional.The other options such as verbose, show all intents, and log are optional.

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

Die Vorhersageantwort ist ein JSON-Objekt, das die Absicht und alle gefundenen Entitäten enthält.The prediction response is a JSON object including the intent and any entities found.

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

Ausführen der AnwendungRun the application

Führen Sie die Anwendung mit dem Befehl node index.js für die Schnellstartdatei aus.Run the application with the node index.js command on your quickstart file.

node index.js

Verwenden Sie die LUIS-Clientbibliotheken (Language Understanding) für Python für Folgendes:Use the Language Understanding (LUIS) client libraries for Python to:

  • Erstellen einer AppCreate an app
  • Hinzufügen einer Absicht (eine durch maschinelles Lernen erworbene Entität) mit einer BeispieläußerungAdd an intent, a machine-learned entity, with an example utterance
  • Trainieren und Veröffentlichen der AppTrain and publish app
  • Abfragen der VorhersagelaufzeitQuery prediction runtime

Referenzdokumentation | Quellcode für die Erstellungs- und Vorhersagebibliothek | Paket (Pypi) | BeispieleReference documentation | Authoring and Prediction Library source code | Package (Pypi) | Samples

VoraussetzungenPrerequisites

  • Die aktuelle Version von Python 3.x.The current version of Python 3.x.
  • Azure-Abonnement – Erstellen eines kostenlosen KontosAzure subscription - Create one for free
  • Sobald Sie über Ihr Azure-Abonnement verfügen, erstellen Sie eine Language Understanding-Erstellungsressource im Azure-Portal, um an Ihren Schlüssel und Ihren Endpunkt zu gelangen.Once you have your Azure subscription, create a Language Understanding authoring resource in the Azure portal to get your key and endpoint. Warten Sie ihre Bereitstellung ab, und klicken Sie auf die Schaltfläche Zu Ressource wechseln.Wait for it to deploy and click the Go to resource button.
    • Sie benötigen den Schlüssel und Endpunkt der von Ihnen erstellten Ressource, um Ihre Anwendung mit der Language Understanding-Erstellung zu verbinden.You will need the key and endpoint from the resource you create to connect your application to Language Understanding authoring. Der Schlüssel und der Endpunkt werden weiter unten in der Schnellstartanleitung in den Code eingefügt.You'll paste your key and endpoint into the code below later in the quickstart. Sie können den kostenlosen Tarif (F0) verwenden, um den Dienst auszuprobieren.You can use the free pricing tier (F0) to try the service.

EinrichtenSetting up

Erstellen einer neuen Python-AnwendungCreate a new Python application

  1. Erstellen Sie in einem Konsolenfenster ein neues Verzeichnis für Ihre Anwendung, und wechseln Sie in dieses Verzeichnis.In a console window create a new directory for your application and move into that directory.

    mkdir quickstart-sdk && cd quickstart-sdk
    
  2. Erstellen Sie eine Datei mit dem Namen authoring_and_predict.py für Ihren Python-Code.Create a file named authoring_and_predict.py for your Python code.

    touch authoring_and_predict.py
    

Installieren der Clientbibliothek mit PipInstall the client library with Pip

Installieren Sie innerhalb des Anwendungsverzeichnisses die LUIS-Clientbibliothek (Language Understanding) für Python mithilfe des folgenden Befehls:Within the application directory, install the Language Understanding (LUIS) client library for python with the following command:

pip install azure-cognitiveservices-language-luis

ErstellungsobjektmodellAuthoring Object model

Der LUIS-Erstellungsclient (Language Understanding) ist ein Objekt vom Typ LUISAuthoringClient, das sich bei Azure authentifiziert und Ihren Erstellungsschlüssel enthält.The Language Understanding (LUIS) authoring client is a LUISAuthoringClient object that authenticates to Azure, which contains your authoring key.

Codebeispiele für die ErstellungCode examples for authoring

Nach der Erstellung des Clients können Sie damit unter anderem auf folgende Funktionen zugreifen:Once the client is created, use this client to access functionality including:

VorhersageobjektmodellPrediction Object model

Der LUIS-Vorhersagelaufzeit-Client (Language Understanding) ist ein Objekt vom Typ LUISRuntimeClient, das sich bei Azure authentifiziert und Ihren Ressourcenschlüssel enthält.The Language Understanding (LUIS) prediction runtime client is a LUISRuntimeClient object that authenticates to Azure, which contains your resource key.

Codebeispiele für die VorhersagelaufzeitCode examples for prediction runtime

Nach der Erstellung des Clients können Sie damit unter anderem auf folgende Funktionen zugreifen:Once the client is created, use this client to access functionality including:

CodebeispieleCode examples

In den bereitgestellten Codeausschnitten wird veranschaulicht, wie Sie die folgenden Vorgänge mit der LUIS-Clientbibliothek (Language Understanding) für Python ausführen:These code snippets show you how to do the following with the Language Understanding (LUIS) client library for python:

Hinzufügen der AbhängigkeitenAdd the dependencies

Fügen Sie der Python-Datei die Clientbibliotheken hinzu.Add the client libraries to the python file.

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

import json, time

Hinzufügen von CodebausteinenAdd boilerplate code

  1. Fügen Sie die quickstart-Methode und Ihren Aufruf hinzu.Add the quickstart method and its call. Diese Methode enthält den Großteil des restlichen Codes.This method holds most of the remaining code. Diese Methode wird am Ende der Datei aufgerufen.This method is called at the end of the file.

    def quickstart():
    
        # add calls here, remember to indent properly
    
    quickstart()
    
  2. Fügen Sie den verbleibenden Code in der quickstart-Methode hinzu, sofern nicht anders angegeben.Add the remaining code in the quickstart method unless otherwise specified.

Erstellen von Variablen für die AppCreate variables for the app

Erstellen Sie zwei Sätze von Variablen: Sie ändern den ersten Satz, der zweite bleibt, wie er im Codebeispiel angezeigt wird.Create two sets of variables: the first set you change, the second set leave as they appear in the code sample.

  1. Erstellen Sie Variablen für Ihren Erstellungsschlüssel und Ihre Ressourcennamen.Create variables to hold your authoring key and resource names.

    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. Erstellen Sie Variablen für Ihre Endpunkte, den App-Namen, die Version und den Namen der Absicht.Create variables to hold your endpoints, app name, version, and intent name.

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

Authentifizieren des ClientsAuthenticate the client

Erstellen Sie ein Objekt vom Typ CognitiveServicesCredentials mit Ihrem Schlüssel, und verwenden Sie es mit Ihrem Endpunkt, um ein Objekt vom Typ LUISAuthoringClient zu erstellen.Create an CognitiveServicesCredentials object with your key, and use it with your endpoint to create an LUISAuthoringClient object.

client = LUISAuthoringClient(authoringEndpoint, CognitiveServicesCredentials(authoringKey))

Erstellen einer LUIS-AppCreate a LUIS app

Eine LUIS-App enthält das NLP-Modell (Natural Language Processing, Verarbeitung natürlicher Sprache) mit Absichten, Entitäten und Beispieläußerungen.A LUIS app contains the natural language processing (NLP) model including intents, entities, and example utterances.

Erstellen Sie zum Generieren der App eine Methode vom Typ add für das AppsOperation-Objekt.Create a AppsOperation object's add method to create the app. Name und Sprachkultur sind erforderliche Eigenschaften.The name and language culture are required properties.

# define app basics
appDefinition = {
    "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))

Erstellen der Absicht für die AppCreate intent for the app

Das primäre Objekt im Modell einer LUIS-App ist die Absicht.The primary object in a LUIS app's model is the intent. Die Absicht orientiert sich an einer Gruppierung der Absichten von Benutzeräußerungen.The intent aligns's with a grouping of user utterance intentions. Ein Benutzer kann eine Frage stellen oder etwas sagen, um eine bestimmte beabsichtigte Antwort von einem Bot (oder von einer anderen Clientanwendung) zu erhalten.A user may ask a question, or make a statement looking for a particular intended response from a bot (or other client application). Beispiele für Absichten wären etwa das Buchen eines Flugs, das Einholen von Wetterinformationen für eine Zielstadt oder das Erfragen von Kontaktinformationen für den Kundendienst.Examples of intentions are booking a flight, asking about weather in a destination city, and asking about contact information for customer service.

Verwenden Sie die Methode model.add_intent mit dem Namen der eindeutigen Absicht, und übergeben Sie anschließend die App-ID, die Versions-ID und den Namen der neuen Absicht.Use the model.add_intent method with the name of the unique intent then pass the app ID, version ID, and new intent name.

Der Wert intentName wird im Abschnitt Erstellen von Variablen für die App als OrderPizzaIntent hartcodiert und ist Teil der Variablen.The intentName value is hard-coded to OrderPizzaIntent as part of the variables in the Create variables for the app section.

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

Erstellen von Entitäten für die AppCreate entities for the app

Entitäten sind zwar nicht erforderlich, aber in den meisten Apps vorhanden.While entities are not required, they are found in most apps. Die Entität extrahiert Informationen aus der Benutzeräußerung, die zur Erfüllung der Absicht des Benutzers erforderlich sind.The entity extracts information from the user utterance, necessary to fullfil the user's intention. Es gibt mehrere Arten von vordefinierten und benutzerdefinierten Entitäten, die jeweils über ein eigenes DTO-Modell (Data Transformation Object) verfügen.There are several types of prebuilt and custom entities, each with their own data transformation object (DTO) models. Zu den gängigen vordefinierten Entitäten, die Sie Ihrer App hinzufügen können, zählen etwa number, datetimeV2, geographyV2 und ordinal.Common prebuilt entities to add to your app include number, datetimeV2, geographyV2, ordinal.

Wichtig: Entitäten sind nicht mit einer Absicht gekennzeichnet.It is important to know that entities are not marked with an intent. Sie gelten in der Regel für mehrere Absichten.They can and usually do apply to many intents. Nur exemplarische Benutzeräußerungen sind für eine bestimmte, einzelne Absicht gekennzeichnet.Only example user utterances are marked for a specific, single intent.

Erstellungsmethoden für Entitäten sind Teil der Klasse ModelOperations.Creation methods for entities are part of the ModelOperations class. Jeder Entitätstyp verfügt über ein eigenes DTO-Modell (Data Transformation Object).Each entity type has its own data transformation object (DTO) model.

Mit dem Code für die Entitätserstellung wird eine Machine Learning-Entität mit untergeordneten Entitäten und Features erstellt, die auf die untergeordneten Entitäten vom Typ Quantity angewendet werden.The entity creation code creates a machine-learning entity with subentities and features applied to the Quantity subentities.

Ausschnitt aus einem Screenshot des Portals: erstellte Entität, Machine Learning-Entität mit untergeordneten Entitäten und Features, die auf die untergeordneten Entitäten vom Typ „Quantity“ angewendet werden

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

Fügen Sie die folgende Methode oberhalb der quickstart-Methode ein, um die ID der untergeordneten Entität vom Typ „Quantity“ zu ermitteln und dieser untergeordneten Entität die entsprechenden Features zuzuweisen.Put the following method above the quickstart method to find the Quantity subentity's ID, in order to assign the features to that subentity.

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

Hinzufügen einer Beispieläußerung zu einer AbsichtAdd example utterance to intent

Um die Absicht einer Äußerung ermitteln und Entitäten extrahieren zu können, benötigt die App Beispiele für Äußerungen.In order to determine an utterance's intention and extract entities, the app needs examples of utterances. Die Beispiele müssen auf eine bestimmte, einzelne Absicht ausgerichtet sein und alle benutzerdefinierten Entitäten markieren.The examples need to target a specific, single intent and should mark all custom entities. Vordefinierte Entitäten müssen nicht markiert werden.Prebuilt entities do not need to be marked.

Fügen Sie Beispieläußerungen hinzu, indem Sie eine Liste mit Objekten vom Typ ExampleLabelObject erstellen (jeweils ein Objekt pro Beispieläußerung).Add example utterances by creating a list of ExampleLabelObject objects, one object for each example utterance. Jedes Beispiel muss alle Entitäten mit einem Wörterbuch mit Name-Wert-Paaren (Entitätsname und Entitätswert) markieren.Each example should mark all entities with a dictionary of name/value pairs of entity name and entity value. Der Entitätswert muss exakt dem Vorkommen im Text der Beispieläußerung entsprechen.The entity value should be exactly as it appears in the text of the example utterance.

Ausschnitt eines Screenshots mit der bezeichneten Beispieläußerung im Portal

Rufen Sie examples.add mit der App-ID, der Versions-ID und dem Beispiel auf.Call examples.add with the app ID, version ID, and the example.

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

Trainieren der AppTrain the app

Nach Erstellung des Modells muss die LUIS-App für diese Version des Modells trainiert werden.Once the model is created, the LUIS app needs to be trained for this version of the model. Ein trainiertes Modell kann in einem Container verwendet oder in den Staging- oder Produktslots veröffentlicht werden.A trained model can be used in a container, or published to the staging or product slots.

Für die Methode train.train_version müssen die App-ID und die Versions-ID angegeben werden.The train.train_version method needs the app ID and the version ID.

Bei sehr kleinen Modellen (wie etwa in dieser Schnellstartanleitung) dauert das Training nicht sehr lang.A very small model, such as this quickstart shows, will train very quickly. Bei Produktionsanwendungen muss das App-Training auch einen Abfrageaufruf für die Methode get_status enthalten, um zu bestimmen, wann bzw. ob das Training erfolgreich war.For production-level applications, training the app should include a polling call to the get_status method to determine when or if the training succeeded. Die Antwort ist eine Liste mit Objekten vom Typ ModelTrainingInfo, die jeweils einen separaten Status für die einzelnen Objekte besitzen.The response is a list of ModelTrainingInfo objects with a separate status for each object. Alle Objekte müssen erfolgreich sein, damit das Training als abgeschlossen gilt.All objects must be successful for the training to be considered complete.

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

Veröffentlichen der App im ProduktionsslotPublish app to production slot

Veröffentlichen Sie die LUIS-App mithilfe der Methode app.publish.Publish the LUIS app using the app.publish method. Dadurch wird die aktuelle trainierte Version im angegebenen Slot am Endpunkt veröffentlicht.This publishes the current trained version to the specified slot at the endpoint. Ihre Clientanwendung verwendet diesen Endpunkt zum Senden von Benutzeräußerungen für die Absichtsvorhersage und die Entitätsextraktion.Your client application uses this endpoint to send user utterances for prediction of intent and entity extraction.

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

Authentifizieren des VorhersageruntimeclientsAuthenticate the prediction runtime client

Verwenden Sie das Anmeldeinformationsobjekt mit Ihrem Schlüssel und mit Ihrem Endpunkt, um ein Objekt vom Typ LUISRuntimeClientConfiguration zu erstellen.Use the credentials object with your key, and use it with your endpoint to create an LUISRuntimeClientConfiguration object.

Achtung

In dieser Schnellstartanleitung wird der Erstellungsschlüssel als Teil der Runtimeanmeldeinformationen verwendet.This quickstart uses the authoring key as as part of the runtime credentials. Der Erstellungsschlüssel kann einige Abfragen an die Runtime senden.The authoring key is allowed to query the runtime with a few queries. Ersetzen Sie für Code auf Staging- und Produktionsebene den Erstellungsschlüssel durch einen Vorhersageruntimeschlüssel.For staging and production-level code, replace the authoring key with a prediction runtime key.

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

Abrufen der Vorhersage aus der LaufzeitGet prediction from runtime

Fügen Sie den folgenden Code hinzu, um die Anforderung an die Vorhersageruntime zu erstellen.Add the following code to create the request to the prediction runtime.

Die Benutzeräußerung ist Teil des Objekts prediction_request.The user utterance is part of the prediction_request object.

Die Methode get_slot_prediction benötigt mehrere Parameter, um die Anforderung erfüllen zu können. Hierzu zählen beispielsweise die App-ID, der Slotname und das Vorhersageanforderungsobjekt.The get_slot_prediction method needs several parameters such as the app ID, the slot name, and the prediction request object to fulfill the request. Die anderen Optionen, wie z. B. „Ausführlich“, „Alle Absichten anzeigen“ und „Protokollieren“, sind optional.The other options such as verbose, show all intents, and log are optional. Von der Anforderung wird ein Objekt vom Typ PredictionResponse zurückgegeben.The request returns a 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))

Die Vorhersageantwort ist ein JSON-Objekt, das die Absicht und alle gefundenen Entitäten enthält.The prediction response is a JSON object including the intent and any entities found.

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

Ausführen der AnwendungRun the application

Führen Sie die Anwendung mit dem Befehl python für die Schnellstartdatei aus.Run the application with the python command on your quickstart file.

python authoring_and_predict.py

Wenn Sie dieser Schnellstartanleitung folgen, führen Sie drei REST-Aufrufe nacheinander aus.By following this quickstart, you will perform three REST calls in sequence.

ReferenzdokumentationReference documentation

VoraussetzungenPrerequisites

  • Ein kostenloses LUIS-Konto.A free LUIS account.

  • Ein Text-Editor, z. B. Visual Studio Code.A text editor such as Visual Studio Code.

  • Das Befehlszeilenprogramm cURL.The command-line program cURL. Das cURL-Programm ist unter macOS, in den meisten Linux-Distributionen und in Windows 10, Build 1803 und höher, bereits installiert.The cURL program is already installed on macOS, most Linux distributions, and Windows 10 build 1803 and later.

    Wenn Sie cURL installieren müssen, können Sie es von der cURL-Downloadseite herunterladen.If you need to install cURL, you can download cURL from the cURL download page.

Erstellen Sie die Pizza-AppCreate Pizza app

Erstellen Sie die Pizza-App.Create the pizza app.

  1. Wählen Sie pizza-app-for-luis-v6.json aus, um die GitHub-Seite für die Datei pizza-app-for-luis.json anzuzeigen.Select pizza-app-for-luis-v6.json to bring up the GitHub page for the pizza-app-for-luis.json file.
  2. Klicken Sie mit der rechten Maustaste auf die Schaltfläche Raw (oder tippen Sie lang darauf), und wählen Sie Link speichern unter aus, um pizza-app-for-luis.json auf Ihrem Computer zu speichern.Right-click or long tap the Raw button and select Save link as to save the pizza-app-for-luis.json to your computer.
  3. Melden Sie sich beim LUIS-Portal an.Sign into the LUIS portal.
  4. Wählen Sie Meine Apps aus.Select My Apps.
  5. Wählen Sie auf der Seite Meine Apps + Neue App für Unterhaltung aus.On the My Apps page, select + New app for conversation.
  6. Wählen Sie Als JSON importieren aus.Select Import as JSON.
  7. Wählen Sie im Dialogfeld Neue App importieren die Schaltfläche Datei auswählen aus.In the Import new app dialog, select the Choose File button.
  8. Wählen Sie die heruntergeladene Datei pizza-app-for-luis.json und dann Öffnen aus.Select the pizza-app-for-luis.json file you downloaded, then select Open.
  9. Geben Sie im Feld Name im Dialogfeld Neue App importieren einen Namen für Ihre Pizza-App ein, und wählen Sie dann die Schaltfläche Fertig aus.In the Import new app dialog Name field, enter a name for your Pizza app, then select the Done button.

Die App wird importiert.The app will be imported.

Wenn ein Dialogfeld Erstellen einer effektiven LUIS-App angezeigt wird, schließen Sie das Dialogfeld.If you see a dialog How to create an effective LUIS app, close the dialog.

Trainieren und Veröffentlichen der Pizza-AppTrain and publish the Pizza app

Die Seite Absichten sollte mit einer Liste aller Absichten in der Pizza-App angezeigt werden.You should see the Intents page with a list of the intents in the Pizza app.

  1. Wählen Sie rechts oben auf der LUIS-Website die Schaltfläche Train (Trainieren) aus.In the top-right side of the LUIS website, select the Train button.

    Schaltfläche „Train“ (Trainieren)

  2. Das Training ist abgeschlossen, wenn die Statusanzeige auf der Schaltfläche Train (Trainieren) grün dargestellt wird.Training is complete when status indicator on the Train button is green.

Damit Sie eine LUIS-Vorhersage in einem Chatbot oder einer anderen Clientanwendung empfangen können, muss die App im Vorhersage-Endpunkt veröffentlicht werden.In order to receive a LUIS prediction in a chat bot or other client application, you need to publish the app to the prediction endpoint.

  1. Wählen Sie im Navigationsbereich rechts oben die Option Veröffentlichen aus.Select Publish in the top-right navigation.

    Screenshot: LUIS-Schaltfläche zum Veröffentlichen am Endpunkt (im Menü rechts oben)Screenshot of LUIS publish to endpoint button in top right menu

  2. Wählen Sie den Slot Produktion und anschließend Fertig aus.Select the Production slot, then select Done.

    Screenshot: LUIS-Veröffentlichung am EndpunktScreenshot of LUIS publish to endpoint

  3. Wählen Sie in der Benachrichtigung die Option Access your endpoint URLs (Auf Endpunkt-URLs zugreifen) aus, um zur Seite Azure-Ressourcen zu navigieren.Select Access your endpoint URLs in the notification to go to the Azure Resources page. Die URLs werden nur angezeigt, wenn der App eine Vorhersageressource zugeordnet ist.You will only be able to see the URLs if you have a prediction resource associated with the app. Sie können auch auf die Seite Azure-Ressourcen zugreifen, indem Sie auf Verwalten klicken.You can also find the Azure Resources page by clicking Manage.

    Meldung zur Veröffentlichung der AppA message that the app has been published

Hinzufügen einer Erstellungsressource zur Pizza-AppAdd an authoring resource to the Pizza app

  1. Wählen Sie VERWALTEN aus.Select MANAGE.
  2. Wählen Sie Azure-Ressourcen aus.Select Azure Resources.
  3. Wählen Sie Erstellungsressource aus.Select Authoring Resource.
  4. Wählen Sie Change authoring resource (Erstellungsressource ändern) aus.Select Change authoring resource.

Wenn Sie über eine Erstellungsressource verfügen, geben Sie die Werte für Mandantenname, Abonnementname und Name der LUIS-Ressource Ihrer Erstellungsressource ein.If you have an authoring resource, enter the Tenant Name, Subscription Name, and LUIS resource name of your authoring resource.

Wenn Sie keine Erstellungsressource besitzen:If you do not have an authoring resource:

  1. Wählen Sie die Option Neue Ressource erstellen aus.Select Create new resource.
  2. Geben Sie Werte für Mandantenname, Ressourcenname, Abonnementname und Name der Azure-Ressourcengruppe ein.Enter a Tenant Name, Resource Name, Subscription Name, and Azure Resource Group Name.

Ihre Pizza-App ist jetzt einsatzbereit.Your Pizza app is now ready to use.

Aufzeichnen der Zugriffswerte für Ihre Pizza-AppRecord the access values for your Pizza app

Um Ihre neue Pizza-App zu verwenden, benötigen Sie die App-ID, den Erstellungsschlüssel und den Erstellungsendpunkt Ihrer Pizza-App.To use your new Pizza app, you will need the app ID, authoring key, and authoring endpoint of your Pizza app. Sie benötigen einen separaten Vorhersageendpunkt und Vorhersageschlüssel, um Vorhersagen zu treffen.To get predictions, you will need your separate prediction endpoint and prediction key.

So finden Sie diese Werte:To find these values:

  1. Wählen Sie auf der Seite Absichten VERWALTEN aus.From the Intents page, select MANAGE.
  2. Notieren Sie auf der Seite Anwendungseinstellungen die App-ID.From the Application Settings page, record the App ID.
  3. Wählen Sie Azure-Ressourcen aus.Select Azure Resources.
  4. Wählen Sie Erstellungsressource aus.Select Authoring Resource.
  5. Notieren Sie den Primärschlüssel, der auf den Registerkarten Erstellungsressource und Vorhersageressourcen vermerkt ist.From the Authoring Resource and Prediction Resources tabs, record the Primary Key. Dieser Wert ist der Erstellungsschlüssel.This value is your authoring key.
  6. Notieren Sie die Endpunkt-URL.Record the Endpoint URL. Dieser Wert ist der Erstellungsendpunkt.This value is your authoring endpoint.

Erstellen einer JSON-Datei zum Trainieren der Pizza-AppCreate a JSON file to train the Pizza app

Um eine JSON-Datei mit drei Beispieläußerungen zu erstellen, speichern Sie die folgenden JSON-Daten in einer Datei mit dem Namen ExampleUtterances.JSON:To create a JSON file with three example utterances, save the following JSON data to a file named 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
      }
    ]
  }
]`

Der JSON-Code mit den Beispieläußerungen folgt einem bestimmten Format.The example utterances JSON follows a specific format.

Das Feld text enthält den Text der Beispieläußerung.The text field contains the text of the example utterance. Das Feld intentName muss dem Namen einer vorhandenen Absicht in der LUIS-App entsprechen.The intentName field must correspond to the name of an existing intent in the LUIS app. entityLabels ist ein Pflichtfeld.The entityLabels field is required. Wenn Sie keine Bezeichnungen für Entitäten angeben möchten, geben Sie ein leeres Array an.If you don't want to label any entities, provide an empty array.

Ist das entityLabels-Array nicht leer, müssen startCharIndex und endCharIndex die Entität markieren, auf die im Feld entityName verwiesen wird.If the entityLabels array is not empty, the startCharIndex and endCharIndex need to mark the entity referred to in the entityName field. Der Index ist nullbasiert.The index is zero-based. Wenn der Text der Bezeichnung mit einem Leerzeichen beginnt oder endet, schlagen die API-Aufrufe zum Hinzufügen der Äußerungen fehl.If you begin or end the label at a space in the text, the API call to add the utterances fails.

Hinzufügen von BeispieläußerungenAdd example utterances

  1. Kopieren Sie diesen Befehl in Ihren Text-Editor, um den Batch mit Beispieläußerungen hochzuladen:To upload the batch of example utterances, copy this command into your text editor:

    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. Ersetzen Sie die Werte, die mit _*_YOUR- beginnen, durch Ihre eigenen Werte.Replace the values starting with _*_YOUR- with your own values.

    InformationInformation ZweckPurpose
    _*_YOUR-AUTHORING-ENDPOINT_*_ Ihr URL-Endpunkt für die Erstellung.Your authoring URL endpoint. Beispiel: „https://REPLACE-WITH-YOUR-RESOURCE-NAME.api.cognitive.microsoft.com/“.For example, "https://REPLACE-WITH-YOUR-RESOURCE-NAME.api.cognitive.microsoft.com/". Sie haben Ihren Ressourcennamen festgelegt, als Sie die Ressource erstellt haben.You set your resource name when you created the resource.
    _*_YOUR-APP-ID_*_ Ihre LUIS-App-ID.Your LUIS app ID.
    _*_YOUR-APP-VERSION_*_ Ihre LUIS-App-Version.Your LUIS app version. Die Versionsnummer der Pizza-App lautet „0.1“ (ohne Anführungszeichen).For the Pizza app, the version number is "0.1" without the quotes.
    _*_YOUR-AUTHORING-KEY_*_ Ihr Erstellungsschlüssel mit 32 Zeichen.Your 32 character authoring key.

    Zugewiesene Schlüssel und Ressourcen werden im LUIS-Portal auf der Seite _ Azure-Ressourcen* im Abschnitt „Verwalten“ angezeigt.Assigned keys and resources are visible in the LUIS portal in the Manage section, on the _ Azure resources* page. Die App-ID wird auf der Seite Anwendungseinstellungen ebenfalls im Abschnitt „Verwalten“ angezeigt.The app ID is available in the same Manage section, on the Application Settings page.

  3. Starten Sie eine Eingabeaufforderung (Windows) oder ein Terminal (macOS und Linux), und wechseln Sie in das Verzeichnis, in dem Sie die ExampleUtterances.JSON-Datei gespeichert haben.Start a Command Prompt (Windows) or Terminal (macOS and Linux), and change directories to the same directory where you saved the ExampleUtterances.JSON file.

  4. Kopieren Sie den cURL-Befehl aus dem Editor, und fügen Sie ihn an der Eingabeaufforderung (Windows) oder im Terminal (macOS und Linux) ein.Copy the cURL command from the editor, and paste it into a Command Prompt (Windows) or Terminal (macOS and Linux). Drücken Sie die EINGABETASTE, um den Befehl auszuführen.Press Enter to execute the command.

    Daraufhin sollte die folgende Antwort angezeigt werden:You should see the following response:

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

    Hier sehen Sie die zur besseren Lesbarkeit formatierte Ausgabe:Here is the output formatted for readability:

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

Trainieren des Pizza-App-ModellsTrain the Pizza app model

  1. Um eine Trainingssitzung für die Pizza-App zu beginnen, kopieren Sie diesen Befehl in Ihren Text-Editor:To begin a training session for the Pizza app, copy this command into your text editor:

    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. Ersetzen Sie wie schon zuvor die Werte, die mit _*_YOUR- beginnen, durch Ihre eigenen Werte.As you did before, replace the values starting with _*_YOUR- with your own values.

  3. Kopieren Sie den cURL-Befehl aus dem Editor, und fügen Sie ihn an der Eingabeaufforderung (Windows) oder im Terminal (macOS und Linux) ein.Copy the cURL command from the editor, and paste it into a Command Prompt (Windows) or Terminal (macOS and Linux). Drücken Sie die EINGABETASTE, um den Befehl auszuführen.Press Enter to execute the command.

    Daraufhin sollte die folgende Antwort angezeigt werden:You should see the following response:

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

    Hier sehen Sie die zur besseren Lesbarkeit formatierte Ausgabe:Here is the output formatted for readability:

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

Abrufen des TrainingsstatusGet the status of training

  1. Um den Trainingsstatus der Trainingssitzung abzurufen, kopieren Sie diesen Befehl in Ihren Text-Editor:To get the training status for the training session, copy this command into your text editor:

    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. Ersetzen Sie wie schon zuvor die Werte, die mit _*_YOUR- beginnen, durch Ihre eigenen Werte.As you did before, replace the values starting with _*_YOUR- with your own values.

  3. Kopieren Sie den cURL-Befehl aus dem Editor, und fügen Sie ihn an der Eingabeaufforderung (Windows) oder im Terminal (macOS und Linux) ein.Copy the cURL command from the editor, and paste it into a Command Prompt (Windows) or Terminal (macOS and Linux). Drücken Sie die EINGABETASTE, um den Befehl auszuführen.Press Enter to execute the command.

    Daraufhin sollte die folgende Antwort angezeigt werden:You should see the following response:

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

    Hier sehen Sie die zur besseren Lesbarkeit formatierte Ausgabe:Here is the output formatted for readability:

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

Abrufen der Absicht vom VorhersageendpunktGet intent from the prediction endpoint

Verwenden Sie cURL, um den Vorhersageendpunkt abzurufen und ein Vorhersageergebnis zu erhalten.Use cURL to query the prediction endpoint and get a prediction result.

Hinweis

Dieser Befehl verwendet Ihren Vorhersageendpunkt.This command uses your prediction endpoint.

  1. Kopieren Sie diesen Befehl in Ihren Text-Editor:Copy this command into your text editor:

    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. Ersetzen Sie die Werte, die mit _*_YOUR- beginnen, durch Ihre eigenen Werte.Replace the values starting with _*_YOUR- with your own values.

    InformationInformation ZweckPurpose
    _*_YOUR-PREDICTION-ENDPOINT_*_ Ihr URL-Endpunkt für die Vorhersage.Your prediction URL endpoint. Die Seite mit den Azure-Ressourcen für Ihre App im LUIS-Portal.Located on the LUIS portal, Azure Resources page for your app.
    Beispiel: https://westus.api.cognitive.microsoft.com/.For example, https://westus.api.cognitive.microsoft.com/.
    _*_YOUR-APP-ID_*_ Ihre App-ID.Your app ID. Die Seite mit den Anwendungseinstellungen für Ihre App im LUIS-Portal.Located on the LUIS portal, Application Settings page for your app.
    _*_YOUR-PREDICTION-KEY_** Ihr 32-stelliger Vorhersageschlüssel.Your 32 character prediction key. Die Seite mit den Azure-Ressourcen für Ihre App im LUIS-Portal.Located on the LUIS portal, Azure Resources page for your app.
  3. Kopieren Sie den Text in ein Konsolenfenster, und drücken Sie die EINGABETASTE, um den Befehl auszuführen:Copy the text to a console window and press Enter to execute the command:

  4. Überprüfen Sie die Vorhersageantwort, die im JSON-Format zurückgegeben wird:Review the prediction response, which is returned as 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"]}]}}}}
    

    Die zur besseren Lesbarkeit formatierte JSON-Antwort:JSON response formatted for readability:

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

Bereinigen von RessourcenClean up resources

Sie können die App über das LUIS-Portal und die Azure-Ressourcen über das Azure-Portal löschen.You can delete the app from the LUIS portal and delete the Azure resources from the Azure portal.

Löschen Sie nach Abschluss des Schnellstarts die Datei ExampleUtterances.JSON von Ihrem Dateisystem, wenn Sie die REST-API verwenden.If you're using the REST API, delete the ExampleUtterances.JSON file from the file system when you're done with the quickstart.

ProblembehandlungTroubleshooting

  • Authentifizieren bei der Clientbibliothek: Authentifizierungsfehler weisen in der Regel darauf hin, dass der falsche Schlüssel und Endpunkt verwendet wurden.Authenticating to the client library - authentication errors usually indicate that the wrong key & endpoint were used. In dieser Schnellstartanleitung werden der Einfachheit halber der Erstellungsschlüssel und der Endpunkt für die Vorhersagelaufzeit verwendet. Dies ist aber nur möglich, wenn Sie das monatliche Kontingent noch nicht aufgebraucht haben.This quickstart uses the authoring key and endpoint for the prediction runtime as a convenience, but will only work if you haven't already used the monthly quota. Wenn Sie den Erstellungsschlüssel und den Endpunkt nicht verwenden können, müssen Sie beim Zugriff auf die Clientbibliothek des Prediction Runtime SDK den Schlüssel und den Endpunkt der Vorhersagelaufzeit verwenden.If you can't use the authoring key and endpoint, you need to use the prediction runtime key and endpoint when accessing the prediction runtime SDK client library.
  • Erstellen von Entitäten: Wenn beim Erstellen der in diesem Tutorial verwendeten geschachtelten Machine Learning-Entität ein Fehler auftritt, stellen Sie sicher, dass Sie den Code kopiert und nicht zum Erstellen einer anderen Entität geändert haben.Creating entities - if you get an error creating the nested machine-learning entity used in this tutorial, make sure you copied the code and didn't alter the code to create a different entity.
  • Erstellen von Beispieläußerungen: Wenn beim Erstellen der in diesem Tutorial verwendeten bezeichneten Beispieläußerung ein Fehler auftritt, stellen Sie sicher, dass Sie den Code kopiert und nicht zum Erstellen eines anderen bezeichneten Beispiels geändert haben.Creating example utterances - if you get an error creating the labeled example utterance used in this tutorial, make sure you copied the code and didn't alter the code to create a different labeled example.
  • Trainieren: Wenn ein Trainingsfehler angezeigt wird, weist dies normalerweise auf eine leere App (keine Absichten mit Beispieläußerungen) oder eine App mit falsch formatierten Absichten oder Entitäten hin.Training - if you get a training error, this usually indicates an empty app (no intents with example utterances), or an app with intents or entities that are malformed.
  • Sonstige Fehler: Da der Code die Clientbibliotheken mit Text- und JSON-Objekten aufruft, vergewissern Sie sich, dass der Code nicht geändert wurde.Miscellaneous errors - because the code calls into the client libraries with text and JSON objects, make sure you haven't changed the code.

Andere Fehler: Wenn ein Fehler auftritt, der in der obigen Liste nicht behandelt wird, teilen Sie uns dies unten auf dieser Seite über den Feedbackbereich mit.Other errors - if you get an error not covered in the preceding list, let us know by giving feedback at the bottom on this page. Geben Sie die Programmiersprache und die Version der Clientbibliotheken an, die Sie installiert haben.Include the programming language and version of the client libraries you installed.

Nächste SchritteNext steps