Schnellstart: LUIS-Clientbibliotheken (Language Understanding) und REST-API
Wichtig
LUIS wird am 1. Oktober 2025 eingestellt, und ab dem 1. April 2023 können Sie keine neuen LUIS-Ressourcen erstellen. Wir empfehlen die Migration Ihrer LUIS-Anwendungen zu Conversational Language Understanding zu migrieren, um fortgesetzte Produktunterstützung und mehrsprachige Funktionen zu erhalten.
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. Sie können auch cURL verwenden, um Anforderungen über die REST-API zu senden.
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.
- Mit der Authoring-Clientbibliothek und -REST-API können Sie Ihre LUIS-App erstellen, bearbeiten, trainieren und veröffentlichen.
- Mit der Prediction Runtime-Clientbibliothek und -REST-API können Sie die veröffentlichte App abfragen.
Verwenden Sie die LUIS-Clientbibliotheken (Language Understanding) für .NET für Folgendes:
- Erstellen einer App
- Hinzufügen einer Absicht (eine durch maschinelles Lernen erworbene Entität) mit einer Beispieläußerung
- Trainieren und Veröffentlichen der App
- Abfragen der Vorhersagelaufzeit
Referenzdokumentation | Quellcode der Bibliothek für Erstellung und Vorhersage | NuGet für Erstellung und Vorhersage | C#-Beispiel
Voraussetzungen
- Aktuelle Version von .NET Core und .NET Core-CLI
- Azure-Abonnement – Erstellen eines kostenlosen Kontos
- 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. Warten Sie ihre Bereitstellung ab, und klicken Sie auf die Schaltfläche Zu Ressource wechseln.
- Sie benötigen den Schlüssel und Endpunkt der von Ihnen erstellten Ressource, um Ihre Anwendung mit der Language Understanding-Erstellung zu verbinden. Der Schlüssel und der Endpunkt werden weiter unten in der Schnellstartanleitung in den Code eingefügt. Sie können den kostenlosen Tarif (
F0
) verwenden, um den Dienst auszuprobieren.
- Sie benötigen den Schlüssel und Endpunkt der von Ihnen erstellten Ressource, um Ihre Anwendung mit der Language Understanding-Erstellung zu verbinden. Der Schlüssel und der Endpunkt werden weiter unten in der Schnellstartanleitung in den Code eingefügt. Sie können den kostenlosen Tarif (
Einrichten
Erstellen einer neuen C#-Anwendung
Erstellen Sie eine neue .NET Core-Anwendung in Ihrem bevorzugten Editor oder Ihrer bevorzugten IDE.
Verwenden Sie in einem Konsolenfenster (z. B. cmd, PowerShell oder Bash) den Befehl dotnet
new
zum Erstellen einer neuen Konsolen-App mit dem Namenlanguage-understanding-quickstart
. Dieser Befehl erstellt ein einfaches „Hallo Welt“-C#-Projekt mit einer einzigen Quelldatei:Program.cs
.dotnet new console -n language-understanding-quickstart
Wechseln Sie zum Ordner der neu erstellten App.
cd language-understanding-quickstart
Sie können die Anwendung mit folgendem Befehl erstellen:
dotnet build
Die Buildausgabe sollte keine Warnungen oder Fehler enthalten.
... Build succeeded. 0 Warning(s) 0 Error(s) ...
Installieren der NuGet-Bibliotheken
Installieren Sie innerhalb des Anwendungsverzeichnisses die LUIS-Clientbibliotheken (Language Understanding) für .NET mithilfe der folgenden Befehle:
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
Erstellungsobjektmodell
Der LUIS-Erstellungsclient (Language Understanding) ist ein Objekt vom Typ LUISAuthoringClient, das sich bei Azure authentifiziert und Ihren Erstellungsschlüssel enthält.
Codebeispiele für die Erstellung
Nach der Erstellung des Clients können Sie damit unter anderem auf folgende Funktionen zugreifen:
- Apps: Erstellen, Löschen, Veröffentlichen
- Beispieläußerungen: Hinzufügen, Löschen anhand der ID
- Features: Verwalten von Ausdruckslisten
- Modell: Verwalten von Absichten und Entitäten
- Muster: Verwalten von Mustern
- Trainieren: Trainieren der App und Abfragen des Trainingsstatus
- Versionen: Verwalten mittels Klonen, Exportieren und Löschen
Vorhersageobjektmodell
Der LUIS-Vorhersagelaufzeit-Client (Language Understanding) ist ein Objekt vom Typ LUISRuntimeClient, das sich bei Azure authentifiziert und Ihren Ressourcenschlüssel enthält.
Codebeispiele für die Vorhersagelaufzeit
Nach der Erstellung des Clients können Sie damit unter anderem auf folgende Funktionen zugreifen:
- Vorhersage nach Staging- oder Produktionsslot
- Vorhersage durch Version
Codebeispiele
In den bereitgestellten Codeausschnitten wird veranschaulicht, wie Sie die folgenden Vorgänge mit der LUIS-Clientbibliothek (Language Understanding) für Python ausführen:
- Erstellen einer App
- Hinzufügen einer Absicht
- Hinzufügen von Entitäten
- Hinzufügen von Beispieläußerungen
- Trainieren der App
- Veröffentlichen der App
- Vorhersage nach Slot
Hinzufügen der Abhängigkeiten
Öffnen Sie aus dem Projektverzeichnis die Datei Program.cs in Ihrem bevorzugten Editor oder Ihrer bevorzugten IDE. Ersetzen Sie den vorhandenen using
-Code durch die folgenden using
-Anweisungen:
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 Codebausteinen
Ändern Sie die Signatur der
Main
-Methode, um asynchrone Aufrufe zuzulassen:public static async Task Main()
Fügen Sie den restlichen Code in der
Main
-Methode derProgram
-Klasse hinzu, sofern nicht anders angegeben.
Erstellen von Variablen für die App
Erstellen Sie zwei Sätze von Variablen: Sie ändern den ersten Satz, der zweite bleibt, wie er im Codebeispiel angezeigt wird.
Wichtig
Denken Sie daran, den Schlüssel aus Ihrem Code zu entfernen, wenn Sie fertig sind, und ihn niemals zu veröffentlichen. Verwenden Sie für die Produktion eine sichere Art der Speicherung und des Zugriffs auf Ihre Anmeldeinformationen wie Azure Key Vault. Weitere Informationen finden Sie im Artikel zur Azure KI Services-Sicherheit.
Erstellen Sie Variablen für Ihren Erstellungsschlüssel und Ihre Ressourcennamen.
var key = "PASTE_YOUR_LUIS_AUTHORING_SUBSCRIPTION_KEY_HERE"; var authoringEndpoint = "PASTE_YOUR_LUIS_AUTHORING_ENDPOINT_HERE"; var predictionEndpoint = "PASTE_YOUR_LUIS_PREDICTION_ENDPOINT_HERE";
Erstellen Sie Variablen für Ihre Endpunkte, den App-Namen, die Version und den Namen der Absicht.
var appName = "Contoso Pizza Company"; var versionId = "0.1"; var intentName = "OrderPizzaIntent";
Authentifizieren des Clients
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.
var credentials = new Microsoft.Azure.CognitiveServices.Language.LUIS.Authoring.ApiKeyServiceClientCredentials(key);
var client = new LUISAuthoringClient(credentials) { Endpoint = authoringEndpoint };
Erstellen einer 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.
Erstellen Sie ein Objekt vom Typ ApplicationCreateObject. Name und Sprachkultur sind erforderliche Eigenschaften. Rufen Sie die Methode Apps.AddAsync auf. Die Antwort ist die 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 App
Das primäre Objekt im Modell einer LUIS-App ist die Absicht. Die Absicht orientiert sich an einer Gruppierung der Absichten von Benutzeräußerungen. Ein Benutzer kann eine Frage stellen oder etwas sagen, um eine bestimmte beabsichtigte Antwort von einem Bot (oder von einer anderen Clientanwendung) zu erhalten. 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.
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. Die Antwort ist die Absichts-ID.
Der Wert intentName
wird im Abschnitt intentName
als OrderPizzaIntent
hartcodiert und ist Teil der Variablen.
await client.Model.AddIntentAsync(appId, versionId, new ModelCreateObject()
{
Name = intentName
});
Erstellen von Entitäten für die App
Entitäten sind zwar nicht erforderlich, aber in den meisten Apps vorhanden. Die Entität extrahiert Informationen aus der Benutzeräußerung, die zur Erfüllung der Absicht des Benutzers erforderlich sind. Es gibt mehrere Arten von vordefinierten und benutzerdefinierten Entitäten, die jeweils über ein eigenes DTO-Modell (Data Transformation Object) verfügen. Zu den gängigen vordefinierten Entitäten, die Sie Ihrer App hinzufügen können, zählen etwa number, datetimeV2, geographyV2 und ordinal.
Wichtig: Entitäten sind nicht mit einer Absicht gekennzeichnet. Sie gelten in der Regel für mehrere Absichten. Nur die exemplarischen Benutzeräußerungen sind für eine bestimmte, einzelne Absicht gekennzeichnet.
Erstellungsmethoden für Entitäten sind Teil der Klasse Model. Jeder Entitätstyp verfügt über ein eigenes DTO-Modell (Data Transformation Object), das in der Regel das Wort model
im Namespace model
enthält.
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.
// 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.
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 Absicht
Um die Absicht einer Äußerung ermitteln und Entitäten extrahieren zu können, benötigt die App Beispiele für Äußerungen. Die Beispiele müssen auf eine bestimmte, einzelne Absicht ausgerichtet sein und alle benutzerdefinierten Entitäten markieren. Vordefinierte Entitäten müssen nicht markiert werden.
Fügen Sie Beispieläußerungen hinzu, indem Sie eine Liste mit Objekten vom Typ ExampleLabelObject erstellen (jeweils ein Objekt pro Beispieläußerung). Jedes Beispiel muss alle Entitäten mit einem Wörterbuch mit Name-Wert-Paaren (Entitätsname und Entitätswert) markieren. Der Entitätswert muss exakt dem Vorkommen im Text der Beispieläußerung entsprechen.
Rufen Sie Examples.AddAsync mit der App-ID, der Versions-ID und dem Beispiel auf.
// 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 App
Nach Erstellung des Modells muss die LUIS-App für diese Version des Modells trainiert werden. Ein trainiertes Modell kann in einem Container verwendet oder in den Staging- oder Produktslots veröffentlicht werden.
Für die Methode Train.TrainVersionAsync müssen die App-ID und die Versions-ID angegeben werden.
Bei sehr kleinen Modellen (wie etwa in dieser Schnellstartanleitung) dauert das Training nicht sehr lang. 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. Die Antwort ist eine Liste mit Objekten vom Typ ModelTrainingInfo, die jeweils einen separaten Status für die einzelnen Objekte besitzen. Alle Objekte müssen erfolgreich sein, damit das Training als abgeschlossen gilt.
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 Produktionsslot
Veröffentlichen Sie die LUIS-App mithilfe der Methode PublishAsync. Dadurch wird die aktuelle trainierte Version im angegebenen Slot am Endpunkt veröffentlicht. Ihre Clientanwendung verwendet diesen Endpunkt zum Senden von Benutzeräußerungen für die Absichtsvorhersage und die Entitätsextraktion.
await client.Apps.PublishAsync(appId, new ApplicationPublishObject { VersionId = versionId, IsStaging=false});
Authentifizieren des Vorhersageruntimeclients
Verwenden Sie ein Objekt vom Typ ApiKeyServiceClientCredentials mit Ihrem Schlüssel und mit Ihrem Endpunkt, um ein Objekt vom Typ LUISRuntimeClient zu erstellen.
Achtung
In dieser Schnellstartanleitung wird der Erstellungsschlüssel als Teil der Runtimeanmeldeinformationen verwendet. Der Erstellungsschlüssel kann einige Abfragen an die Runtime senden. Ersetzen Sie für Code auf Staging- und Produktionsebene den Erstellungsschlüssel durch einen Vorhersageruntimeschlüssel.
var runtimeClient = new LUISRuntimeClient(credentials) { Endpoint = predictionEndpoint };
Abrufen der Vorhersage aus der Laufzeit
Fügen Sie den folgenden Code hinzu, um die Anforderung an die Vorhersageruntime zu erstellen.
Die Benutzeräußerung ist Teil des PredictionRequest-Objekts.
Die GetSlotPredictionAsync-Methode benötigt mehrere Parameter, wie z. B. die App-ID, den Slotnamen, das Vorhersageanforderungsobjekt, um die Anforderung zu erfüllen. Die anderen Optionen, wie z. B. „Ausführlich“, „Alle Absichten anzeigen“ und „Protokollieren“, sind 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.
{
"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 Anwendung
Führen Sie die Anwendung mit dem Befehl dotnet run
aus dem Anwendungsverzeichnis aus.
dotnet run
Verwenden Sie die LUIS-Clientbibliotheken (Language Understanding) für Node.js für Folgendes:
- Erstellen einer App
- Hinzufügen einer Absicht (eine durch maschinelles Lernen erworbene Entität) mit einer Beispieläußerung
- Trainieren und Veröffentlichen der App
- Abfragen der Vorhersagelaufzeit
Referenzdokumentation | Erstellung und Vorhersage NPM | Beispiele
Voraussetzungen
- Node.js
- Azure-Abonnement – Erstellen eines kostenlosen Kontos
- 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. Warten Sie ihre Bereitstellung ab, und klicken Sie auf die Schaltfläche Zu Ressource wechseln.
- Sie benötigen den Schlüssel und Endpunkt der von Ihnen erstellten Ressource, um Ihre Anwendung mit der Language Understanding-Erstellung zu verbinden. Der Schlüssel und der Endpunkt werden weiter unten in der Schnellstartanleitung in den Code eingefügt. Sie können den kostenlosen Tarif (
F0
) verwenden, um den Dienst auszuprobieren.
- Sie benötigen den Schlüssel und Endpunkt der von Ihnen erstellten Ressource, um Ihre Anwendung mit der Language Understanding-Erstellung zu verbinden. Der Schlüssel und der Endpunkt werden weiter unten in der Schnellstartanleitung in den Code eingefügt. Sie können den kostenlosen Tarif (
Einrichten
Erstellen einer neuen JavaScript-Anwendung
Erstellen Sie in einem Konsolenfenster ein neues Verzeichnis für Ihre Anwendung, und wechseln Sie in dieses Verzeichnis.
mkdir quickstart-sdk && cd quickstart-sdk
Initialisieren Sie das Verzeichnis als JavaScript-Anwendung, indem Sie eine
package.json
-Datei erstellen.npm init -y
Erstellen Sie eine Datei mit dem Namen
index.js
für Ihren JavaScript-Code.touch index.js
Installieren der NPM-Bibliotheken
Führen Sie nacheinander die folgenden Befehle aus, um die Abhängigkeiten in Ihrem Anwendungsverzeichnis zu installieren:
npm install @azure/ms-rest-js
npm install @azure/cognitiveservices-luis-authoring
npm install @azure/cognitiveservices-luis-runtime
package.json
sollte wie folgt aussehen:
{
"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"
}
}
Erstellungsobjektmodell
Der LUIS-Erstellungsclient (Language Understanding) ist ein Objekt vom Typ LUISAuthoringClient, das sich bei Azure authentifiziert und Ihren Erstellungsschlüssel enthält.
Codebeispiele für die Erstellung
Nach der Erstellung des Clients können Sie damit unter anderem auf folgende Funktionen zugreifen:
- Apps: Hinzufügen, Löschen, Veröffentlichen
- Beispieläußerungen: Hinzufügen per Batch, Löschen anhand der ID
- Features: Verwalten von Ausdruckslisten
- Modell: Verwalten von Absichten und Entitäten
- Muster: Verwalten von Mustern
- Trainieren: Trainieren der App und Abfragen des Trainingsstatus
- Versionen: Verwalten mittels Klonen, Exportieren und Löschen
Vorhersageobjektmodell
Der LUIS-Erstellungsclient (Language Understanding) ist ein Objekt vom Typ LUISAuthoringClient, das sich bei Azure authentifiziert und Ihren Erstellungsschlüssel enthält.
Codebeispiele für die Vorhersagelaufzeit
Nach der Erstellung des Clients können Sie damit unter anderem auf folgende Funktionen zugreifen:
- Vorhersage nach Slot (
staging
oderproduction
) - Vorhersage nach Version
Codebeispiele
In den bereitgestellten Codeausschnitten wird veranschaulicht, wie Sie die folgenden Vorgänge mit der LUIS-Clientbibliothek (Language Understanding) für Python ausführen:
- Erstellen einer App
- Hinzufügen einer Absicht
- Hinzufügen von Entitäten
- Hinzufügen von Beispieläußerungen
- Trainieren der App
- Veröffentlichen der App
- Vorhersage nach Slot
Hinzufügen der Abhängigkeiten
Öffnen Sie die Datei index.js
in Ihrem bevorzugten Editor bzw. Ihrer bevorzugten IDE, und fügen Sie dann die folgenden Abhängigkeiten hinzu:
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 Codebausteinen
Fügen Sie die
quickstart
-Methode und Ihren Aufruf hinzu. Diese Methode enthält den Großteil des restlichen Codes. Diese Methode wird am Ende der Datei aufgerufen.const quickstart = async () => { // add calls here } quickstart() .then(result => console.log("Done")) .catch(err => { console.log(`Error: ${err}`) })
Fügen Sie den verbleibenden Code in der quickstart-Methode hinzu, sofern nicht anders angegeben.
Erstellen von Variablen für die App
Erstellen Sie zwei Sätze von Variablen: Sie ändern den ersten Satz, der zweite bleibt, wie er im Codebeispiel angezeigt wird.
Wichtig
Denken Sie daran, den Schlüssel aus Ihrem Code zu entfernen, wenn Sie fertig sind, und ihn niemals zu veröffentlichen. Verwenden Sie für die Produktion eine sichere Art der Speicherung und des Zugriffs auf Ihre Anmeldeinformationen wie Azure Key Vault. Weitere Informationen finden Sie im Artikel zur Azure KI Services-Sicherheit.
Erstellen Sie Variablen für Ihren Erstellungsschlüssel und Ihre Ressourcennamen.
const authoringKey = 'PASTE_YOUR_LUIS_AUTHORING_SUBSCRIPTION_KEY_HERE'; const authoringEndpoint = "PASTE_YOUR_LUIS_AUTHORING_ENDPOINT_HERE"; const predictionEndpoint = "PASTE_YOUR_LUIS_PREDICTION_ENDPOINT_HERE";
Erstellen Sie Variablen für Ihre Endpunkte, den App-Namen, die Version und den Namen der Absicht.
const appName = "Contoso Pizza Company"; const versionId = "0.1"; const intentName = "OrderPizzaIntent";
Authentifizieren des Clients
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.
const luisAuthoringCredentials = new msRest.ApiKeyCredentials({
inHeader: { "Ocp-Apim-Subscription-Key": authoringKey }
});
const client = new LUIS_Authoring.LUISAuthoringClient(
luisAuthoringCredentials,
authoringEndpoint
);
Erstellen einer 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.
Erstellen Sie zum Generieren der App eine Methode vom Typ add für das AppsOperation-Objekt. Name und Sprachkultur sind erforderliche Eigenschaften.
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 App
Das primäre Objekt im Modell einer LUIS-App ist die Absicht. Die Absicht orientiert sich an einer Gruppierung der Absichten von Benutzeräußerungen. Ein Benutzer kann eine Frage stellen oder etwas sagen, um eine bestimmte beabsichtigte Antwort von einem Bot (oder von einer anderen Clientanwendung) zu erhalten. 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.
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.
Der Wert intentName
wird im Abschnitt intentName
als OrderPizzaIntent
hartcodiert und ist Teil der Variablen.
await client.model.addIntent(
appId,
versionId,
{ name: intentName }
);
Erstellen von Entitäten für die App
Entitäten sind zwar nicht erforderlich, aber in den meisten Apps vorhanden. Die Entität extrahiert Informationen aus der Benutzeräußerung, die zur Erfüllung der Absicht des Benutzers erforderlich sind. Es gibt mehrere Arten von vordefinierten und benutzerdefinierten Entitäten, die jeweils über ein eigenes DTO-Modell (Data Transformation Object) verfügen. Zu den gängigen vordefinierten Entitäten, die Sie Ihrer App hinzufügen können, zählen etwa number, datetimeV2, geographyV2 und ordinal.
Wichtig: Entitäten sind nicht mit einer Absicht gekennzeichnet. Sie gelten in der Regel für mehrere Absichten. Nur exemplarische Benutzeräußerungen sind für eine bestimmte, einzelne Absicht gekennzeichnet.
Erstellungsmethoden für Entitäten sind Teil der Klasse Model. Jeder Entitätstyp verfügt über ein eigenes DTO-Modell (Data Transformation Object).
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.
// 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.
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 Absicht
Um die Absicht einer Äußerung ermitteln und Entitäten extrahieren zu können, benötigt die App Beispiele für Äußerungen. Die Beispiele müssen auf eine bestimmte, einzelne Absicht ausgerichtet sein und alle benutzerdefinierten Entitäten markieren. Vordefinierte Entitäten müssen nicht markiert werden.
Fügen Sie Beispieläußerungen hinzu, indem Sie eine Liste mit Objekten vom Typ ExampleLabelObject erstellen (jeweils ein Objekt pro Beispieläußerung). Jedes Beispiel muss alle Entitäten mit einem Wörterbuch mit Name-Wert-Paaren (Entitätsname und Entitätswert) markieren. Der Entitätswert muss exakt dem Vorkommen im Text der Beispieläußerung entsprechen.
Rufen Sie examples.add mit der App-ID, der Versions-ID und dem Beispiel auf.
// 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 App
Nach Erstellung des Modells muss die LUIS-App für diese Version des Modells trainiert werden. Ein trainiertes Modell kann in einem Container verwendet oder in den Staging- oder Produktslots veröffentlicht werden.
Für die Methode train.trainVersion müssen die App-ID und die Versions-ID angegeben werden.
Bei sehr kleinen Modellen (wie etwa in dieser Schnellstartanleitung) dauert das Training nicht sehr lang. 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. Die Antwort ist eine Liste mit Objekten vom Typ ModelTrainingInfo, die jeweils einen separaten Status für die einzelnen Objekte besitzen. Alle Objekte müssen erfolgreich sein, damit das Training als abgeschlossen gilt.
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 Produktionsslot
Veröffentlichen Sie die LUIS-App mithilfe der Methode app.publish. Dadurch wird die aktuelle trainierte Version im angegebenen Slot am Endpunkt veröffentlicht. Ihre Clientanwendung verwendet diesen Endpunkt zum Senden von Benutzeräußerungen für die Absichtsvorhersage und die Entitätsextraktion.
await client.apps.publish(appId, { versionId: versionId, isStaging: false });
Authentifizieren des Vorhersageruntimeclients
Verwenden Sie ein msRest.ApiKeyCredentials
-Objekt mit Ihrem Schlüssel, und verwenden Sie es mit Ihrem Endpunkt, um ein LUIS.LUISRuntimeClient-Objekt zu erstellen.
Achtung
In dieser Schnellstartanleitung wird der Erstellungsschlüssel als Teil der Runtimeanmeldeinformationen verwendet. Der Erstellungsschlüssel kann einige Abfragen an die Runtime senden. Ersetzen Sie für Code auf Staging- und Produktionsebene den Erstellungsschlüssel durch einen Vorhersageruntimeschlüssel.
const luisPredictionClient = new LUIS_Prediction.LUISRuntimeClient(
luisAuthoringCredentials,
predictionEndpoint
);
Abrufen der Vorhersage aus der Laufzeit
Fügen Sie den folgenden Code hinzu, um die Anforderung an die Vorhersageruntime zu erstellen. Die Benutzeräußerung ist Teil des Objekts predictionRequest.
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. Die anderen Optionen, wie z. B. „Ausführlich“, „Alle Absichten anzeigen“ und „Protokollieren“, sind 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.
{
"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 Anwendung
Führen Sie die Anwendung mit dem Befehl node index.js
für die Schnellstartdatei aus.
node index.js
Verwenden Sie die LUIS-Clientbibliotheken (Language Understanding) für Python für Folgendes:
- Erstellen einer App
- Hinzufügen einer Absicht (eine durch maschinelles Lernen erworbene Entität) mit einer Beispieläußerung
- Trainieren und Veröffentlichen der App
- Abfragen der Vorhersagelaufzeit
Referenzdokumentation | Quellcode der Bibliothek für Erstellung und Vorhersage | Paket (pypi) | Beispiele
Voraussetzungen
- Die aktuelle Version von Python 3.x.
- Azure-Abonnement – Erstellen eines kostenlosen Kontos
- 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. Warten Sie ihre Bereitstellung ab, und klicken Sie auf die Schaltfläche Zu Ressource wechseln.
- Sie benötigen den Schlüssel und Endpunkt der von Ihnen erstellten Ressource, um Ihre Anwendung mit der Language Understanding-Erstellung zu verbinden. Der Schlüssel und der Endpunkt werden weiter unten in der Schnellstartanleitung in den Code eingefügt. Sie können den kostenlosen Tarif (
F0
) verwenden, um den Dienst auszuprobieren.
- Sie benötigen den Schlüssel und Endpunkt der von Ihnen erstellten Ressource, um Ihre Anwendung mit der Language Understanding-Erstellung zu verbinden. Der Schlüssel und der Endpunkt werden weiter unten in der Schnellstartanleitung in den Code eingefügt. Sie können den kostenlosen Tarif (
Einrichten
Erstellen einer neuen Python-Anwendung
Erstellen Sie in einem Konsolenfenster ein neues Verzeichnis für Ihre Anwendung, und wechseln Sie in dieses Verzeichnis.
mkdir quickstart-sdk && cd quickstart-sdk
Erstellen Sie eine Datei mit dem Namen
authoring_and_predict.py
für Ihren Python-Code.touch authoring_and_predict.py
Installieren der Clientbibliothek mit Pip
Installieren Sie innerhalb des Anwendungsverzeichnisses die LUIS-Clientbibliothek (Language Understanding) für Python mithilfe des folgenden Befehls:
pip install azure-cognitiveservices-language-luis
Erstellungsobjektmodell
Der LUIS-Erstellungsclient (Language Understanding) ist ein Objekt vom Typ LUISAuthoringClient, das sich bei Azure authentifiziert und Ihren Erstellungsschlüssel enthält.
Codebeispiele für die Erstellung
Nach der Erstellung des Clients können Sie damit unter anderem auf folgende Funktionen zugreifen:
- Apps: Erstellen, Löschen, Veröffentlichen
- Beispieläußerungen: Hinzufügen per Batch, Löschen anhand der ID
- Features: Verwalten von Ausdruckslisten
- Modell: Verwalten von Absichten und Entitäten
- Muster: Verwalten von Mustern
- Trainieren: Trainieren der App und Abfragen des Trainingsstatus
- Versionen: Verwalten mittels Klonen, Exportieren und Löschen
Vorhersageobjektmodell
Der LUIS-Vorhersagelaufzeit-Client (Language Understanding) ist ein Objekt vom Typ LUISRuntimeClient, das sich bei Azure authentifiziert und Ihren Ressourcenschlüssel enthält.
Codebeispiele für die Vorhersagelaufzeit
Nach der Erstellung des Clients können Sie damit unter anderem auf folgende Funktionen zugreifen:
- Vorhersage nach Staging- oder Produktionsslot
- Vorhersage durch Version
Codebeispiele
In den bereitgestellten Codeausschnitten wird veranschaulicht, wie Sie die folgenden Vorgänge mit der LUIS-Clientbibliothek (Language Understanding) für Python ausführen:
- Erstellen einer App
- Hinzufügen einer Absicht
- Hinzufügen von Entitäten
- Hinzufügen von Beispieläußerungen
- Trainieren der App
- Veröffentlichen der App
- Vorhersage nach Slot
Hinzufügen der Abhängigkeiten
Fügen Sie der Python-Datei die Clientbibliotheken hinzu.
from azure.cognitiveservices.language.luis.authoring import LUISAuthoringClient
from azure.cognitiveservices.language.luis.authoring.models import ApplicationCreateObject
from azure.cognitiveservices.language.luis.runtime import LUISRuntimeClient
from msrest.authentication import CognitiveServicesCredentials
from functools import reduce
import json, time, uuid
Hinzufügen von Codebausteinen
Fügen Sie die
quickstart
-Methode und Ihren Aufruf hinzu. Diese Methode enthält den Großteil des restlichen Codes. Diese Methode wird am Ende der Datei aufgerufen.def quickstart(): # add calls here, remember to indent properly quickstart()
Fügen Sie den verbleibenden Code in der quickstart-Methode hinzu, sofern nicht anders angegeben.
Erstellen von Variablen für die App
Erstellen Sie zwei Sätze von Variablen: Sie ändern den ersten Satz, der zweite bleibt, wie er im Codebeispiel angezeigt wird.
Wichtig
Denken Sie daran, den Schlüssel aus Ihrem Code zu entfernen, wenn Sie fertig sind, und ihn niemals zu veröffentlichen. Verwenden Sie für die Produktion eine sichere Art der Speicherung und des Zugriffs auf Ihre Anmeldeinformationen wie Azure Key Vault. Weitere Informationen finden Sie im Artikel zur Azure KI Services-Sicherheit.
Erstellen Sie Variablen für Ihren Erstellungsschlüssel und Ihre Ressourcennamen.
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'
Erstellen Sie Variablen für Ihre Endpunkte, den App-Namen, die Version und den Namen der Absicht.
# We use a UUID to avoid name collisions. appName = "Contoso Pizza Company " + str(uuid.uuid4()) versionId = "0.1" intentName = "OrderPizzaIntent"
Authentifizieren des Clients
Erstellen Sie ein CognitiveServicesCredentials-Objekt mit Ihrem Schlüssel, und verwenden Sie es mit Ihrem Endpunkt, um ein LUISAuthoringClient-Objekt zu erstellen.
client = LUISAuthoringClient(authoringEndpoint, CognitiveServicesCredentials(authoringKey))
Erstellen einer 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.
Erstellen Sie zum Generieren der App eine Methode vom Typ add für das AppsOperation-Objekt. Name und Sprachkultur sind erforderliche Eigenschaften.
# define app basics
appDefinition = ApplicationCreateObject (name=appName, initial_version_id=versionId, culture='en-us')
# create app
app_id = client.apps.add(appDefinition)
# get app id - necessary for all other changes
print("Created LUIS app with ID {}".format(app_id))
Erstellen der Absicht für die App
Das primäre Objekt im Modell einer LUIS-App ist die Absicht. Die Absicht orientiert sich an einer Gruppierung der Absichten von Benutzeräußerungen. Ein Benutzer kann eine Frage stellen oder etwas sagen, um eine bestimmte beabsichtigte Antwort von einem Bot (oder von einer anderen Clientanwendung) zu erhalten. 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.
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.
Der Wert intentName
wird im Abschnitt intentName
als OrderPizzaIntent
hartcodiert und ist Teil der Variablen.
client.model.add_intent(app_id, versionId, intentName)
Erstellen von Entitäten für die App
Entitäten sind zwar nicht erforderlich, aber in den meisten Apps vorhanden. Die Entität extrahiert Informationen aus der Benutzeräußerung, die zur Erfüllung der Absicht des Benutzers erforderlich sind. Es gibt mehrere Arten von vordefinierten und benutzerdefinierten Entitäten, die jeweils über ein eigenes DTO-Modell (Data Transformation Object) verfügen. Zu den gängigen vordefinierten Entitäten, die Sie Ihrer App hinzufügen können, zählen etwa number, datetimeV2, geographyV2 und ordinal.
Wichtig: Entitäten sind nicht mit einer Absicht gekennzeichnet. Sie gelten in der Regel für mehrere Absichten. Nur exemplarische Benutzeräußerungen sind für eine bestimmte, einzelne Absicht gekennzeichnet.
Erstellungsmethoden für Entitäten sind Teil der Klasse ModelOperations. Jeder Entitätstyp verfügt über ein eigenes DTO-Modell (Data Transformation Object).
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.
# 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.
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 Absicht
Um die Absicht einer Äußerung ermitteln und Entitäten extrahieren zu können, benötigt die App Beispiele für Äußerungen. Die Beispiele müssen auf eine bestimmte, einzelne Absicht ausgerichtet sein und alle benutzerdefinierten Entitäten markieren. Vordefinierte Entitäten müssen nicht markiert werden.
Fügen Sie Beispieläußerungen hinzu, indem Sie eine Liste mit Objekten vom Typ ExampleLabelObject erstellen (jeweils ein Objekt pro Beispieläußerung). Jedes Beispiel muss alle Entitäten mit einem Wörterbuch mit Name-Wert-Paaren (Entitätsname und Entitätswert) markieren. Der Entitätswert muss exakt dem Vorkommen im Text der Beispieläußerung entsprechen.
Rufen Sie examples.add mit der App-ID, der Versions-ID und dem Beispiel auf.
# 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 App
Nach Erstellung des Modells muss die LUIS-App für diese Version des Modells trainiert werden. Ein trainiertes Modell kann in einem Container verwendet oder in den Staging- oder Produktslots veröffentlicht werden.
Für die Methode train.train_version müssen die App-ID und die Versions-ID angegeben werden.
Bei sehr kleinen Modellen (wie etwa in dieser Schnellstartanleitung) dauert das Training nicht sehr lang. 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. Die Antwort ist eine Liste mit Objekten vom Typ ModelTrainingInfo, die jeweils einen separaten Status für die einzelnen Objekte besitzen. Alle Objekte müssen erfolgreich sein, damit das Training als abgeschlossen gilt.
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 Produktionsslot
Veröffentlichen Sie die LUIS-App mithilfe der Methode app.publish. Dadurch wird die aktuelle trainierte Version im angegebenen Slot am Endpunkt veröffentlicht. Ihre Clientanwendung verwendet diesen Endpunkt zum Senden von Benutzeräußerungen für die Absichtsvorhersage und die Entitätsextraktion.
# Mark the app as public so we can query it using any prediction endpoint.
# Note: For production scenarios, you should instead assign the app to your own LUIS prediction endpoint. See:
# https://docs.microsoft.com/en-gb/azure/cognitive-services/luis/luis-how-to-azure-subscription#assign-a-resource-to-an-app
client.apps.update_settings(app_id, is_public=True)
responseEndpointInfo = client.apps.publish(app_id, versionId, is_staging=False)
Authentifizieren des Vorhersageruntimeclients
Verwenden Sie das Anmeldeinformationsobjekt mit Ihrem Schlüssel und mit Ihrem Endpunkt, um ein Objekt vom Typ LUISRuntimeClientConfiguration zu erstellen.
Achtung
In dieser Schnellstartanleitung wird der Erstellungsschlüssel als Teil der Runtimeanmeldeinformationen verwendet. Der Erstellungsschlüssel kann einige Abfragen an die Runtime senden. Ersetzen Sie für Code auf Staging- und Produktionsebene den Erstellungsschlüssel durch einen Vorhersageruntimeschlüssel.
runtimeCredentials = CognitiveServicesCredentials(predictionKey)
clientRuntime = LUISRuntimeClient(endpoint=predictionEndpoint, credentials=runtimeCredentials)
Abrufen der Vorhersage aus der Laufzeit
Fügen Sie den folgenden Code hinzu, um die Anforderung an die Vorhersageruntime zu erstellen.
Die Benutzeräußerung ist Teil des Objekts prediction_request.
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. Die anderen Optionen, wie z. B. „Ausführlich“, „Alle Absichten anzeigen“ und „Protokollieren“, sind optional. Von der Anforderung wird ein Objekt vom Typ PredictionResponse zurückgegeben.
# 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.
{
"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 Anwendung
Führen Sie die Anwendung mit dem Befehl python
für die Schnellstartdatei aus.
python authoring_and_predict.py
Wenn Sie dieser Schnellstartanleitung folgen, führen Sie drei REST-Aufrufe nacheinander aus.
- Zuerst laden Sie mit dem Aufruf von REST Batch add labels einen Batch von Beispieläußerungen hoch, die zum Trainieren des Modells der Pizza-App verwendet werden.
- Anschließend beginnen Sie mit einer Trainingssitzung für die Pizza-App, für die Sie den Aufruf REST Train application version verwenden.
- Schließlich rufen Sie mit dem Aufruf REST Get version training status den Status der Trainingssitzung für die Pizza-App ab.
Voraussetzungen
Ein kostenloses LUIS-Konto.
Ein Text-Editor, z. B. Visual Studio Code.
Das Befehlszeilenprogramm cURL. Das cURL-Programm ist unter macOS, in den meisten Linux-Distributionen und in Windows 10, Build 1803 und höher, bereits installiert.
Wenn Sie cURL installieren müssen, können Sie es von der cURL-Downloadseite herunterladen.
Erstellen Sie die Pizza-App
Erstellen Sie die Pizza-App.
- Wählen Sie pizza-app-for-luis-v6.json aus, um die GitHub-Seite für die Datei
pizza-app-for-luis.json
anzuzeigen. - 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. - Melden Sie sich beim LUIS-Portal an.
- Wählen Sie Meine Apps aus.
- Wählen Sie auf der Seite Meine Apps+ Neue App für Unterhaltung aus.
- Wählen Sie Als JSON importieren aus.
- Wählen Sie im Dialogfeld Neue App importieren die Schaltfläche Datei auswählen aus.
- Wählen Sie die heruntergeladene Datei
pizza-app-for-luis.json
und dannpizza-app-for-luis.json
aus. - 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.
Die App wird importiert.
Wenn ein Dialogfeld Erstellen einer effektiven LUIS-App angezeigt wird, schließen Sie das Dialogfeld.
Trainieren und Veröffentlichen der Pizza-App
Die Seite Absichten sollte mit einer Liste aller Absichten in der Pizza-App angezeigt werden.
Wählen Sie rechts oben auf der LUIS-Website die Schaltfläche Train (Trainieren) aus.
Das Training ist abgeschlossen, wenn die Schaltfläche Trainieren deaktiviert ist.
Damit Sie eine LUIS-Vorhersage in einem Chatbot oder anderen Clientanwendungen empfangen können, muss die App im Vorhersageendpunkt veröffentlicht werden.
Wählen Sie im Navigationsbereich rechts oben die Option Veröffentlichen aus.
Wählen Sie den Slot Produktion und anschließend Fertig aus.
Wählen Sie in der Benachrichtigung die Option Access your endpoint URLs (Auf Endpunkt-URLs zugreifen) aus, um zur Seite Azure-Ressourcen zu navigieren. Die URLs werden nur angezeigt, wenn der App eine Vorhersageressource zugeordnet ist. Sie können auch auf die Seite Azure-Ressourcen zugreifen, indem Sie auf Verwalten klicken.
Hinzufügen einer Erstellungsressource zur Pizza-App
- Wählen Sie VERWALTEN aus.
- Wählen Sie Azure-Ressourcen aus.
- Wählen Sie Erstellungsressource aus.
- Wählen Sie Change authoring resource (Erstellungsressource ändern) aus.
Wenn Sie über eine Erstellungsressource verfügen, geben Sie die Werte für Mandantenname, Abonnementname und Name der LUIS-Ressource Ihrer Erstellungsressource ein.
Wenn Sie keine Erstellungsressource besitzen:
- Wählen Sie die Option Neue Ressource erstellen aus.
- Geben Sie Werte für Mandantenname, Ressourcenname, Abonnementname und Name der Azure-Ressourcengruppe ein.
Ihre Pizza-App ist jetzt einsatzbereit.
Aufzeichnen der Zugriffswerte für Ihre Pizza-App
Um Ihre neue Pizza-App zu verwenden, benötigen Sie die App-ID, den Erstellungsschlüssel und den Erstellungsendpunkt Ihrer Pizza-App. Sie benötigen einen separaten Vorhersageendpunkt und Vorhersageschlüssel, um Vorhersagen zu treffen.
So finden Sie diese Werte:
- Wählen Sie auf der Seite AbsichtenVERWALTEN aus.
- Notieren Sie auf der Seite Anwendungseinstellungen die App-ID.
- Wählen Sie Azure-Ressourcen aus.
- Wählen Sie Erstellungsressource aus.
- Notieren Sie den Primärschlüssel, der auf den Registerkarten Erstellungsressource und Vorhersageressourcen vermerkt ist. Dieser Wert ist der Erstellungsschlüssel.
- Notieren Sie die Endpunkt-URL. Dieser Wert ist der Erstellungsendpunkt.
Erstellen einer JSON-Datei zum Trainieren der 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
:
[
{
"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.
Das Feld text
enthält den Text der Beispieläußerung. Das Feld intentName
muss dem Namen einer vorhandenen Absicht in der LUIS-App entsprechen. entityLabels
ist ein Pflichtfeld. Wenn Sie keine Bezeichnungen für Entitäten angeben möchten, geben Sie ein leeres Array an.
Ist das entityLabels-Array nicht leer, müssen startCharIndex
und endCharIndex
die Entität markieren, auf die im Feld entityName
verwiesen wird. Der Index ist nullbasiert. Wenn der Text der Bezeichnung mit einem Leerzeichen beginnt oder endet, schlagen die API-Aufrufe zum Hinzufügen der Äußerungen fehl.
Hinzufügen von Beispieläußerungen
Kopieren Sie diesen Befehl in Ihren Text-Editor, um den Batch mit Beispieläußerungen hochzuladen:
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"
Ersetzen Sie die Werte, die mit
***YOUR-
beginnen, durch Ihre eigenen Werte.Information Zweck ***YOUR-AUTHORING-ENDPOINT***
Ihr URL-Endpunkt für die Erstellung. Beispiel: "https://REPLACE-WITH-YOUR-RESOURCE-NAME.api.cognitive.microsoft.com/". Sie haben Ihren Ressourcennamen festgelegt, als Sie die Ressource erstellt haben. ***YOUR-APP-ID***
Ihre LUIS-App-ID. ***YOUR-APP-VERSION***
Ihre LUIS-App-Version. Die Versionsnummer der Pizza-App lautet „0.1“ (ohne Anführungszeichen). ***YOUR-AUTHORING-KEY***
Ihr Erstellungsschlüssel mit 32 Zeichen. Zugewiesene Schlüssel und Ressourcen werden im LUIS-Portal auf der Seite Azure-Ressourcen im Abschnitt „Verwalten“ angezeigt. Die App-ID wird auf der Seite Anwendungseinstellungen ebenfalls im Abschnitt „Verwalten“ angezeigt.
Wichtig
Denken Sie daran, den Schlüssel aus Ihrem Code zu entfernen, wenn Sie fertig sind, und ihn niemals zu veröffentlichen. Verwenden Sie für die Produktion eine sichere Art der Speicherung und des Zugriffs auf Ihre Anmeldeinformationen wie Azure Key Vault. Weitere Informationen finden Sie im Artikel zur Azure KI Services-Sicherheit.
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.Kopieren Sie den cURL-Befehl aus dem Editor, und fügen Sie ihn an der Eingabeaufforderung (Windows) oder im Terminal (macOS und Linux) ein. Drücken Sie die EINGABETASTE, um den Befehl auszuführen.
Daraufhin sollte die folgende Antwort angezeigt werden:
[{"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:
[ { "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-Modells
Um eine Trainingssitzung für die Pizza-App zu beginnen, kopieren Sie diesen Befehl in Ihren 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***"
Ersetzen Sie wie schon zuvor die Werte, die mit
***YOUR-
beginnen, durch Ihre eigenen Werte.Kopieren Sie den cURL-Befehl aus dem Editor, und fügen Sie ihn an der Eingabeaufforderung (Windows) oder im Terminal (macOS und Linux) ein. Drücken Sie die EINGABETASTE, um den Befehl auszuführen.
Daraufhin sollte die folgende Antwort angezeigt werden:
{"statusId":2,"status":"UpToDate"}
Hier sehen Sie die zur besseren Lesbarkeit formatierte Ausgabe:
{ "statusId": 2, "status": "UpToDate" }
Abrufen des Trainingsstatus
Um den Trainingsstatus der Trainingssitzung abzurufen, kopieren Sie diesen Befehl in Ihren 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***"
Ersetzen Sie wie schon zuvor die Werte, die mit
***YOUR-
beginnen, durch Ihre eigenen Werte.Kopieren Sie den cURL-Befehl aus dem Editor, und fügen Sie ihn an der Eingabeaufforderung (Windows) oder im Terminal (macOS und Linux) ein. Drücken Sie die EINGABETASTE, um den Befehl auszuführen.
Daraufhin sollte die folgende Antwort angezeigt werden:
[{"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:
[ { "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 Vorhersageendpunkt
Verwenden Sie cURL, um den Vorhersageendpunkt abzurufen und ein Vorhersageergebnis zu erhalten.
Hinweis
Dieser Befehl verwendet Ihren Vorhersageendpunkt.
Kopieren Sie diesen Befehl in Ihren 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"
Ersetzen Sie die Werte, die mit
***YOUR-
beginnen, durch Ihre eigenen Werte.Information Zweck ***YOUR-PREDICTION-ENDPOINT***
Ihr URL-Endpunkt für die Vorhersage. Die Seite mit den Azure-Ressourcen für Ihre App im LUIS-Portal.
Beispiel:https://westus.api.cognitive.microsoft.com/
.***YOUR-APP-ID***
Ihre App-ID. Die Seite mit den Anwendungseinstellungen für Ihre App im LUIS-Portal. ***YOUR-PREDICTION-KEY***
Ihr 32-stelliger Vorhersageschlüssel. Die Seite mit den Azure-Ressourcen für Ihre App im LUIS-Portal. Kopieren Sie den Text in ein Konsolenfenster, und drücken Sie die EINGABETASTE, um den Befehl auszuführen:
Überprüfen Sie die Vorhersageantwort, die im JSON-Format zurückgegeben wird:
{"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:
{ "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 Ressourcen
Sie können die App über das LUIS-Portal und die Azure-Ressourcen über das Azure-Portal löschen.
Löschen Sie nach Abschluss des Schnellstarts die Datei ExampleUtterances.JSON
von Ihrem Dateisystem, wenn Sie die REST-API verwenden.
Problembehandlung
- Authentifizieren bei der Clientbibliothek: Authentifizierungsfehler weisen in der Regel darauf hin, dass der falsche Schlüssel und Endpunkt verwendet wurden. 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. 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.
- 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.
- 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.
- 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.
- Sonstige Fehler: Da der Code die Clientbibliotheken mit Text- und JSON-Objekten aufruft, vergewissern Sie sich, dass der Code nicht geändert wurde.
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. Geben Sie die Programmiersprache und die Version der Clientbibliotheken an, die Sie installiert haben.