كيفية تحديث نموذج LUIS باستخدام واجهات برمجة تطبيقات REST
في هذه المقالة ، ستضيف أمثلة على الأقوال إلى تطبيق بيتزا وتدرب التطبيق. أمثلة على الألفاظ هي نص مستخدم محادثة تم تعيينه إلى نية. من خلال تقديم أمثلة على الألفاظ للنوايا ، فإنك تعلم LUIS أنواع النصوص التي يوفرها المستخدم والتي تنتمي إلى أي نية.
المتطلبات الأساسية
مثال على الألفاظ ملف JSON
تتبع الألفاظ النموذجية تنسيقا محددا.
حقل textيحتوي على نص لأمثلة من الكلمات. يجب أن يتوافق حقل intentName مع اسم هدف موجود في تطبيق LUIS. حقل 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-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.
- في مربع الحوار Import new app حدد الزر Choose File.
- حدد الملف
pizza-app-for-luis.json الذي قمت بتنزيله، ثم حدد Open. - في مربع الحوار Import new app ضمن الحقل Name، أدخل اسمًا لتطبيق Pizza، ثم حدد الزر Done.
سيتم استيراد التطبيق.
إذا رأيت مربع الحوار كيفية إنشاء تطبيق LUIS فعال، فأغلق مربع الحوار.
التدريب على تطبيق Pizza ونشره
يجب أن تشاهد صفحة Intents التي تتضمن قائمة بالأهداف في تطبيق Pizza.
في الجانب العلوي الأيمن من موقع LUIS، حدد الزر "Train" .

يكتمل التدريب عند تعطيل الزر "قطار ".
لتلقي تنبؤ LUIS في روبوت دردشة أو تطبيقات عميل أخرى ، تحتاج إلى نشر التطبيق على نقطة نهاية التنبؤ.
حدد نشر في شريط التنقل العلوي الأيمن.

حدد فتحة الإنتاج، ثم حدد تم.

حدد الوصول إلى عناوين URL لنقطة النهاية في الإخطار للانتقال إلى صفحة Azure Resources. لن تتمكن من رؤية عناوين URL إلا إذا كان لديك مورد تنبؤ مقترن بالتطبيق. يمكنك أيضًا الاطلاع على صفحة موارد Azure بالنقر فوق إدارة.

أضف مورد تأليف إلى تطبيق Pizza
- حدد MANAGE.
- حدد «Azure resources».
- حدد Authoring Resource.
- حدد Change authoring resource.
إذا كان لديك مورد تأليف، فأدخل Tenant Name، وSubscription Name، وLUIS resource name لمورد التأليف لديك.
إذا لم يكن لديك مورد التأليف:
- فحدد Create new resource.
- أدخل Tenant Name، وResource Name، وK Subscription NameوAzureResource Group Name.
تطبيق Pizza الخاص بك جاهز الآن للاستخدام.
تسجيل قيم الوصول لتطبيق Pizza
لاستخدام تطبيق Pizza الجديد، ستحتاج إلى معرف التطبيق، ومفتاح التأليف، ونقطة نهاية التأليف لتطبيق Pizza. للحصول على التوقعات، ستحتاج إلى نقطة نهاية توقع منفصلة، ومفتاح توقع منفصل.
للعثور على هذه القيم:
- من صفحة Intents، حدد MANAGE.
- من صفحة Application Settings، سجل App ID.
- حدد «Azure resources».
- حدد Authoring Resource.
- من علامات التبويب Authoring Resource، وPrediction، سجل Primary Key. تمثل هذه القيمة مفتاح التأليف لديك.
- سجّل Endpoint 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الكتابة فوق البرنامج.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 . يتوفر معرّف التطبيق في قسم الإدارة نفسه، في صفحة إعدادات التطبيق.
إنشاء تطبيق وحدة تحكم.
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 (مجموعة تطوير جافا ، الإصدار القياسي)
- رمز Visual Studio أو IDE المفضل لديك
مثال على الألفاظ ملف JSON
تتبع الألفاظ النموذجية تنسيقا محددا.
حقل textيحتوي على نص لأمثلة من الكلمات. يجب أن يتوافق حقل intentName مع اسم هدف موجود في تطبيق LUIS. حقل 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
}
]
}
]
تغيير النموذج برمجيا
قم بإنشاء مجلد جديد للاحتفاظ بمشروع Java الخاص بك، مثل
java-model-with-rest.قم بإنشاء دليل فرعي مسمى
libوانسخه في Java libs التالي إلى الدليل الفرعيlib:إنشاء ملف جديد يسمى
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 . يتوفر معرّف التطبيق في قسم الإدارة نفسه، في صفحة إعدادات التطبيق.
باستخدام موجه الأوامر في نفس الدليل الذي قمت
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" } } ]
تنظيف الموارد
عند الانتهاء من هذه البداية السريعة، حذف مجلد المشروع من نظام الملفات.
الخطوات التالية
المتطلبات الأساسية
- انتقل إلى لغة البرمجة
- تعليمة Visual Studio برمجية
مثال على الألفاظ ملف JSON
تتبع الألفاظ النموذجية تنسيقا محددا.
حقل textيحتوي على نص لأمثلة من الكلمات. يجب أن يتوافق حقل intentName مع اسم هدف موجود في تطبيق LUIS. حقل 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-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.
- في مربع الحوار Import new app حدد الزر Choose File.
- حدد الملف
pizza-app-for-luis.json الذي قمت بتنزيله، ثم حدد Open. - في مربع الحوار Import new app ضمن الحقل Name، أدخل اسمًا لتطبيق Pizza، ثم حدد الزر Done.
سيتم استيراد التطبيق.
إذا رأيت مربع الحوار كيفية إنشاء تطبيق LUIS فعال، فأغلق مربع الحوار.
التدريب على تطبيق Pizza ونشره
يجب أن تشاهد صفحة Intents التي تتضمن قائمة بالأهداف في تطبيق Pizza.
في الجانب العلوي الأيمن من موقع LUIS، حدد الزر "Train" .

