Изменение модели LUIS с помощью REST API
Внимание
LUIS будет прекращена 1 октября 2025 г. и с 1 апреля 2023 г. вы не сможете создать новые ресурсы LUIS. Мы рекомендуем перенести приложения LUIS в понимание общения, чтобы воспользоваться продолжением поддержки продуктов и многоязычными возможностями.
В этой статье показано, как добавить речевые фрагменты в приложение Pizza и обучить его. Примерами высказываний называют фразы пользователя на обычном языке, сопоставленные с тем или иным намерением. Предоставляя фразы для настроенных намерений, вы сообщаете LUIS ожидаемые варианты сообщений пользователя для каждого намерения.
Справочная документация | Пример
Необходимые компоненты
Файл JSON с примерами высказываний.
Примеры речевых фрагментов соответствуют определенному формату.
Поле text
содержит текст примера высказывания. Поле intentName
должно соответствовать имени существующего намерения в приложении LUIS. Поле entityLabels
является обязательным. Чтобы не помечать все сущности, укажите пустой массив.
Если массив entityLabels не пуст, startCharIndex
и endCharIndex
должны пометить сущность, указанную в поле entityName
. Значения индекса начинаются с нуля. Если вы начинаете или завершаете метку пробелом в тексте, вызов API для добавления фразы завершается ошибкой.
[
{
"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
}
]
}
]
Создание приложения Pizza
Создайте приложение Pizza.
- Щелкните pizza-app-for-luis-v6.json, чтобы открыть на сайте GitHub страницу с файлом
pizza-app-for-luis.json
. - Щелкните правой кнопкой мыши кнопку Raw (Необработанный) или коснитесь ее с задержкой и выберите Save link as (Сохранить ссылку как), чтобы сохранить
pizza-app-for-luis.json
на компьютере. - Войдите на портал LUIS.
- Щелкните My Apps (Мои приложения).
- На странице My Apps (Мои приложения) щелкните + New app for conversation (+ Новое приложение для общения).
- Щелкните Import as JSON (Импортировать как JSON).
- В диалоговом окне Import new app (Импорт нового приложения) нажмите кнопку Choose File (Выбрать файл).
- Выберите скачанный файл
pizza-app-for-luis.json
и щелкните Open (Открыть). - В диалоговом окне Import new app (Импорт нового приложения) в поле Name (Имя) введите имя приложения для заказа пиццы, а затем нажмите кнопку Done (Готово).
Приложение будет импортировано.
Если отобразится диалоговое окно How to create an effective LUIS app (Как создать эффективное приложение LUIS), закройте его.
Обучение и публикация приложения для заказа пиццы
Должна отобразиться страница Intents (Намерения) со списком намерений в приложении для заказа пиццы.
В верхней правой части веб-сайта LUIS нажмите кнопку Train (Обучить).
Обучение будет завершено, когда кнопка Обучение станет неактивной.
Чтобы получать результаты прогнозирования LUIS в чат-боте или других клиентских приложениях, необходимо опубликовать приложение в конечной точке прогнозирования.
Выберите Опубликовать на правой верхней панели навигации.
Выберите слот Рабочий и нажмите кнопку Готово.
Выберите Получить доступ к URL-адресам конечных точек в уведомлении, чтобы открыть страницу Ресурсы Azure. Вы будете видеть URL-адреса только в том случае, если с приложением связан ресурс для прогнозирования. Вы также можете перейти к странице Ресурсы Azure, щелкнув Управление.
Добавление ресурса разработки в приложение Pizza
- Щелкните MANAGE (Управление).
- Выберите Ресурсы Azure.
- Щелкните Authoring Resource (Ресурс разработки).
- Щелкните Change authoring resource (Изменить ресурс разработки).
Если у вас есть ресурс разработки, введите для него имя клиента, имя подписки и имя ресурса LUIS.
Если у вас нет ресурса разработки, сделайте следующее:
- Выберите Create new resource (Создать ресурс).
- Введите имя арендатора, имя ресурса, имя подписки и имя группы ресурсов Azure.
Теперь приложение для заказа пиццы можно использовать.
Запись значений доступа для приложения Pizza
Чтобы использовать новое приложение Pizza, вам потребуются его идентификатор, а также ключ и конечная точка разработки. Для получения прогнозов потребуется отдельная конечная точка прогнозирования и ключ прогнозирования.
Вот как найти эти значения:
- На странице Intents (Намерения) щелкните MANAGE (Управление).
- На странице Application Settings (Параметры приложения) запишите значение App ID (Идентификатор приложения).
- Выберите Ресурсы Azure.
- Щелкните Authoring Resource (Ресурс разработки).
- На вкладках Authoring Resource (Ресурс разработки) и Prediction Resources (Ресурсы прогнозирования) запишите первичный ключ. Это значение является ключом разработки.
- Скопируйте значение Endpoint URL (URL-адрес конечной точки). Это значение является конечной точкой разработки.
Изменение модели программными средствами
Создайте консольное приложение для языка C# с проектом и именем папки
csharp-model-with-rest
.dotnet new console -lang C# -n csharp-model-with-rest
Перейдите в созданный каталог
csharp-model-with-rest
и установите необходимые зависимости с помощью следующих команд:cd csharp-model-with-rest dotnet add package System.Net.Http dotnet add package JsonFormatterPlus
Перезапишите содержимое файла Program.cs следующим кодом:
// // 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(); } } }
Замените значения, начинающиеся с
YOUR-
, собственными значениями.Информация Характер использования YOUR-APP-ID
Идентификатор приложения LUIS. YOUR-AUTHORING-KEY
Ключ для разработки (32 символа). YOUR-AUTHORING-ENDPOINT
Конечная точка URL-адреса для разработки. Например, https://replace-with-your-resource-name.api.cognitive.microsoft.com/
. Имя ресурса задается при создании ресурса.Назначенные ключи и ресурсы отображаются на портале LUIS в разделе "Управление" на странице ресурсов Azure. Идентификатор приложения доступен в том же разделе "Управление" на странице Параметры приложения.
Внимание
Обязательно удалите ключ из кода, когда завершите работу, и ни в коем случае не публикуйте его в открытом доступе. Для рабочей среды используйте безопасный способ хранения и доступа к учетным данным, например Azure Key Vault. Дополнительные сведения см. в статье по безопасности служб ИИ Azure.
Постройте консольное приложение.
dotnet build
Запустите консольное приложение.
dotnet run
Просмотрите ответ разработки.
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 } } ]
Очистка ресурсов
Завершив работу с этим кратким руководством, удалите папку проекта из файловой системы.
Следующие шаги
Справочная документация | Пример
Необходимые компоненты
- JDK SE (пакет средств разработки для Java, выпуск Standard)
- Visual Studio Code или привычный вам редактор кода;
Файл JSON с примерами высказываний.
Примеры речевых фрагментов соответствуют определенному формату.
Поле text
содержит текст примера высказывания. Поле intentName
должно соответствовать имени существующего намерения в приложении LUIS. Поле entityLabels
является обязательным. Чтобы не помечать все сущности, укажите пустой массив.
Если массив entityLabels не пуст, startCharIndex
и endCharIndex
должны пометить сущность, указанную в поле entityName
. Значения индекса начинаются с нуля. Если вы начинаете или завершаете метку пробелом в тексте, вызов API для добавления фразы завершается ошибкой.
[
{
"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
}
]
}
]
Изменение модели программными средствами
Создайте новую папку для размещения проекта Node.js, например
java-model-with-rest
.Создайте подкаталог с именем
lib
и скопируйте в его подкаталогlib
следующие библиотеки Java:Создайте файл с именем
Model.java
. Добавьте следующий код:// // 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()); } } }
Замените значения, начинающиеся с
YOUR-
, собственными значениями.Информация Характер использования YOUR-APP-ID
Идентификатор приложения LUIS. YOUR-AUTHORING-KEY
Ключ для разработки (32 символа). YOUR-AUTHORING-ENDPOINT
Конечная точка URL-адреса для разработки. Например, https://replace-with-your-resource-name.api.cognitive.microsoft.com/
. Имя ресурса задается при создании ресурса.Назначенные ключи и ресурсы отображаются на портале LUIS в разделе "Управление" на странице ресурсов Azure. Идентификатор приложения доступен в том же разделе "Управление" на странице Параметры приложения.
Внимание
Обязательно удалите ключ из кода, когда завершите работу, и ни в коем случае не публикуйте его в открытом доступе. Для рабочей среды используйте безопасный способ хранения и доступа к учетным данным, например Azure Key Vault. Дополнительные сведения см. в статье по безопасности служб ИИ Azure.
В командной строке каталога, в котором вы создали файл
Model.java
, введите следующую команду, чтобы скомпилировать файл Java:- В Windows выполните следующую команду:
javac -cp ";lib/*" Model.java
. - В macOS и Linux выполните следующую команду:
javac -cp ":lib/*" Model.java
.
- В Windows выполните следующую команду:
Запустите приложение Java из командной строки, введя следующий текст:
- В Windows выполните следующую команду:
java -cp ";lib/*" Model
. - В macOS и Linux выполните следующую команду:
java -cp ":lib/*" Model
.
- В Windows выполните следующую команду:
Просмотрите ответ разработки.
[{"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"}}]
Ниже приведены выходные данные, отформатированные для удобочитаемости.
[ { "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" } } ]
Очистка ресурсов
Завершив работу с этим кратким руководством, удалите папку проекта из файловой системы.
Следующие шаги
Справочная документация | Пример
Необходимые компоненты
- язык программирования GO;
- Visual Studio Code
Файл JSON с примерами высказываний.
Примеры речевых фрагментов соответствуют определенному формату.
Поле text
содержит текст примера высказывания. Поле intentName
должно соответствовать имени существующего намерения в приложении LUIS. Поле entityLabels
является обязательным. Чтобы не помечать все сущности, укажите пустой массив.
Если массив entityLabels не пуст, startCharIndex
и endCharIndex
должны пометить сущность, указанную в поле entityName
. Значения индекса начинаются с нуля. Если вы начинаете или завершаете метку пробелом в тексте, вызов API для добавления фразы завершается ошибкой.
[
{
"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
}
]
}
]
Создание приложения Pizza
Создайте приложение Pizza.
- Щелкните pizza-app-for-luis-v6.json, чтобы открыть на сайте GitHub страницу с файлом
pizza-app-for-luis.json
. - Щелкните правой кнопкой мыши кнопку Raw (Необработанный) или коснитесь ее с задержкой и выберите Save link as (Сохранить ссылку как), чтобы сохранить
pizza-app-for-luis.json
на компьютере. - Войдите на портал LUIS.
- Щелкните My Apps (Мои приложения).
- На странице My Apps (Мои приложения) щелкните + New app for conversation (+ Новое приложение для общения).
- Щелкните Import as JSON (Импортировать как JSON).
- В диалоговом окне Import new app (Импорт нового приложения) нажмите кнопку Choose File (Выбрать файл).
- Выберите скачанный файл
pizza-app-for-luis.json
и щелкните Open (Открыть). - В диалоговом окне Import new app (Импорт нового приложения) в поле Name (Имя) введите имя приложения для заказа пиццы, а затем нажмите кнопку Done (Готово).
Приложение будет импортировано.
Если отобразится диалоговое окно How to create an effective LUIS app (Как создать эффективное приложение LUIS), закройте его.
Обучение и публикация приложения для заказа пиццы
Должна отобразиться страница Intents (Намерения) со списком намерений в приложении для заказа пиццы.
В верхней правой части веб-сайта LUIS нажмите кнопку Train (Обучить).
Обучение будет завершено, когда кнопка Обучение станет неактивной.
Чтобы получать результаты прогнозирования LUIS в чат-боте или других клиентских приложениях, необходимо опубликовать приложение в конечной точке прогнозирования.
Выберите Опубликовать на правой верхней панели навигации.
Выберите слот Рабочий и нажмите кнопку Готово.
Выберите Получить доступ к URL-адресам конечных точек в уведомлении, чтобы открыть страницу Ресурсы Azure. Вы будете видеть URL-адреса только в том случае, если с приложением связан ресурс для прогнозирования. Вы также можете перейти к странице Ресурсы Azure, щелкнув Управление.
Добавление ресурса разработки в приложение Pizza
- Щелкните MANAGE (Управление).
- Выберите Ресурсы Azure.
- Щелкните Authoring Resource (Ресурс разработки).
- Щелкните Change authoring resource (Изменить ресурс разработки).
Если у вас есть ресурс разработки, введите для него имя клиента, имя подписки и имя ресурса LUIS.
Если у вас нет ресурса разработки, сделайте следующее:
- Выберите Create new resource (Создать ресурс).
- Введите имя арендатора, имя ресурса, имя подписки и имя группы ресурсов Azure.
Теперь приложение для заказа пиццы можно использовать.
Запись значений доступа для приложения Pizza
Чтобы использовать новое приложение Pizza, вам потребуются его идентификатор, а также ключ и конечная точка разработки. Для получения прогнозов потребуется отдельная конечная точка прогнозирования и ключ прогнозирования.
Вот как найти эти значения:
- На странице Intents (Намерения) щелкните MANAGE (Управление).
- На странице Application Settings (Параметры приложения) запишите значение App ID (Идентификатор приложения).
- Выберите Ресурсы Azure.
- Щелкните Authoring Resource (Ресурс разработки).
- На вкладках Authoring Resource (Ресурс разработки) и Prediction Resources (Ресурсы прогнозирования) запишите первичный ключ. Это значение является ключом разработки.
- Скопируйте значение Endpoint URL (URL-адрес конечной точки). Это значение является конечной точкой разработки.
Изменение модели программными средствами
Создайте файл с именем
predict.go
. Добавьте следующий код:// // 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)) } }
Замените значения, начинающиеся с
YOUR-
, собственными значениями.Информация Характер использования YOUR-APP-ID
Идентификатор приложения LUIS. YOUR-AUTHORING-KEY
Ключ для разработки (32 символа). YOUR-AUTHORING-ENDPOINT
Конечная точка URL-адреса для разработки. Например, https://replace-with-your-resource-name.api.cognitive.microsoft.com/
. Имя ресурса задается при создании ресурса.Назначенные ключи и ресурсы отображаются на портале LUIS в разделе "Управление" на странице ресурсов Azure. Идентификатор приложения доступен в том же разделе "Управление" на странице Параметры приложения.
Внимание
Обязательно удалите ключ из кода, когда завершите работу, и ни в коем случае не публикуйте его в открытом доступе. Для рабочей среды используйте безопасный способ хранения и доступа к учетным данным, например Azure Key Vault. Дополнительные сведения см. в статье по безопасности служб ИИ Azure.
В командной строке в каталоге, в котором вы создали файл, введите следующую команду, чтобы скомпилировать файл Go:
go build model.go
Запустите приложение Go из командной строки, введя следующий текст:
go run model.go
Просмотрите ответ разработки.
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}}]
Ниже приведены выходные данные, отформатированные для удобочитаемости.
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 } } ]
Очистка ресурсов
По завершении работы с этим кратким руководством удалите файл из файловой системы.
Следующие шаги
Справочная документация | Пример
Необходимые компоненты
- Язык программирования Node.js.
- Visual Studio Code
Файл JSON с примерами высказываний.
Примеры речевых фрагментов соответствуют определенному формату.
Поле text
содержит текст примера высказывания. Поле intentName
должно соответствовать имени существующего намерения в приложении LUIS. Поле entityLabels
является обязательным. Чтобы не помечать все сущности, укажите пустой массив.
Если массив entityLabels не пуст, startCharIndex
и endCharIndex
должны пометить сущность, указанную в поле entityName
. Значения индекса начинаются с нуля. Если вы начинаете или завершаете метку пробелом в тексте, вызов API для добавления фразы завершается ошибкой.
[
{
"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
}
]
}
]
Создание проекта Node.js
Создайте папку для размещения проекта Node.js, например
node-model-with-rest
.Откройте новое окно командной строки, перейдите в только что созданный каталог и введите следующую команду:
npm init
В ответ на каждый запрос нажимайте клавишу ВВОД, чтобы подтвердить значения по умолчанию.
Установите модуль "запрос-обещание", выполнив в командной строке следующую команду:
npm install --save request npm install --save request-promise npm install --save querystring
Изменение модели программными средствами
Создайте файл с именем
model.js
. Добавьте следующий код:// // 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));
Замените значения, начинающиеся с
YOUR-
, собственными значениями.Информация Характер использования YOUR-APP-ID
Идентификатор приложения LUIS. YOUR-AUTHORING-KEY
Ключ для разработки (32 символа). YOUR-AUTHORING-ENDPOINT
Конечная точка URL-адреса для разработки. Например, https://replace-with-your-resource-name.api.cognitive.microsoft.com/
. Имя ресурса задается при создании ресурса.Назначенные ключи и ресурсы отображаются на портале LUIS в разделе "Управление" на странице ресурсов Azure. Идентификатор приложения доступен в том же разделе "Управление" на странице Параметры приложения.
Внимание
Обязательно удалите ключ из кода, когда завершите работу, и ни в коем случае не публикуйте его в открытом доступе. Для рабочей среды используйте безопасный способ хранения и доступа к учетным данным, например Azure Key Vault. Дополнительные сведения см. в статье по безопасности служб ИИ Azure.
В командной строке введите следующую команду, чтобы запустить проект:
node model.js
Просмотрите ответ разработки.
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
Очистка ресурсов
Завершив работу с этим кратким руководством, удалите папку проекта из файловой системы.
Следующие шаги
Справочная документация | Пример
Необходимые компоненты
- Python 3.6 или более поздней версии.
- Visual Studio Code
Файл JSON с примерами высказываний.
Примеры речевых фрагментов соответствуют определенному формату.
Поле text
содержит текст примера высказывания. Поле intentName
должно соответствовать имени существующего намерения в приложении LUIS. Поле entityLabels
является обязательным. Чтобы не помечать все сущности, укажите пустой массив.
Если массив entityLabels не пуст, startCharIndex
и endCharIndex
должны пометить сущность, указанную в поле entityName
. Значения индекса начинаются с нуля. Если вы начинаете или завершаете метку пробелом в тексте, вызов API для добавления фразы завершается ошибкой.
[
{
"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
}
]
}
]
Создание приложения Pizza
Создайте приложение Pizza.
- Щелкните pizza-app-for-luis-v6.json, чтобы открыть на сайте GitHub страницу с файлом
pizza-app-for-luis.json
. - Щелкните правой кнопкой мыши кнопку Raw (Необработанный) или коснитесь ее с задержкой и выберите Save link as (Сохранить ссылку как), чтобы сохранить
pizza-app-for-luis.json
на компьютере. - Войдите на портал LUIS.
- Щелкните My Apps (Мои приложения).
- На странице My Apps (Мои приложения) щелкните + New app for conversation (+ Новое приложение для общения).
- Щелкните Import as JSON (Импортировать как JSON).
- В диалоговом окне Import new app (Импорт нового приложения) нажмите кнопку Choose File (Выбрать файл).
- Выберите скачанный файл
pizza-app-for-luis.json
и щелкните Open (Открыть). - В диалоговом окне Import new app (Импорт нового приложения) в поле Name (Имя) введите имя приложения для заказа пиццы, а затем нажмите кнопку Done (Готово).
Приложение будет импортировано.
Если отобразится диалоговое окно How to create an effective LUIS app (Как создать эффективное приложение LUIS), закройте его.
Обучение и публикация приложения для заказа пиццы
Должна отобразиться страница Intents (Намерения) со списком намерений в приложении для заказа пиццы.
В верхней правой части веб-сайта LUIS нажмите кнопку Train (Обучить).
Обучение будет завершено, когда кнопка Обучение станет неактивной.
Чтобы получать результаты прогнозирования LUIS в чат-боте или других клиентских приложениях, необходимо опубликовать приложение в конечной точке прогнозирования.
Выберите Опубликовать на правой верхней панели навигации.
Выберите слот Рабочий и нажмите кнопку Готово.
Выберите Получить доступ к URL-адресам конечных точек в уведомлении, чтобы открыть страницу Ресурсы Azure. Вы будете видеть URL-адреса только в том случае, если с приложением связан ресурс для прогнозирования. Вы также можете перейти к странице Ресурсы Azure, щелкнув Управление.
Добавление ресурса разработки в приложение Pizza
- Щелкните MANAGE (Управление).
- Выберите Ресурсы Azure.
- Щелкните Authoring Resource (Ресурс разработки).
- Щелкните Change authoring resource (Изменить ресурс разработки).
Если у вас есть ресурс разработки, введите для него имя клиента, имя подписки и имя ресурса LUIS.
Если у вас нет ресурса разработки, сделайте следующее:
- Выберите Create new resource (Создать ресурс).
- Введите имя арендатора, имя ресурса, имя подписки и имя группы ресурсов Azure.
Теперь приложение для заказа пиццы можно использовать.
Запись значений доступа для приложения Pizza
Чтобы использовать новое приложение Pizza, вам потребуются его идентификатор, а также ключ и конечная точка разработки. Для получения прогнозов потребуется отдельная конечная точка прогнозирования и ключ прогнозирования.
Вот как найти эти значения:
- На странице Intents (Намерения) щелкните MANAGE (Управление).
- На странице Application Settings (Параметры приложения) запишите значение App ID (Идентификатор приложения).
- Выберите Ресурсы Azure.
- Щелкните Authoring Resource (Ресурс разработки).
- На вкладках Authoring Resource (Ресурс разработки) и Prediction Resources (Ресурсы прогнозирования) запишите первичный ключ. Это значение является ключом разработки.
- Скопируйте значение Endpoint URL (URL-адрес конечной точки). Это значение является конечной точкой разработки.
Изменение модели программными средствами
Создайте файл с именем
model.py
. Добавьте следующий код:########### 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}')
Замените значения, начинающиеся с
YOUR-
, собственными значениями.Информация Характер использования YOUR-APP-ID
Идентификатор приложения LUIS. YOUR-AUTHORING-KEY
Ключ для разработки (32 символа). YOUR-AUTHORING-ENDPOINT
Конечная точка URL-адреса для разработки. Например, https://replace-with-your-resource-name.api.cognitive.microsoft.com/
. Имя ресурса задается при создании ресурса.Назначенные ключи и ресурсы отображаются на портале LUIS в разделе "Управление" на странице ресурсов Azure. Идентификатор приложения доступен в том же разделе "Управление" на странице Параметры приложения.
Внимание
Обязательно удалите ключ из кода, когда завершите работу, и ни в коем случае не публикуйте его в открытом доступе. Для рабочей среды используйте безопасный способ хранения и доступа к учетным данным, например Azure Key Vault. Дополнительные сведения см. в статье по безопасности служб ИИ Azure.
В командной строке каталога, в котором вы создали файл, введите следующую команду, чтобы запустить этот файл:
python model.py
Просмотрите ответ разработки.
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'}}]
Ниже приведены выходные данные, отформатированные для удобочитаемости.
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' } } ]
Очистка ресурсов
По завершении работы с этим кратким руководством удалите файл из файловой системы.