Guide pratique pour mettre à jour le modèle LUIS avec des API REST
Important
LUIS sera mis hors service le 1er octobre 2025 et à partir du 1er avril 2023, vous ne pourrez plus créer de nouvelles ressources LUIS. Nous vous recommandons de migrer vos applications LUIS vers la compréhension du langage courant pour tirer parti de la prise en charge continue des produits et des fonctionnalités multilingues.
Dans cet article, vous allez ajouter des exemples d’énoncés à une application de pizza pour entraîner l’application. Les exemples d’énoncés sont du texte utilisateur conversationnel mappé à une intention. En fournissant des exemples d’énoncés pour les intentions, vous apprenez à l’application LUIS quels types de texte fourni par l’utilisateur appartiennent à quelle intention.
Documentation de référence | Exemple
Prérequis
Exemples d’énoncés de fichier JSON
Les exemples d’énoncés suivent un format spécifique.
Le champ text
contient le texte de l’exemple d’énoncé. Le champ intentName
doit correspondre au nom d’une intention existante dans l’application LUIS. Le champ entityLabels
est obligatoire. Si vous ne souhaitez étiqueter aucune entité, fournissez un tableau vide.
Si le tableau entityLabels n’est pas vide, les éléments startCharIndex
et endCharIndex
doivent marquer l’entité concernée dans le champ entityName
. L’index est basé sur zéro. Si vous commencez ou terminez l’étiquette au niveau d’un espace dans le texte, l’appel d’API pour ajouter les énoncés échoue.
[
{
"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
}
]
}
]
Créer une application de pizza
Créez l’application de pizza.
- Sélectionnez pizza-app-for-luis-v6.json pour afficher la page GitHub du fichier
pizza-app-for-luis.json
. - Cliquez avec le bouton droit ou appuyez longuement sur le bouton Raw et sélectionnez Enregistrer la cible sous pour enregistrer le fichier
pizza-app-for-luis.json
sur votre ordinateur. - Connectez-vous au portail LUIS.
- Sélectionnez My Apps (Mes applications).
- Dans la page My Apps, sélectionnez + New app for conversation (Nouvelle application pour la conversation).
- Sélectionnez Import as JSON (Importer en tant que JSON).
- Dans la boîte de dialogue Import new app (Importer une nouvelle application), sélectionnez le bouton Choose File (Choisir un fichier).
- Sélectionnez le fichier
pizza-app-for-luis.json
que vous avez téléchargé, puis sélectionnezpizza-app-for-luis.json
(Ouvrir). - Dans le champ Name (Nom) de la boîte de dialogue Import new app, entrez un nom pour votre application de pizza, puis sélectionnez le bouton Done (terminé).
L’application est importée.
Si apparaît une boîte de dialogue How to create an effective LUIS app (Comment créer une application LUIS efficace), fermez-la.
Entraîner et publier l’application de pizza
Vous devez voir la page Intents (Intentions) avec une liste des intentions de l’application de pizza.
En haut à droite du site web LUIS, sélectionnez le bouton Effectuer l’apprentissage.
L’entraînement est terminé quand le bouton Entraîner est désactivé.
Pour recevoir une prédiction LUIS dans un chatbot ou une autre application cliente, vous avez besoin de publier l’application sur le point de terminaison de prédiction.
Dans le volet de navigation supérieur droit, sélectionnez Publier.
Sélectionnez l’emplacement Production, puis sélectionnez Terminé.
Sélectionnez Accéder à vos URL de point de terminaison dans la notification pour accéder à la page Ressources Azure. Vous ne pouvez voir les URL que si vous disposez d’une ressource de prédiction associée à l’application. Vous pouvez également rechercher la page Ressources Azure en cliquant sur Gérer.
Ajouter une ressource de création à l’application Pizza
- Sélectionnez MANAGE (Gérer).
- Sélectionnez Azure Resources (Ressources Azure).
- Sélectionnez Authoring Resource (Ressource de création).
- Sélectionnez Change authoring resource (Changer la ressource de création).
Si vous disposez d’une ressource de création, entrez le nom du locataire, le nom de l’abonnement, puis le nom de la ressource LUIS de votre ressource de création.
Si vous n’avez pas de ressource de création :
- Sélectionnez Create new resource (Créer une ressource).
- Entrez un nom de locataire, un nom de ressource, un nom d’abonnement et un nom de groupe de ressources Azure.
Votre application de pizza est maintenant prête à être utilisée.
Enregistrer les valeurs d’accès pour votre application Pizza
Pour utiliser votre nouvelle application de pizza, vous aurez besoin de son ID d’application, de sa clé de création et de son point de terminaison de création. Pour obtenir des prédictions, vous aurez besoin de votre propre point de terminaison de prédiction et de votre propre clé de prédiction.
Pour rechercher ces valeurs :
- Dans la page Intents (Intentions), sélectionnez MANAGE (GÉRER).
- Dans la page Application Settings (Paramètres de l’application), enregistrez l’ID d’application.
- Sélectionnez Azure Resources (Ressources Azure).
- Sélectionnez Authoring Resource (Ressource de création).
- Sous les onglets Ressource de création et Ressources de prédiction, enregistrez la Clé primaire. Cette valeur est votre clé de création.
- Enregistrez l’URL du point de terminaison. Cette valeur est votre point de terminaison de création.
Changer le modèle programmatiquement
Créez une application console ciblant le langage C#, avec un projet et le nom de dossier
csharp-model-with-rest
.dotnet new console -lang C# -n csharp-model-with-rest
Accédez au répertoire
csharp-model-with-rest
que vous avez créé et installez les dépendances nécessaires avec les commandes suivantes :cd csharp-model-with-rest dotnet add package System.Net.Http dotnet add package JsonFormatterPlus
Remplacez le contenu de Program.cs par le code suivant :
// // This quickstart shows how to add utterances to a LUIS model using the REST APIs. // using System; using System.IO; using System.Net.Http; using System.Text; using System.Threading.Tasks; using System.Collections.Generic; using System.Linq; // 3rd party NuGet packages using JsonFormatterPlus; namespace AddUtterances { class Program { ////////// // Values to modify. // YOUR-APP-ID: The App ID GUID found on the www.luis.ai Application Settings page. static string appID = "PASTE_YOUR_LUIS_APP_ID_HERE"; // YOUR-AUTHORING-KEY: Your LUIS authoring key, 32 character value. static string authoringKey = "PASTE_YOUR_LUIS_AUTHORING_SUBSCRIPTION_KEY_HERE"; // YOUR-AUTHORING-ENDPOINT: Replace this endpoint with your authoring key endpoint. // For example, "https://your-resource-name.cognitiveservices.azure.com/" static string authoringEndpoint = "PASTE_YOUR_LUIS_AUTHORING_ENDPOINT_HERE"; // NOTE: Replace this your version number. static string appVersion = "0.1"; ////////// static string host = String.Format("{0}luis/authoring/v3.0-preview/apps/{1}/versions/{2}/", authoringEndpoint, appID, appVersion); // GET request with authentication async static Task<HttpResponseMessage> SendGet(string uri) { using (var client = new HttpClient()) using (var request = new HttpRequestMessage()) { request.Method = HttpMethod.Get; request.RequestUri = new Uri(uri); request.Headers.Add("Ocp-Apim-Subscription-Key", authoringKey); return await client.SendAsync(request); } } // POST request with authentication async static Task<HttpResponseMessage> SendPost(string uri, string requestBody) { using (var client = new HttpClient()) using (var request = new HttpRequestMessage()) { request.Method = HttpMethod.Post; request.RequestUri = new Uri(uri); if (!String.IsNullOrEmpty(requestBody)) { request.Content = new StringContent(requestBody, Encoding.UTF8, "text/json"); } request.Headers.Add("Ocp-Apim-Subscription-Key", authoringKey); return await client.SendAsync(request); } } // Add utterances as string with POST request async static Task AddUtterances(string utterances) { string uri = host + "examples"; var response = await SendPost(uri, utterances); var result = await response.Content.ReadAsStringAsync(); Console.WriteLine("Added utterances."); Console.WriteLine(JsonFormatter.Format(result)); } // Train app after adding utterances async static Task Train() { string uri = host + "train"; var response = await SendPost(uri, null); var result = await response.Content.ReadAsStringAsync(); Console.WriteLine("Sent training request."); Console.WriteLine(JsonFormatter.Format(result)); } // Check status of training async static Task Status() { var response = await SendGet(host + "train"); var result = await response.Content.ReadAsStringAsync(); Console.WriteLine("Requested training status."); Console.WriteLine(JsonFormatter.Format(result)); } // Add utterances, train, check status static void Main(string[] args) { string utterances = @" [ { '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 } ] } ] "; AddUtterances(utterances).Wait(); Train().Wait(); Status().Wait(); } } }
Remplacez les valeurs commençant par
YOUR-
par vos propres valeurs.Information Objectif YOUR-APP-ID
Votre ID d’application LUIS. YOUR-AUTHORING-KEY
Votre clé de création (32 caractères). YOUR-AUTHORING-ENDPOINT
L’URL de votre point de terminaison de création. Par exemple : https://replace-with-your-resource-name.api.cognitive.microsoft.com/
. Vous avez défini le nom de votre ressource au moment de sa création.Les ressources et les clés affectées sont visibles dans le portail LUIS, dans la section Gérer de la page Ressources Azure. L’ID d’application est indiqué dans la section Gérer de la page Paramètres de l’application.
Important
N’oubliez pas de supprimer la clé de votre code une fois que vous avez terminé, et ne la postez jamais publiquement. Pour la production, utilisez un moyen sécurisé de stocker et d’accéder à vos informations d’identification comme Azure Key Vault. Pour plus d’informations, consultez l’article sur la sécurité d’Azure AI services.
Générez l'application console.
dotnet build
Exécutez l’application console.
dotnet run
Passez en revue la réponse de création :
Added utterances. [ { "value": { "ExampleId": 1137150691, "UtteranceText": "order a pizza" }, "hasError": false }, { "value": { "ExampleId": 1137150692, "UtteranceText": "order a large pepperoni pizza" }, "hasError": false }, { "value": { "ExampleId": 1137150693, "UtteranceText": "i want two large pepperoni pizzas on thin crust" }, "hasError": false } ] Sent training request. { "statusId": 9, "status": "Queued" } Requested training status. [ { "modelId": "edb46abf-0000-41ab-beb2-a41a0fe1630f", "details": { "statusId": 9, "status": "Queued", "exampleCount": 0 } }, { "modelId": "a5030be2-616c-4648-bf2f-380fa9417d37", "details": { "statusId": 9, "status": "Queued", "exampleCount": 0 } }, { "modelId": "3f2b1f31-a3c3-4fbd-8182-e9d9dbc120b9", "details": { "statusId": 9, "status": "Queued", "exampleCount": 0 } }, { "modelId": "e4b6704b-1636-474c-9459-fe9ccbeba51c", "details": { "statusId": 9, "status": "Queued", "exampleCount": 0 } }, { "modelId": "031d3777-2a00-4a7a-9323-9a3280a30000", "details": { "statusId": 9, "status": "Queued", "exampleCount": 0 } }, { "modelId": "9250e7a1-06eb-4413-9432-ae132ed32583", "details": { "statusId": 9, "status": "Queued", "exampleCount": 0 } } ]
Nettoyer les ressources
Quand vous aurez fini de suivre ce guide de démarrage rapide, supprimez le dossier de projet du système de fichiers.
Étapes suivantes
Documentation de référence | Exemple
Prérequis
- JDK SE (Kit de développement Java, Édition Standard)
- Visual Studio Code ou l’IDE de votre choix.
Exemples d’énoncés de fichier JSON
Les exemples d’énoncés suivent un format spécifique.
Le champ text
contient le texte de l’exemple d’énoncé. Le champ intentName
doit correspondre au nom d’une intention existante dans l’application LUIS. Le champ entityLabels
est obligatoire. Si vous ne souhaitez étiqueter aucune entité, fournissez un tableau vide.
Si le tableau entityLabels n’est pas vide, les éléments startCharIndex
et endCharIndex
doivent marquer l’entité concernée dans le champ entityName
. L’index est basé sur zéro. Si vous commencez ou terminez l’étiquette au niveau d’un espace dans le texte, l’appel d’API pour ajouter les énoncés échoue.
[
{
"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
}
]
}
]
Changer le modèle programmatiquement
Créez un dossier pour stocker votre projet Java, par exemple
java-model-with-rest
.Créez un sous-répertoire nommé
lib
et copiez-le dans les bibliothèques Java suivantes dans le sous-répertoirelib
:Créez un nouveau fichier appelé
Model.java
. Ajoutez le code suivant :// // This quickstart shows how to add utterances to a LUIS model using the REST APIs. // import java.io.*; import java.net.URI; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.utils.URIBuilder; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; // To compile, execute this command at the console: // Windows: javac -cp ";lib/*" Model.java // macOs: javac -cp ":lib/*" Model.java // Linux: javac -cp ":lib/*" Model.java // To run, execute this command at the console: // Windows: java -cp ";lib/*" Model // macOs: java -cp ":lib/*" Model // Linux: java -cp ":lib/*" Model public class Model { public static void main(String[] args) { try { ////////// // Values to modify. // YOUR-APP-ID: The App ID GUID found on the www.luis.ai Application Settings page. String AppId = "PASTE_YOUR_LUIS_APP_ID_HERE"; // YOUR-AUTHORING-KEY: Your LUIS authoring key, 32 character value. String Key = "PASTE_YOUR_LUIS_AUTHORING_SUBSCRIPTION_KEY_HERE"; // YOUR-AUTHORING-ENDPOINT: Replace this with your authoring key endpoint. // For example, "https://your-resource-name.cognitiveservices.azure.com/" String Endpoint = "PASTE_YOUR_LUIS_AUTHORING_ENDPOINT_HERE"; // NOTE: Replace this your version number. The Pizza app uses a version number of "0.1". String Version = "0.1"; ////////// // The list of utterances to add, in JSON format. String Utterances = "[{'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}]}]"; // Create the URLs for uploading example utterances and for training. URIBuilder addUtteranceURL = new URIBuilder(Endpoint + "luis/authoring/v3.0-preview/apps/" + AppId + "/versions/" + Version + "/examples"); URIBuilder trainURL = new URIBuilder(Endpoint + "luis/authoring/v3.0-preview/apps/" + AppId + "/versions/" + Version + "/train"); URI addUtterancesURI = addUtteranceURL.build(); URI trainURI = trainURL.build(); // Add the utterances. // Create the request. HttpClient addUtterancesClient = HttpClients.createDefault(); HttpPost addUtterancesRequest = new HttpPost(addUtterancesURI); // Add the headers. addUtterancesRequest.setHeader("Ocp-Apim-Subscription-Key",Key); addUtterancesRequest.setHeader("Content-type","application/json"); // Add the body. StringEntity stringEntity = new StringEntity(Utterances); addUtterancesRequest.setEntity(stringEntity); // Execute the request and obtain the response. HttpResponse addUtterancesResponse = addUtterancesClient.execute(addUtterancesRequest); HttpEntity addUtterancesEntity = addUtterancesResponse.getEntity(); // Print the response on the console. if (addUtterancesEntity != null) { System.out.println(EntityUtils.toString(addUtterancesEntity)); } // Train the model. // Create the request. HttpClient trainClient = HttpClients.createDefault(); HttpPost trainRequest = new HttpPost(trainURI); // Add the headers. trainRequest.setHeader("Ocp-Apim-Subscription-Key",Key); trainRequest.setHeader("Content-type","application/json"); // Execute the request and obtain the response. HttpResponse trainResponse = trainClient.execute(trainRequest); HttpEntity trainEntity = trainResponse.getEntity(); // Print the response on the console. if (trainEntity != null) { System.out.println(EntityUtils.toString(trainEntity)); } // Get the training status. // Create the request. HttpClient trainStatusClient = HttpClients.createDefault(); HttpGet trainStatusRequest = new HttpGet(trainURI); // Add the headers. trainStatusRequest.setHeader("Ocp-Apim-Subscription-Key",Key); trainStatusRequest.setHeader("Content-type","application/json"); // Execute the request and obtain the response. HttpResponse trainStatusResponse = trainStatusClient.execute(trainStatusRequest); HttpEntity trainStatusEntity = trainStatusResponse.getEntity(); // Print the response on the console. if (trainStatusEntity != null) { System.out.println(EntityUtils.toString(trainStatusEntity)); } } // Display errors if they occur. catch (Exception e) { System.out.println(e.getMessage()); } } }
Remplacez les valeurs commençant par
YOUR-
par vos propres valeurs.Information Objectif YOUR-APP-ID
Votre ID d’application LUIS. YOUR-AUTHORING-KEY
Votre clé de création (32 caractères). YOUR-AUTHORING-ENDPOINT
L’URL de votre point de terminaison de création. Par exemple : https://replace-with-your-resource-name.api.cognitive.microsoft.com/
. Vous avez défini le nom de votre ressource au moment de sa création.Les ressources et les clés affectées sont visibles dans le portail LUIS, dans la section Gérer de la page Ressources Azure. L’ID d’application est indiqué dans la section Gérer de la page Paramètres de l’application.
Important
N’oubliez pas de supprimer la clé de votre code une fois que vous avez terminé, et ne la postez jamais publiquement. Pour la production, utilisez un moyen sécurisé de stocker et d’accéder à vos informations d’identification comme Azure Key Vault. Pour plus d’informations, consultez l’article sur la sécurité d’Azure AI services.
Avec une invite de commandes située dans le même répertoire que celui où vous avez créé le fichier
Model.java
, entrez la commande suivante pour compiler le fichier Java :- Si vous utilisez Windows, servez-vous de la commande suivante :
javac -cp ";lib/*" Model.java
- Si vous utilisez macOS ou Linux, servez-vous de la commande suivante :
javac -cp ":lib/*" Model.java
- Si vous utilisez Windows, servez-vous de la commande suivante :
Exécutez l’application Java à partir de la ligne de commande en entrant le texte suivant dans l’invite de commandes :
- Si vous utilisez Windows, servez-vous de la commande suivante :
java -cp ";lib/*" Model
- Si vous utilisez macOS ou Linux, servez-vous de la commande suivante :
java -cp ":lib/*" Model
- Si vous utilisez Windows, servez-vous de la commande suivante :
Passez en revue la réponse de création :
[{"value":{"ExampleId":1137150691,"UtteranceText":"order a pizza"},"hasError":false},{"value":{"ExampleId":1137150692,"UtteranceText":"order a large pepperoni pizza"},"hasError":false},{"value":{"ExampleId":1137150693,"UtteranceText":"i want two large pepperoni pizzas on thin crust"},"hasError":false}] {"statusId":9,"status":"Queued"} [{"modelId":"edb46abf-0000-41ab-beb2-a41a0fe1630f","details":{"statusId":9,"status":"Queued","exampleCount":0}},{"modelId":"a5030be2-616c-4648-bf2f-380fa9417d37","details":{"statusId":9,"status":"Queued","exampleCount":0}},{"modelId":"3f2b1f31-a3c3-4fbd-8182-e9d9dbc120b9","details":{"statusId":9,"status":"Queued","exampleCount":0}},{"modelId":"e4b6704b-1636-474c-9459-fe9ccbeba51c","details":{"statusId":9,"status":"Queued","exampleCount":0}},{"modelId":"031d3777-2a00-4a7a-9323-9a3280a30000","details":{"statusId":9,"status":"Queued","exampleCount":0}},{"modelId":"9250e7a1-06eb-4413-9432-ae132ed32583","details":{"statusId":3,"status":"InProgress","exampleCount":0,"progressSubstatus":"CollectingData"}}]
Voici la sortie mise en forme pour être lisible :
[ { "value": { "ExampleId": 1137150691, "UtteranceText": "order a pizza" }, "hasError": false }, { "value": { "ExampleId": 1137150692, "UtteranceText": "order a large pepperoni pizza" }, "hasError": false }, { "value": { "ExampleId": 1137150693, "UtteranceText": "i want two large pepperoni pizzas on thin crust" }, "hasError": false } ] { "statusId": 9, "status": "Queued" } [ { "modelId": "edb46abf-0000-41ab-beb2-a41a0fe1630f", "details": { "statusId": 9, "status": "Queued", "exampleCount": 0 } }, { "modelId": "a5030be2-616c-4648-bf2f-380fa9417d37", "details": { "statusId": 9, "status": "Queued", "exampleCount": 0 } }, { "modelId": "3f2b1f31-a3c3-4fbd-8182-e9d9dbc120b9", "details": { "statusId": 9, "status": "Queued", "exampleCount": 0 } }, { "modelId": "e4b6704b-1636-474c-9459-fe9ccbeba51c", "details": { "statusId": 9, "status": "Queued", "exampleCount": 0 } }, { "modelId": "031d3777-2a00-4a7a-9323-9a3280a30000", "details": { "statusId": 9, "status": "Queued", "exampleCount": 0 } }, { "modelId": "9250e7a1-06eb-4413-9432-ae132ed32583", "details": { "statusId": 3, "status": "InProgress", "exampleCount": 0, "progressSubstatus": "CollectingData" } } ]
Nettoyer les ressources
Quand vous aurez fini de suivre ce guide de démarrage rapide, supprimez le dossier de projet du système de fichiers.
Étapes suivantes
Documentation de référence | Exemple
Prérequis
- Langage de programmation GO
- Visual Studio Code
Exemples d’énoncés de fichier JSON
Les exemples d’énoncés suivent un format spécifique.
Le champ text
contient le texte de l’exemple d’énoncé. Le champ intentName
doit correspondre au nom d’une intention existante dans l’application LUIS. Le champ entityLabels
est obligatoire. Si vous ne souhaitez étiqueter aucune entité, fournissez un tableau vide.
Si le tableau entityLabels n’est pas vide, les éléments startCharIndex
et endCharIndex
doivent marquer l’entité concernée dans le champ entityName
. L’index est basé sur zéro. Si vous commencez ou terminez l’étiquette au niveau d’un espace dans le texte, l’appel d’API pour ajouter les énoncés échoue.
[
{
"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
}
]
}
]
Créer une application de pizza
Créez l’application de pizza.
- Sélectionnez pizza-app-for-luis-v6.json pour afficher la page GitHub du fichier
pizza-app-for-luis.json
. - Cliquez avec le bouton droit ou appuyez longuement sur le bouton Raw et sélectionnez Enregistrer la cible sous pour enregistrer le fichier
pizza-app-for-luis.json
sur votre ordinateur. - Connectez-vous au portail LUIS.
- Sélectionnez My Apps (Mes applications).
- Dans la page My Apps, sélectionnez + New app for conversation (Nouvelle application pour la conversation).
- Sélectionnez Import as JSON (Importer en tant que JSON).
- Dans la boîte de dialogue Import new app (Importer une nouvelle application), sélectionnez le bouton Choose File (Choisir un fichier).
- Sélectionnez le fichier
pizza-app-for-luis.json
que vous avez téléchargé, puis sélectionnezpizza-app-for-luis.json
(Ouvrir). - Dans le champ Name (Nom) de la boîte de dialogue Import new app, entrez un nom pour votre application de pizza, puis sélectionnez le bouton Done (terminé).
L’application est importée.
Si apparaît une boîte de dialogue How to create an effective LUIS app (Comment créer une application LUIS efficace), fermez-la.
Entraîner et publier l’application de pizza
Vous devez voir la page Intents (Intentions) avec une liste des intentions de l’application de pizza.
En haut à droite du site web LUIS, sélectionnez le bouton Effectuer l’apprentissage.
L’entraînement est terminé quand le bouton Entraîner est désactivé.
Pour recevoir une prédiction LUIS dans un chatbot ou une autre application cliente, vous avez besoin de publier l’application sur le point de terminaison de prédiction.
Dans le volet de navigation supérieur droit, sélectionnez Publier.
Sélectionnez l’emplacement Production, puis sélectionnez Terminé.
Sélectionnez Accéder à vos URL de point de terminaison dans la notification pour accéder à la page Ressources Azure. Vous ne pouvez voir les URL que si vous disposez d’une ressource de prédiction associée à l’application. Vous pouvez également rechercher la page Ressources Azure en cliquant sur Gérer.
Ajouter une ressource de création à l’application Pizza
- Sélectionnez MANAGE (Gérer).
- Sélectionnez Azure Resources (Ressources Azure).
- Sélectionnez Authoring Resource (Ressource de création).
- Sélectionnez Change authoring resource (Changer la ressource de création).
Si vous disposez d’une ressource de création, entrez le nom du locataire, le nom de l’abonnement, puis le nom de la ressource LUIS de votre ressource de création.
Si vous n’avez pas de ressource de création :
- Sélectionnez Create new resource (Créer une ressource).
- Entrez un nom de locataire, un nom de ressource, un nom d’abonnement et un nom de groupe de ressources Azure.
Votre application de pizza est maintenant prête à être utilisée.
Enregistrer les valeurs d’accès pour votre application Pizza
Pour utiliser votre nouvelle application de pizza, vous aurez besoin de son ID d’application, de sa clé de création et de son point de terminaison de création. Pour obtenir des prédictions, vous aurez besoin de votre propre point de terminaison de prédiction et de votre propre clé de prédiction.
Pour rechercher ces valeurs :
- Dans la page Intents (Intentions), sélectionnez MANAGE (GÉRER).
- Dans la page Application Settings (Paramètres de l’application), enregistrez l’ID d’application.
- Sélectionnez Azure Resources (Ressources Azure).
- Sélectionnez Authoring Resource (Ressource de création).
- Sous les onglets Ressource de création et Ressources de prédiction, enregistrez la Clé primaire. Cette valeur est votre clé de création.
- Enregistrez l’URL du point de terminaison. Cette valeur est votre point de terminaison de création.
Changer le modèle programmatiquement
Créez un nouveau fichier appelé
predict.go
. Ajoutez le code suivant :// // This quickstart shows how to add utterances to a LUIS model using the REST APIs. // // dependencies package main import ( "fmt" "net/http" "io/ioutil" "log" "strings" ) // main function func main() { ////////// // Values to modify. // YOUR-APP-ID: The App ID GUID found on the www.luis.ai Application Settings page. var appID = "PASTE_YOUR_LUIS_APP_ID_HERE" // YOUR-AUTHORING-KEY: Your LUIS authoring key, 32 character value. var authoringKey = "PASTE_YOUR_LUIS_AUTHORING_SUBSCRIPTION_KEY_HERE" // YOUR-AUTHORING-ENDPOINT: Replace this with your authoring key endpoint. // For example, "https://your-resource-name.cognitiveservices.azure.com/" var endpoint = "PASTE_YOUR_LUIS_AUTHORING_ENDPOINT_HERE" // NOTE: Replace this your version number. The Pizza app uses a version number of "0.1". var version = "0.1" ////////// var exampleUtterances = "[{'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}]}]" fmt.Println("add example utterances requested") addUtterance(authoringKey, appID, version, exampleUtterances, endpoint) fmt.Println("training selected") requestTraining(authoringKey, appID, version, endpoint) fmt.Println("training status selected") getTrainingStatus(authoringKey, appID, version, endpoint) } // Send the list of utterances to the model. func addUtterance(authoringKey string, appID string, version string, labeledExampleUtterances string, endpoint string){ var authoringUrl = fmt.Sprintf("%sluis/authoring/v3.0-preview/apps/%s/versions/%s/examples", endpoint, appID, version) httpRequest("POST", authoringUrl, authoringKey, labeledExampleUtterances) } // Request training. func requestTraining(authoringKey string, appID string, version string, endpoint string){ trainApp("POST", authoringKey, appID, version, endpoint) } func trainApp(httpVerb string, authoringKey string, appID string, version string, endpoint string){ var authoringUrl = fmt.Sprintf("%sluis/authoring/v3.0-preview/apps/%s/versions/%s/train", endpoint, appID, version) httpRequest(httpVerb,authoringUrl, authoringKey, "") } func getTrainingStatus(authoringKey string, appID string, version string, endpoint string){ trainApp("GET", authoringKey, appID, version, endpoint) } // generic HTTP request // includes setting header with authoring key func httpRequest(httpVerb string, url string, authoringKey string, body string){ client := &http.Client{} request, err := http.NewRequest(httpVerb, url, strings.NewReader(body)) request.Header.Add("Ocp-Apim-Subscription-Key", authoringKey) fmt.Println("body") fmt.Println(body) response, err := client.Do(request) if err != nil { log.Fatal(err) } else { defer response.Body.Close() contents, err := ioutil.ReadAll(response.Body) if err != nil { log.Fatal(err) } fmt.Println(" ", response.StatusCode) fmt.Println(string(contents)) } }
Remplacez les valeurs commençant par
YOUR-
par vos propres valeurs.Information Objectif YOUR-APP-ID
Votre ID d’application LUIS. YOUR-AUTHORING-KEY
Votre clé de création (32 caractères). YOUR-AUTHORING-ENDPOINT
L’URL de votre point de terminaison de création. Par exemple : https://replace-with-your-resource-name.api.cognitive.microsoft.com/
. Vous avez défini le nom de votre ressource au moment de sa création.Les ressources et les clés affectées sont visibles dans le portail LUIS, dans la section Gérer de la page Ressources Azure. L’ID d’application est indiqué dans la section Gérer de la page Paramètres de l’application.
Important
N’oubliez pas de supprimer la clé de votre code une fois que vous avez terminé, et ne la postez jamais publiquement. Pour la production, utilisez un moyen sécurisé de stocker et d’accéder à vos informations d’identification comme Azure Key Vault. Pour plus d’informations, consultez l’article sur la sécurité d’Azure AI services.
Avec une invite de commandes située dans le même répertoire que celui où vous avez créé le fichier, entrez la commande suivante pour compiler le fichier Go :
go build model.go
Exécutez l’application GO à partir de la ligne de commande en entrant le texte suivant dans l’invite de commandes :
go run model.go
Passez en revue la réponse de création :
add example utterances requested body [{'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}]}] 201 [{"value":{"ExampleId":1137150691,"UtteranceText":"order a pizza"},"hasError":false},{"value":{"ExampleId":1137150692,"UtteranceText":"order a large pepperoni pizza"},"hasError":false},{"value":{"ExampleId":1137150693,"UtteranceText":"i want two large pepperoni pizzas on thin crust"},"hasError":false}] training selected body 202 {"statusId":9,"status":"Queued"} training status selected body 200 [{"modelId":"edb46abf-0000-41ab-beb2-a41a0fe1630f","details":{"statusId":9,"status":"Queued","exampleCount":0}},{"modelId":"a5030be2-616c-4648-bf2f-380fa9417d37","details":{"statusId":9,"status":"Queued","exampleCount":0}},{"modelId":"3f2b1f31-a3c3-4fbd-8182-e9d9dbc120b9","details":{"statusId":9,"status":"Queued","exampleCount":0}},{"modelId":"e4b6704b-1636-474c-9459-fe9ccbeba51c","details":{"statusId":9,"status":"Queued","exampleCount":0}},{"modelId":"031d3777-2a00-4a7a-9323-9a3280a30000","details":{"statusId":9,"status":"Queued","exampleCount":0}},{"modelId":"9250e7a1-06eb-4413-9432-ae132ed32583","details":{"statusId":9,"status":"Queued","exampleCount":0}}]
Voici la sortie mise en forme pour être lisible :
add example utterances requested body [ { '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 } ] } ] 201 [ { "value": { "ExampleId": 1137150691, "UtteranceText": "order a pizza" }, "hasError": false }, { "value": { "ExampleId": 1137150692, "UtteranceText": "order a large pepperoni pizza" }, "hasError": false }, { "value": { "ExampleId": 1137150693, "UtteranceText": "i want two large pepperoni pizzas on thin crust" }, "hasError": false } ] training selected body 202 { "statusId": 9, "status": "Queued" } training status selected body 200 [ { "modelId": "edb46abf-0000-41ab-beb2-a41a0fe1630f", "details": { "statusId": 9, "status": "Queued", "exampleCount": 0 } }, { "modelId": "a5030be2-616c-4648-bf2f-380fa9417d37", "details": { "statusId": 9, "status": "Queued", "exampleCount": 0 } }, { "modelId": "3f2b1f31-a3c3-4fbd-8182-e9d9dbc120b9", "details": { "statusId": 9, "status": "Queued", "exampleCount": 0 } }, { "modelId": "e4b6704b-1636-474c-9459-fe9ccbeba51c", "details": { "statusId": 9, "status": "Queued", "exampleCount": 0 } }, { "modelId": "031d3777-2a00-4a7a-9323-9a3280a30000", "details": { "statusId": 9, "status": "Queued", "exampleCount": 0 } }, { "modelId": "9250e7a1-06eb-4413-9432-ae132ed32583", "details": { "statusId": 9, "status": "Queued", "exampleCount": 0 } } ]
Nettoyer les ressources
Lorsque vous aurez fini de suivre ce guide de démarrage rapide, supprimez le fichier du système de fichiers.
Étapes suivantes
Documentation de référence | Exemple
Prérequis
- Langage de programmation Node.js
- Visual Studio Code
Exemples d’énoncés de fichier JSON
Les exemples d’énoncés suivent un format spécifique.
Le champ text
contient le texte de l’exemple d’énoncé. Le champ intentName
doit correspondre au nom d’une intention existante dans l’application LUIS. Le champ entityLabels
est obligatoire. Si vous ne souhaitez étiqueter aucune entité, fournissez un tableau vide.
Si le tableau entityLabels n’est pas vide, les éléments startCharIndex
et endCharIndex
doivent marquer l’entité concernée dans le champ entityName
. L’index est basé sur zéro. Si vous commencez ou terminez l’étiquette au niveau d’un espace dans le texte, l’appel d’API pour ajouter les énoncés échoue.
[
{
"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
}
]
}
]
Créer le projet Node.js
Créez un dossier pour stocker votre projet Node.js, par exemple
node-model-with-rest
.Ouvrez une nouvelle invite de commandes, accédez au dossier que vous avez créé et exécutez la commande suivante :
npm init
Appuyez sur Entrée à chaque invite pour accepter les paramètres par défaut.
Installez le module request-promise en entrant la commande suivante :
npm install --save request npm install --save request-promise npm install --save querystring
Changer le modèle programmatiquement
Créez un nouveau fichier appelé
model.js
. Ajoutez le code suivant :// // This quickstart shows how to add utterances to a LUIS model using the REST APIs. // var request = require('request-promise'); ////////// // Values to modify. // YOUR-APP-ID: The App ID GUID found on the www.luis.ai Application Settings page. const LUIS_appId = "PASTE_YOUR_LUIS_APP_ID_HERE"; // YOUR-AUTHORING-KEY: Your LUIS authoring key, 32 character value. const LUIS_authoringKey = "PASTE_YOUR_LUIS_AUTHORING_SUBSCRIPTION_KEY_HERE"; // YOUR-AUTHORING-ENDPOINT: Replace this with your authoring key endpoint. // For example, "https://your-resource-name.cognitiveservices.azure.com/" const LUIS_endpoint = "PASTE_YOUR_LUIS_AUTHORING_ENDPOINT_HERE"; // NOTE: Replace this your version number. The Pizza app uses a version number of "0.1". const LUIS_versionId = "0.1"; ////////// const addUtterancesURI = `${LUIS_endpoint}luis/authoring/v3.0-preview/apps/${LUIS_appId}/versions/${LUIS_versionId}/examples`; const addTrainURI = `${LUIS_endpoint}luis/authoring/v3.0-preview/apps/${LUIS_appId}/versions/${LUIS_versionId}/train`; const utterances = [ { '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 } ] } ]; // Main function. const main = async() =>{ await addUtterances(utterances); await train("POST"); await train("GET"); } // Adds the utterances to the model. const addUtterances = async (utterances) => { const options = { uri: addUtterancesURI, method: 'POST', headers: { 'Ocp-Apim-Subscription-Key': LUIS_authoringKey }, json: true, body: utterances }; const response = await request(options) console.log("addUtterance:\n" + JSON.stringify(response, null, 2)); } // With verb === "POST", sends a training request. // With verb === "GET", obtains the training status. const train = async (verb) => { const options = { uri: addTrainURI, method: verb, headers: { 'Ocp-Apim-Subscription-Key': LUIS_authoringKey }, json: true, body: null // The body can be empty for a training request }; const response = await request(options) console.log("train " + verb + ":\n" + JSON.stringify(response, null, 2)); } // MAIN main().then(() => console.log("done")).catch((err)=> console.log(err));
Remplacez les valeurs commençant par
YOUR-
par vos propres valeurs.Information Objectif YOUR-APP-ID
Votre ID d’application LUIS. YOUR-AUTHORING-KEY
Votre clé de création (32 caractères). YOUR-AUTHORING-ENDPOINT
L’URL de votre point de terminaison de création. Par exemple : https://replace-with-your-resource-name.api.cognitive.microsoft.com/
. Vous avez défini le nom de votre ressource au moment de sa création.Les ressources et les clés affectées sont visibles dans le portail LUIS, dans la section Gérer de la page Ressources Azure. L’ID d’application est indiqué dans la section Gérer de la page Paramètres de l’application.
Important
N’oubliez pas de supprimer la clé de votre code une fois que vous avez terminé, et ne la postez jamais publiquement. Pour la production, utilisez un moyen sécurisé de stocker et d’accéder à vos informations d’identification comme Azure Key Vault. Pour plus d’informations, consultez l’article sur la sécurité d’Azure AI services.
À l’invite de commandes, entrez la commande suivante pour exécuter le projet :
node model.js
Passez en revue la réponse de création :
addUtterance: [ { "value": { "ExampleId": 1137150691, "UtteranceText": "order a pizza" }, "hasError": false }, { "value": { "ExampleId": 1137150692, "UtteranceText": "order a large pepperoni pizza" }, "hasError": false }, { "value": { "ExampleId": 1137150693, "UtteranceText": "i want two large pepperoni pizzas on thin crust" }, "hasError": false } ] train POST: { "statusId": 9, "status": "Queued" } train GET: [ { "modelId": "edb46abf-0000-41ab-beb2-a41a0fe1630f", "details": { "statusId": 9, "status": "Queued", "exampleCount": 0 } }, { "modelId": "a5030be2-616c-4648-bf2f-380fa9417d37", "details": { "statusId": 9, "status": "Queued", "exampleCount": 0 } }, { "modelId": "3f2b1f31-a3c3-4fbd-8182-e9d9dbc120b9", "details": { "statusId": 9, "status": "Queued", "exampleCount": 0 } }, { "modelId": "e4b6704b-1636-474c-9459-fe9ccbeba51c", "details": { "statusId": 9, "status": "Queued", "exampleCount": 0 } }, { "modelId": "031d3777-2a00-4a7a-9323-9a3280a30000", "details": { "statusId": 9, "status": "Queued", "exampleCount": 0 } }, { "modelId": "9250e7a1-06eb-4413-9432-ae132ed32583", "details": { "statusId": 9, "status": "Queued", "exampleCount": 0 } } ] done
Nettoyer les ressources
Quand vous aurez fini de suivre ce guide de démarrage rapide, supprimez le dossier de projet du système de fichiers.
Étapes suivantes
Documentation de référence | Exemple
Prérequis
- Python 3.6 ou version ultérieure.
- Visual Studio Code
Exemples d’énoncés de fichier JSON
Les exemples d’énoncés suivent un format spécifique.
Le champ text
contient le texte de l’exemple d’énoncé. Le champ intentName
doit correspondre au nom d’une intention existante dans l’application LUIS. Le champ entityLabels
est obligatoire. Si vous ne souhaitez étiqueter aucune entité, fournissez un tableau vide.
Si le tableau entityLabels n’est pas vide, les éléments startCharIndex
et endCharIndex
doivent marquer l’entité concernée dans le champ entityName
. L’index est basé sur zéro. Si vous commencez ou terminez l’étiquette au niveau d’un espace dans le texte, l’appel d’API pour ajouter les énoncés échoue.
[
{
"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
}
]
}
]
Créer une application de pizza
Créez l’application de pizza.
- Sélectionnez pizza-app-for-luis-v6.json pour afficher la page GitHub du fichier
pizza-app-for-luis.json
. - Cliquez avec le bouton droit ou appuyez longuement sur le bouton Raw et sélectionnez Enregistrer la cible sous pour enregistrer le fichier
pizza-app-for-luis.json
sur votre ordinateur. - Connectez-vous au portail LUIS.
- Sélectionnez My Apps (Mes applications).
- Dans la page My Apps, sélectionnez + New app for conversation (Nouvelle application pour la conversation).
- Sélectionnez Import as JSON (Importer en tant que JSON).
- Dans la boîte de dialogue Import new app (Importer une nouvelle application), sélectionnez le bouton Choose File (Choisir un fichier).
- Sélectionnez le fichier
pizza-app-for-luis.json
que vous avez téléchargé, puis sélectionnezpizza-app-for-luis.json
(Ouvrir). - Dans le champ Name (Nom) de la boîte de dialogue Import new app, entrez un nom pour votre application de pizza, puis sélectionnez le bouton Done (terminé).
L’application est importée.
Si apparaît une boîte de dialogue How to create an effective LUIS app (Comment créer une application LUIS efficace), fermez-la.
Entraîner et publier l’application de pizza
Vous devez voir la page Intents (Intentions) avec une liste des intentions de l’application de pizza.
En haut à droite du site web LUIS, sélectionnez le bouton Effectuer l’apprentissage.
L’entraînement est terminé quand le bouton Entraîner est désactivé.
Pour recevoir une prédiction LUIS dans un chatbot ou une autre application cliente, vous avez besoin de publier l’application sur le point de terminaison de prédiction.
Dans le volet de navigation supérieur droit, sélectionnez Publier.
Sélectionnez l’emplacement Production, puis sélectionnez Terminé.
Sélectionnez Accéder à vos URL de point de terminaison dans la notification pour accéder à la page Ressources Azure. Vous ne pouvez voir les URL que si vous disposez d’une ressource de prédiction associée à l’application. Vous pouvez également rechercher la page Ressources Azure en cliquant sur Gérer.
Ajouter une ressource de création à l’application Pizza
- Sélectionnez MANAGE (Gérer).
- Sélectionnez Azure Resources (Ressources Azure).
- Sélectionnez Authoring Resource (Ressource de création).
- Sélectionnez Change authoring resource (Changer la ressource de création).
Si vous disposez d’une ressource de création, entrez le nom du locataire, le nom de l’abonnement, puis le nom de la ressource LUIS de votre ressource de création.
Si vous n’avez pas de ressource de création :
- Sélectionnez Create new resource (Créer une ressource).
- Entrez un nom de locataire, un nom de ressource, un nom d’abonnement et un nom de groupe de ressources Azure.
Votre application de pizza est maintenant prête à être utilisée.
Enregistrer les valeurs d’accès pour votre application Pizza
Pour utiliser votre nouvelle application de pizza, vous aurez besoin de son ID d’application, de sa clé de création et de son point de terminaison de création. Pour obtenir des prédictions, vous aurez besoin de votre propre point de terminaison de prédiction et de votre propre clé de prédiction.
Pour rechercher ces valeurs :
- Dans la page Intents (Intentions), sélectionnez MANAGE (GÉRER).
- Dans la page Application Settings (Paramètres de l’application), enregistrez l’ID d’application.
- Sélectionnez Azure Resources (Ressources Azure).
- Sélectionnez Authoring Resource (Ressource de création).
- Sous les onglets Ressource de création et Ressources de prédiction, enregistrez la Clé primaire. Cette valeur est votre clé de création.
- Enregistrez l’URL du point de terminaison. Cette valeur est votre point de terminaison de création.
Changer le modèle programmatiquement
Créez un nouveau fichier appelé
model.py
. Ajoutez le code suivant :########### Python 3.6 ############# # # This quickstart shows how to add utterances to a LUIS model using the REST APIs. # import requests try: ########## # Values to modify. # YOUR-APP-ID: The App ID GUID found on the www.luis.ai Application Settings page. appId = "PASTE_YOUR_LUIS_APP_ID_HERE" # YOUR-AUTHORING-KEY: Your LUIS authoring key, 32 character value. authoring_key = "PASTE_YOUR_LUIS_AUTHORING_SUBSCRIPTION_KEY_HERE" # YOUR-AUTHORING-ENDPOINT: Replace this with your authoring key endpoint. # For example, "https://your-resource-name.cognitiveservices.azure.com/" authoring_endpoint = "PASTE_YOUR_LUIS_AUTHORING_ENDPOINT_HERE" # The version number of your LUIS app app_version = "0.1" ########## # The headers to use in this REST call. headers = {'Ocp-Apim-Subscription-Key': authoring_key} # The URL parameters to use in this REST call. params ={ #'timezoneOffset': '0', #'verbose': 'true', #'show-all-intents': 'true', #'spellCheck': 'false', #'staging': 'false' } # List of example utterances to send to the LUIS app. data = """[ { '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 } ] } ] """ # Make the REST call to POST the list of example utterances. response = requests.post(f'{authoring_endpoint}luis/authoring/v3.0-preview/apps/{appId}/versions/{app_version}/examples', headers=headers, params=params, data=data) # Display the results on the console. print('Add the list of utterances:') print(response.json()) # Make the REST call to initiate a training session. response = requests.post(f'{authoring_endpoint}luis/authoring/v3.0-preview/apps/{appId}/versions/{app_version}/train', headers=headers, params=params, data=None) # Display the results on the console. print('Request training:') print(response.json()) # Make the REST call to request the status of training. response = requests.get(f'{authoring_endpoint}luis/authoring/v3.0-preview/apps/{appId}/versions/{app_version}/train', headers=headers, params=params, data=None) # Display the results on the console. print('Request training status:') print(response.json()) except Exception as e: # Display the error string. print(f'{e}')
Remplacez les valeurs commençant par
YOUR-
par vos propres valeurs.Information Objectif YOUR-APP-ID
Votre ID d’application LUIS. YOUR-AUTHORING-KEY
Votre clé de création (32 caractères). YOUR-AUTHORING-ENDPOINT
L’URL de votre point de terminaison de création. Par exemple : https://replace-with-your-resource-name.api.cognitive.microsoft.com/
. Vous avez défini le nom de votre ressource au moment de sa création.Les ressources et les clés affectées sont visibles dans le portail LUIS, dans la section Gérer de la page Ressources Azure. L’ID d’application est indiqué dans la section Gérer de la page Paramètres de l’application.
Important
N’oubliez pas de supprimer la clé de votre code une fois que vous avez terminé, et ne la postez jamais publiquement. Pour la production, utilisez un moyen sécurisé de stocker et d’accéder à vos informations d’identification comme Azure Key Vault. Pour plus d’informations, consultez l’article sur la sécurité d’Azure AI services.
Avec une invite de commandes située dans le même répertoire que celui où vous avez créé le fichier, entrez la commande suivante pour exécuter le fichier :
python model.py
Passez en revue la réponse de création :
Add the list of utterances: [{'value': {'ExampleId': 1137150691, 'UtteranceText': 'order a pizza'}, 'hasError': False}, {'value': {'ExampleId': 1137150692, 'UtteranceText': 'order a large pepperoni pizza'}, 'hasError': False}, {'value': {'ExampleId': 1137150693, 'UtteranceText': 'i want two large pepperoni pizzas on thin crust'}, 'hasError': False}] Request training: {'statusId': 9, 'status': 'Queued'} Request training status: [{'modelId': 'edb46abf-0000-41ab-beb2-a41a0fe1630f', 'details': {'statusId': 3, 'status': 'InProgress', 'exampleCount': 0, 'progressSubstatus': 'CollectingData'}}, {'modelId': 'a5030be2-616c-4648-bf2f-380fa9417d37', 'details': {'statusId': 3, 'status': 'InProgress', 'exampleCount': 0, 'progressSubstatus': 'CollectingData'}}, {'modelId': '3f2b1f31-a3c3-4fbd-8182-e9d9dbc120b9', 'details': {'statusId': 3, 'status': 'InProgress', 'exampleCount': 0, 'progressSubstatus': 'CollectingData'}}, {'modelId': 'e4b6704b-1636-474c-9459-fe9ccbeba51c', 'details': {'statusId': 3, 'status': 'InProgress', 'exampleCount': 0, 'progressSubstatus': 'CollectingData'}}, {'modelId': '031d3777-2a00-4a7a-9323-9a3280a30000', 'details': {'statusId': 3, 'status': 'InProgress', 'exampleCount': 0, 'progressSubstatus': 'CollectingData'}}, {'modelId': '9250e7a1-06eb-4413-9432-ae132ed32583', 'details': {'statusId': 3, 'status': 'InProgress', 'exampleCount': 0, 'progressSubstatus': 'CollectingData'}}]
Voici la sortie mise en forme pour être lisible :
Add the list of utterances: [ { 'value': { 'ExampleId': 1137150691, 'UtteranceText': 'order a pizza' }, 'hasError': False }, { 'value': { 'ExampleId': 1137150692, 'UtteranceText': 'order a large pepperoni pizza' }, 'hasError': False }, { 'value': { 'ExampleId': 1137150693, 'UtteranceText': 'i want two large pepperoni pizzas on thin crust' }, 'hasError': False } ] Request training: { 'statusId': 9, 'status': 'Queued' } Request training status: [ { 'modelId': 'edb46abf-0000-41ab-beb2-a41a0fe1630f', 'details': { 'statusId': 3, 'status': 'InProgress', 'exampleCount': 0, 'progressSubstatus': 'CollectingData' } }, { 'modelId': 'a5030be2-616c-4648-bf2f-380fa9417d37', 'details': { 'statusId': 3, 'status': 'InProgress', 'exampleCount': 0, 'progressSubstatus': 'CollectingData' } }, { 'modelId': '3f2b1f31-a3c3-4fbd-8182-e9d9dbc120b9', 'details': { 'statusId': 3, 'status': 'InProgress', 'exampleCount': 0, 'progressSubstatus': 'CollectingData' } }, { 'modelId': 'e4b6704b-1636-474c-9459-fe9ccbeba51c', 'details': { 'statusId': 3, 'status': 'InProgress', 'exampleCount': 0, 'progressSubstatus': 'CollectingData' } }, { 'modelId': '031d3777-2a00-4a7a-9323-9a3280a30000', 'details': { 'statusId': 3, 'status': 'InProgress', 'exampleCount': 0, 'progressSubstatus': 'CollectingData' } }, { 'modelId': '9250e7a1-06eb-4413-9432-ae132ed32583', 'details': { 'statusId': 3, 'status': 'InProgress', 'exampleCount': 0, 'progressSubstatus': 'CollectingData' } } ]
Nettoyer les ressources
Lorsque vous aurez fini de suivre ce guide de démarrage rapide, supprimez le fichier du système de fichiers.