يكتمل التدريب عند تعطيل الزر "قطار ".
لتلقي تنبؤ LUIS في روبوت دردشة أو تطبيقات عميل أخرى ، تحتاج إلى نشر التطبيق على نقطة نهاية التنبؤ.
حدد نشر في شريط التنقل العلوي الأيمن.

حدد فتحة الإنتاج، ثم حدد تم.

حدد الوصول إلى عناوين URL لنقطة النهاية في الإخطار للانتقال إلى صفحة Azure Resources. لن تتمكن من رؤية عناوين URL إلا إذا كان لديك مورد تنبؤ مقترن بالتطبيق. يمكنك أيضًا الاطلاع على صفحة موارد Azure بالنقر فوق إدارة.

أضف مورد تأليف إلى تطبيق Pizza
- حدد MANAGE.
- حدد «Azure resources».
- حدد Authoring Resource.
- حدد Change authoring resource.
إذا كان لديك مورد تأليف، فأدخل Tenant Name، وSubscription Name، وLUIS resource name لمورد التأليف لديك.
إذا لم يكن لديك مورد التأليف:
- فحدد Create new resource.
- أدخل Tenant Name، وResource Name، وK Subscription NameوAzureResource Group Name.
تطبيق Pizza الخاص بك جاهز الآن للاستخدام.
تسجيل قيم الوصول لتطبيق Pizza
لاستخدام تطبيق Pizza الجديد، ستحتاج إلى معرف التطبيق، ومفتاح التأليف، ونقطة نهاية التأليف لتطبيق Pizza. للحصول على التوقعات، ستحتاج إلى نقطة نهاية توقع منفصلة، ومفتاح توقع منفصل.
للعثور على هذه القيم:
- من صفحة Intents، حدد MANAGE.
- من صفحة Application Settings، سجل App ID.
- حدد «Azure resources».
- حدد Authoring Resource.
- من علامات التبويب Authoring Resource، وPrediction، سجل Primary Key. تمثل هذه القيمة مفتاح التأليف لديك.
- سجّل Endpoint 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 . يتوفر معرّف التطبيق في قسم الإدارة نفسه، في صفحة إعدادات التطبيق.
باستخدام موجه الأوامر في نفس الدليل الذي قمت بإنشاء الملف فيه، أدخل الأمر التالي لترجمة ملف 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 } } ]
تنظيف الموارد
عند الانتهاء من هذا التشغيل السريع، احذف الملف من نظام الملفات.
الخطوات التالية
المتطلبات الأساسية
مثال على الألفاظ ملف JSON
تتبع الألفاظ النموذجية تنسيقا محددا.
حقل textيحتوي على نص لأمثلة من الكلمات. يجب أن يتوافق حقل intentName مع اسم هدف موجود في تطبيق LUIS. حقل 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اضغط على Enter في كل مطالبة لقبول الإعدادات الافتراضية.
قم بتثبيت الوحدة النمطية للطلب والوعد عن طريق إدخال الأمر التالي:
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 . يتوفر معرّف التطبيق في قسم الإدارة نفسه، في صفحة إعدادات التطبيق.
في موجه الأوامر، أدخل الأمر التالي لتشغيل المشروع:
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
تنظيف الموارد
عند الانتهاء من هذه البداية السريعة، حذف مجلد المشروع من نظام الملفات.
الخطوات التالية
المتطلبات الأساسية
- بايثون 3.6 أو في وقت لاحق.
- تعليمة Visual Studio برمجية
مثال على الألفاظ ملف JSON
تتبع الألفاظ النموذجية تنسيقا محددا.
حقل textيحتوي على نص لأمثلة من الكلمات. يجب أن يتوافق حقل intentName مع اسم هدف موجود في تطبيق LUIS. حقل 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-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.
- في مربع الحوار Import new app حدد الزر Choose File.
- حدد الملف
pizza-app-for-luis.json الذي قمت بتنزيله، ثم حدد Open. - في مربع الحوار Import new app ضمن الحقل Name، أدخل اسمًا لتطبيق Pizza، ثم حدد الزر Done.
سيتم استيراد التطبيق.
إذا رأيت مربع الحوار كيفية إنشاء تطبيق LUIS فعال، فأغلق مربع الحوار.
التدريب على تطبيق Pizza ونشره
يجب أن تشاهد صفحة Intents التي تتضمن قائمة بالأهداف في تطبيق Pizza.
في الجانب العلوي الأيمن من موقع LUIS، حدد الزر "Train" .

يكتمل التدريب عند تعطيل الزر "قطار ".
لتلقي تنبؤ LUIS في روبوت دردشة أو تطبيقات عميل أخرى ، تحتاج إلى نشر التطبيق على نقطة نهاية التنبؤ.
حدد نشر في شريط التنقل العلوي الأيمن.

حدد فتحة الإنتاج، ثم حدد تم.

حدد الوصول إلى عناوين URL لنقطة النهاية في الإخطار للانتقال إلى صفحة Azure Resources. لن تتمكن من رؤية عناوين URL إلا إذا كان لديك مورد تنبؤ مقترن بالتطبيق. يمكنك أيضًا الاطلاع على صفحة موارد Azure بالنقر فوق إدارة.

أضف مورد تأليف إلى تطبيق Pizza
- حدد MANAGE.
- حدد «Azure resources».
- حدد Authoring Resource.
- حدد Change authoring resource.
إذا كان لديك مورد تأليف، فأدخل Tenant Name، وSubscription Name، وLUIS resource name لمورد التأليف لديك.
إذا لم يكن لديك مورد التأليف:
- فحدد Create new resource.
- أدخل Tenant Name، وResource Name، وK Subscription NameوAzureResource Group Name.
تطبيق Pizza الخاص بك جاهز الآن للاستخدام.
تسجيل قيم الوصول لتطبيق Pizza
لاستخدام تطبيق Pizza الجديد، ستحتاج إلى معرف التطبيق، ومفتاح التأليف، ونقطة نهاية التأليف لتطبيق Pizza. للحصول على التوقعات، ستحتاج إلى نقطة نهاية توقع منفصلة، ومفتاح توقع منفصل.
للعثور على هذه القيم:
- من صفحة Intents، حدد MANAGE.
- من صفحة Application Settings، سجل App ID.
- حدد «Azure resources».
- حدد Authoring Resource.
- من علامات التبويب Authoring Resource، وPrediction، سجل Primary Key. تمثل هذه القيمة مفتاح التأليف لديك.
- سجّل Endpoint 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 . يتوفر معرّف التطبيق في قسم الإدارة نفسه، في صفحة إعدادات التطبيق.
باستخدام موجه الأوامر في نفس الدليل الذي قمت بإنشاء الملف فيه، أدخل الأمر التالي لتشغيل الملف:
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' } } ]
تنظيف الموارد
عند الانتهاء من هذا التشغيل السريع، احذف الملف من نظام الملفات.