Hızlı Başlangıç: Language Understanding (LUIS) istemci kitaplıkları ve REST API

Önemli

LUIS 1 Ekim 2025'te kullanımdan kaldırılacak ve 1 Nisan 2023'den itibaren yeni LUIS kaynakları oluşturamayacaksınız. Devam eden ürün desteği ve çok dilli özelliklerden yararlanmak için LUIS uygulamalarınızıkonuşma dili anlayışına geçirmenizi öneririz.

C#, Python veya JavaScript kullanarak bu hızlı başlangıç ile LUIS SDK istemci kitaplıklarıyla bir Azure LUIS yapay zeka (AI) uygulaması oluşturun ve sorgular. Rest API kullanarak istek göndermek için cURL de kullanabilirsiniz.

Language Understanding (LUIS), genel anlamı tahmin etmek ve ilgili, ayrıntılı bilgileri çekmek için kullanıcının konuşma metnine doğal dil işleme (NLP) uygulamanızı sağlar.

  • Yazma istemci kitaplığı ve REST API, LUIS uygulamanızı oluşturmanıza, düzenlemenize, eğitebilmenize ve yayımlamanıza olanak tanır.
  • Tahmin çalışma zamanı istemci kitaplığı ve REST API yayımlanan uygulamayı sorgulamanıza olanak tanır.

.NET için Language Understanding (LUIS) istemci kitaplıklarını kullanarak:

  • Uygulama oluşturun
  • Örnek bir konuşmayla makine tarafından öğrenilen bir varlık olan bir amaç ekleme
  • Uygulamayı eğit ve yayımla
  • Sorgu tahmini çalışma zamanı

Başvuru belgeleri | Yazma ve Tahmin Kitaplığı kaynak kodu | Yazma ve Tahmin NuGet | C# Örneği

Önkoşullar

Ayarlama

Yeni bir C# uygulaması oluşturma

Tercih ettiğiniz düzenleyicide veya IDE'de yeni bir .NET Core uygulaması oluşturun.

  1. Bir konsol penceresinde (cmd, PowerShell veya Bash gibi), adlı language-understanding-quickstartyeni bir konsol uygulaması oluşturmak için dotnet new komutunu kullanın. Bu komut, tek bir kaynak dosyasıyla basit bir "Merhaba Dünya" C# projesi oluşturur: Program.cs.

    dotnet new console -n language-understanding-quickstart
    
  2. Dizininizi yeni oluşturulan uygulama klasörüyle değiştirin.

    cd language-understanding-quickstart
    
  3. Uygulamayı şu şekilde oluşturabilirsiniz:

    dotnet build
    

    Derleme çıkışı hiçbir uyarı veya hata içermemelidir.

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

NuGet kitaplıklarını yükleme

Uygulama dizininde aşağıdaki komutlarla .NET için Language Understanding (LUIS) istemci kitaplıklarını yükleyin:

dotnet add package Microsoft.Azure.CognitiveServices.Language.LUIS.Authoring --version 3.2.0-preview.3
dotnet add package Microsoft.Azure.CognitiveServices.Language.LUIS.Runtime --version 3.1.0-preview.1

Nesne Modeli Yazma

Language Understanding (LUIS) yazma istemcisi, yazma anahtarınızı içeren Azure'da kimlik doğrulaması yapan bir LUISAuthoringClient nesnesidir.

Yazma için kod örnekleri

İstemci oluşturulduktan sonra aşağıdaki işlevlere erişmek için bu istemciyi kullanın:

Tahmin Nesnesi modeli

Language Understanding (LUIS) tahmin çalışma zamanı istemcisi, kaynak anahtarınızı içeren Azure'da kimlik doğrulaması yapan bir LUISRuntimeClient nesnesidir.

Tahmin çalışma zamanı için kod örnekleri

İstemci oluşturulduktan sonra aşağıdaki işlevlere erişmek için bu istemciyi kullanın:

  • Hazırlama veya üretim yuvasına göre tahmin
  • Sürüme göre tahmin

Kod örnekleri

Bu kod parçacıkları, python için Language Understanding (LUIS) istemci kitaplığıyla aşağıdakileri nasıl yapacağınızı gösterir:

Bağımlılıkları ekleme

Proje dizininden Program.cs dosyasını tercih ettiğiniz düzenleyicide veya IDE'de açın. Mevcut using kodu aşağıdaki using yönergelerle değiştirin:

using System;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.Azure.CognitiveServices.Language.LUIS.Authoring;
using Microsoft.Azure.CognitiveServices.Language.LUIS.Authoring.Models;
using Microsoft.Azure.CognitiveServices.Language.LUIS.Runtime;
using Microsoft.Azure.CognitiveServices.Language.LUIS.Runtime.Models;
using Newtonsoft.Json;

Ortak kod ekleme

  1. Zaman uyumsuz çağrılara izin vermek için yönteminin imzasını Main değiştirin:

    public static async Task Main()
    
  2. Aksi belirtilmedikçe kodun Main geri kalanını sınıfının yöntemine Program ekleyin.

Uygulama için değişkenler oluşturma

İki değişken kümesi oluşturun: değiştirdiğiniz ilk küme, ikinci küme kod örneğinde göründükleri gibi ayrılır.

Önemli

İşiniz bittiğinde anahtarı kodunuzdan kaldırmayı unutmayın ve asla herkese açık olarak göndermeyin. Üretim için Azure Key Vault gibi kimlik bilgilerinizi depolamanın ve bunlara erişmenin güvenli bir yolunu kullanın. Daha fazla bilgi için Azure AI hizmetleri güvenlik makalesine bakın.

  1. Yazma anahtarınızı ve kaynak adlarınızı tutmak için değişkenler oluşturun.

    var key = "PASTE_YOUR_LUIS_AUTHORING_SUBSCRIPTION_KEY_HERE";
    
    var authoringEndpoint = "PASTE_YOUR_LUIS_AUTHORING_ENDPOINT_HERE";
    var predictionEndpoint = "PASTE_YOUR_LUIS_PREDICTION_ENDPOINT_HERE";
    
  2. Uç noktalarınızı, uygulama adınızı, sürümünüzü ve amaç adınızı barındıracak değişkenler oluşturun.

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

İstemcinin kimliğini doğrulama

Anahtarınız ile bir ApiKeyServiceClientCredentials nesnesi oluşturun ve bunu uç noktanızla birlikte kullanarak bir LUISAuthoringClient nesnesi oluşturun.

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

LUIS uygulaması oluşturma

LUIS uygulaması amaçlar, varlıklar ve örnek konuşmalar dahil olmak üzere doğal dil işleme (NLP) modelini içerir.

ApplicationCreateObject oluşturun. Ad ve dil kültürü gerekli özelliklerdir. Apps.AddAsync yöntemini çağırın. Yanıt, uygulama kimliğidir.

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

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

Uygulama için amaç oluşturma

Luis uygulamasının modelindeki birincil nesne amaçtır. Amaç, kullanıcı konuşma amaçlarının gruplanmasıyla hizalanır. Kullanıcı bir soru sorabilir veya bottan (veya başka bir istemci uygulamasından) belirli bir hedeflenen yanıtı arayan bir bildirimde bulunabilir. Amaçlara örnek olarak uçuş rezervasyonu yapma, varış şehrindeki hava durumu hakkında bilgi isteme ve müşteri hizmetleri için iletişim bilgilerini sorma verilebilir.

Benzersiz amacın adıyla bir ModelCreateObject oluşturun, ardından uygulama kimliğini, sürüm kimliğini ve ModelCreateObject'i Model.AddIntentAsync yöntemine geçirin. Yanıt, amaç kimliğidir.

intentName Değer, Uygulama için değişken oluşturma bölümündeki değişkenlerin bir parçası olarak sabit olarak kodlanırOrderPizzaIntent.

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

Uygulama için varlık oluşturma

Varlıklar gerekli olmasa da çoğu uygulamada bulunur. Varlık, kullanıcının amacını tam olarak yerine getirmek için gereken bilgileri kullanıcı konuşmasından ayıklar. Her biri kendi veri dönüştürme nesnesi (DTO) modellerine sahip çeşitli önceden oluşturulmuş ve özel varlık türleri vardır. Uygulamanıza eklenecek yaygın önceden oluşturulmuş varlıklar arasında number, datetimeV2, geographyV2, ordinal bulunur.

Varlıkların bir amaç ile işaretlenmediğini bilmek önemlidir. Bu kişiler çoğu amaç için geçerli olabilir ve genellikle geçerlidir. Yalnızca örnek kullanıcı konuşmaları belirli, tek bir amaç için işaretlenir.

Varlıklar için oluşturma yöntemleri Model sınıfının bir parçasıdır. Her varlık türünün, genellikle Modeller ad alanında sözcüğü modeliçeren kendi veri dönüştürme nesnesi (DTO) modeli vardır.

Varlık oluşturma kodu, alt varlıklara ve alt varlıklara uygulanan özelliklere sahip bir makine öğrenmesi Quantity varlığı oluşturur.

Oluşturulan varlığı, 'Quantity' alt varlıklarına uygulanan alt varlıkları ve özellikleri içeren bir makine öğrenmesi varlığını gösteren portaldan alınan kısmi ekran görüntüsü.

// Add Prebuilt entity
await client.Model.AddPrebuiltAsync(appId, versionId, new[] { "number" });

// Define ml entity with children and grandchildren
var mlEntityDefinition = new EntityModelCreateObject
{
    Name = "Pizza order",
    Children = new[]
    {
        new ChildEntityModelCreateObject
        {
            Name = "Pizza",
            Children = new[]
            {
                new ChildEntityModelCreateObject { Name = "Quantity" },
                new ChildEntityModelCreateObject { Name = "Type" },
                new ChildEntityModelCreateObject { Name = "Size" }
            }
        },
        new ChildEntityModelCreateObject
        {
            Name = "Toppings",
            Children = new[]
            {
                new ChildEntityModelCreateObject { Name = "Type" },
                new ChildEntityModelCreateObject { Name = "Quantity" }
            }
        }
    }
};

// Add ML entity 
var mlEntityId = await client.Model.AddEntityAsync(appId, versionId, mlEntityDefinition); ;

// Add phraselist feature
var phraselistId = await client.Features.AddPhraseListAsync(appId, versionId, new PhraselistCreateObject
{
    EnabledForAllModels = false,
    IsExchangeable = true,
    Name = "QuantityPhraselist",
    Phrases = "few,more,extra"
});

// Get entity and subentities
var model = await client.Model.GetEntityAsync(appId, versionId, mlEntityId);
var toppingQuantityId = GetModelGrandchild(model, "Toppings", "Quantity");
var pizzaQuantityId = GetModelGrandchild(model, "Pizza", "Quantity");

// add model as feature to subentity model
await client.Features.AddEntityFeatureAsync(appId, versionId, pizzaQuantityId, new ModelFeatureInformation { ModelName = "number", IsRequired = true });
await client.Features.AddEntityFeatureAsync(appId, versionId, toppingQuantityId, new ModelFeatureInformation { ModelName = "number"});

// add phrase list as feature to subentity model
await client.Features.AddEntityFeatureAsync(appId, versionId, toppingQuantityId, new ModelFeatureInformation { FeatureName = "QuantityPhraselist" });

Özellikleri bu alt varlığa atamak için Quantity alt öğesinin kimliğini bulmak için sınıfına aşağıdaki yöntemi kullanın.

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

Amaca örnek konuşma ekleme

Bir konuşmanın amacını belirlemek ve varlıkları ayıklamak için uygulamanın konuşma örneklerine ihtiyacı vardır. Örneklerin belirli, tek bir amacı hedeflemesi ve tüm özel varlıkları işaretlemesi gerekir. Önceden oluşturulmuş varlıkların işaretlenmesi gerekmez.

Her örnek konuşma için bir nesne olan ExampleLabelObject nesnelerinin listesini oluşturarak örnek konuşmalar ekleyin. Her örnek, tüm varlıkları varlık adı ve varlık değeri ad/değer çiftleri sözlüğüyle işaretlemelidir. Varlık değeri, örnek konuşmanın metninde göründüğü gibi olmalıdır.

Portalda etiketlenmiş örnek ifadeyi gösteren kısmi ekran görüntüsü.

Uygulama kimliği, sürüm kimliği ve örnekle Examples.AddAsync'i çağırın.

// Define labeled example
var labeledExampleUtteranceWithMLEntity = new ExampleLabelObject
{
    Text = "I want two small seafood pizzas with extra cheese.",
    IntentName = intentName,
    EntityLabels = new[]
    {
        new EntityLabelObject
        {
            StartCharIndex = 7,
            EndCharIndex = 48,
            EntityName = "Pizza order",
            Children = new[]
            {
                new EntityLabelObject
                {
                    StartCharIndex = 7,
                    EndCharIndex = 30,
                    EntityName = "Pizza",
                    Children = new[]
                    {
                        new EntityLabelObject { StartCharIndex = 7, EndCharIndex = 9, EntityName = "Quantity" },
                        new EntityLabelObject { StartCharIndex = 11, EndCharIndex = 15, EntityName = "Size" },
                        new EntityLabelObject { StartCharIndex = 17, EndCharIndex = 23, EntityName = "Type" }
                    }
                },
                new EntityLabelObject
                {
                    StartCharIndex = 37,
                    EndCharIndex = 48,
                    EntityName = "Toppings",
                    Children = new[]
                    {
                        new EntityLabelObject { StartCharIndex = 37, EndCharIndex = 41, EntityName = "Quantity" },
                        new EntityLabelObject { StartCharIndex = 43, EndCharIndex = 48, EntityName = "Type" }
                    }
                }
            }
        },
    }
};

// Add an example for the entity.
// Enable nested children to allow using multiple models with the same name.
// The quantity subentity and the phraselist could have the same exact name if this is set to True
await client.Examples.AddAsync(appId, versionId, labeledExampleUtteranceWithMLEntity, enableNestedChildren: true); 

Uygulamayı eğitme

Model oluşturulduktan sonra LUIS uygulamasının modelin bu sürümü için eğitilmesi gerekir. Eğitilmiş model kapsayıcıda kullanılabilir veya hazırlama veya ürün yuvalarında yayımlanabilir.

Train.TrainVersionAsync yöntemi için uygulama kimliği ve sürüm kimliği gerekir.

Bu hızlı başlangıç gösterileri gibi çok küçük bir model çok hızlı bir şekilde eğitilecektir. Üretim düzeyindeki uygulamalar için eğitim, eğitimin ne zaman başarılı olduğunu veya başarılı olup olmadığını belirlemek için GetStatusAsync yöntemine yönelik bir yoklama çağrısı içermelidir. Yanıt, her nesne için ayrı bir duruma sahip ModelTrainingInfo nesnelerinin listesidir. Eğitimin tamamlandı olarak kabul edilmesi için tüm nesnelerin başarılı olması gerekir.

await client.Train.TrainVersionAsync(appId, versionId);
while (true)
{
    var status = await client.Train.GetStatusAsync(appId, versionId);
    if (status.All(m => m.Details.Status == "Success"))
    {
        // Assumes that we never fail, and that eventually we'll always succeed.
        break;
    }
}

Uygulamayı üretim yuvasında yayımlama

PublishAsync yöntemini kullanarak LUIS uygulamasını yayımlayın. Bu, geçerli eğitilmiş sürümü uç noktada belirtilen yuvaya yayımlar. İstemci uygulamanız, amaç ve varlık ayıklama tahmini için kullanıcı konuşmaları göndermek için bu uç noktayı kullanır.

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

Tahmin çalışma zamanı istemcisinin kimliğini doğrulama

Anahtarınızla bir ApiKeyServiceClientCredentials nesnesi kullanın ve bunu uç noktanızla birlikte kullanarak bir LUISRuntimeClient nesnesi oluşturun.

Dikkat

Bu hızlı başlangıçta çalışma zamanı kimlik bilgilerinin bir parçası olarak yazma anahtarı kullanılır. Yazma anahtarının çalışma zamanını birkaç sorguyla sorgulamasına izin verilir. Hazırlama ve üretim düzeyi kodu için yazma anahtarını tahmin çalışma zamanı anahtarıyla değiştirin.

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

Çalışma zamanından tahmin alma

İsteği tahmin çalışma zamanına oluşturmak için aşağıdaki kodu ekleyin.

Kullanıcı ifadesi PredictionRequest nesnesinin bir parçasıdır.

GetSlotPredictionAsync yöntemi, isteği karşılamak için uygulama kimliği, yuva adı, tahmin isteği nesnesi gibi çeşitli parametrelere ihtiyaç duyar. Ayrıntılı, tüm amaçları göster ve günlük gibi diğer seçenekler isteğe bağlıdır.

// Production == slot name
var request = new PredictionRequest { Query = "I want two small pepperoni pizzas with more salsa" };
var prediction = await runtimeClient.Prediction.GetSlotPredictionAsync(appId, "Production", request);
Console.Write(JsonConvert.SerializeObject(prediction, Formatting.Indented));

Tahmin yanıtı, amacı ve bulunan varlıkları içeren bir JSON nesnesidir.

{
    "query": "I want two small pepperoni pizzas with more salsa",
    "prediction": {
        "topIntent": "OrderPizzaIntent",
        "intents": {
            "OrderPizzaIntent": {
                "score": 0.753606856
            },
            "None": {
                "score": 0.119097039
            }
        },
        "entities": {
            "Pizza order": [
                {
                    "Pizza": [
                        {
                            "Quantity": [
                                2
                            ],
                            "Type": [
                                "pepperoni"
                            ],
                            "Size": [
                                "small"
                            ],
                            "$instance": {
                                "Quantity": [
                                    {
                                        "type": "builtin.number",
                                        "text": "two",
                                        "startIndex": 7,
                                        "length": 3,
                                        "score": 0.968156934,
                                        "modelTypeId": 1,
                                        "modelType": "Entity Extractor",
                                        "recognitionSources": [
                                            "model"
                                        ]
                                    }
                                ],
                                "Type": [
                                    {
                                        "type": "Type",
                                        "text": "pepperoni",
                                        "startIndex": 17,
                                        "length": 9,
                                        "score": 0.9345611,
                                        "modelTypeId": 1,
                                        "modelType": "Entity Extractor",
                                        "recognitionSources": [
                                            "model"
                                        ]
                                    }
                                ],
                                "Size": [
                                    {
                                        "type": "Size",
                                        "text": "small",
                                        "startIndex": 11,
                                        "length": 5,
                                        "score": 0.9592077,
                                        "modelTypeId": 1,
                                        "modelType": "Entity Extractor",
                                        "recognitionSources": [
                                            "model"
                                        ]
                                    }
                                ]
                            }
                        }
                    ],
                    "Toppings": [
                        {
                            "Type": [
                                "salsa"
                            ],
                            "Quantity": [
                                "more"
                            ],
                            "$instance": {
                                "Type": [
                                    {
                                        "type": "Type",
                                        "text": "salsa",
                                        "startIndex": 44,
                                        "length": 5,
                                        "score": 0.7292897,
                                        "modelTypeId": 1,
                                        "modelType": "Entity Extractor",
                                        "recognitionSources": [
                                            "model"
                                        ]
                                    }
                                ],
                                "Quantity": [
                                    {
                                        "type": "Quantity",
                                        "text": "more",
                                        "startIndex": 39,
                                        "length": 4,
                                        "score": 0.9320932,
                                        "modelTypeId": 1,
                                        "modelType": "Entity Extractor",
                                        "recognitionSources": [
                                            "model"
                                        ]
                                    }
                                ]
                            }
                        }
                    ],
                    "$instance": {
                        "Pizza": [
                            {
                                "type": "Pizza",
                                "text": "two small pepperoni pizzas",
                                "startIndex": 7,
                                "length": 26,
                                "score": 0.812199831,
                                "modelTypeId": 1,
                                "modelType": "Entity Extractor",
                                "recognitionSources": [
                                    "model"
                                ]
                            }
                        ],
                        "Toppings": [
                            {
                                "type": "Toppings",
                                "text": "more salsa",
                                "startIndex": 39,
                                "length": 10,
                                "score": 0.7250252,
                                "modelTypeId": 1,
                                "modelType": "Entity Extractor",
                                "recognitionSources": [
                                    "model"
                                ]
                            }
                        ]
                    }
                }
            ],
            "$instance": {
                "Pizza order": [
                    {
                        "type": "Pizza order",
                        "text": "two small pepperoni pizzas with more salsa",
                        "startIndex": 7,
                        "length": 42,
                        "score": 0.769223332,
                        "modelTypeId": 1,
                        "modelType": "Entity Extractor",
                        "recognitionSources": [
                            "model"
                        ]
                    }
                ]
            }
        }
    }
}

Uygulamayı çalıştırma

Uygulamayı uygulama dizininizdeki komutuyla dotnet run çalıştırın.

dotnet run

Node.js için Language Understanding (LUIS) istemci kitaplıklarını kullanarak:

  • Uygulama oluşturun
  • Örnek bir konuşmayla makine tarafından öğrenilen bir varlık olan bir amaç ekleme
  • Uygulamayı eğit ve yayımla
  • Sorgu tahmini çalışma zamanı

Başvuru belgeleri | Yazma ve Tahmin NPM | Örnekleri

Önkoşullar

  • Node.js
  • Azure aboneliği - Ücretsiz olarak oluşturun
  • Azure aboneliğinizi aldıktan sonra anahtarınızı ve uç noktanızı almak için Azure portalında bir Language Understanding yazma kaynağı oluşturun. Dağıtmasını bekleyin ve Kaynağa git düğmesine tıklayın.
    • Uygulamanızı Language Understanding yazmasına bağlamak için oluşturduğunuz kaynaktan anahtara ve uç noktaya ihtiyacınız olacaktır. Anahtarınızı ve uç noktanızı hızlı başlangıcın ilerleyen bölümlerinde aşağıdaki koda yapıştıracaksınız. Hizmeti denemek için ücretsiz fiyatlandırma katmanını (F0) kullanabilirsiniz.

Ayarlama

Yeni javascript uygulaması oluşturma

  1. Konsol penceresinde uygulamanız için yeni bir dizin oluşturun ve bu dizine geçin.

    mkdir quickstart-sdk && cd quickstart-sdk
    
  2. Bir dosya oluşturarak package.json dizini JavaScript uygulaması olarak başlatın.

    npm init -y
    
  3. JavaScript kodunuz için adlı index.js bir dosya oluşturun.

    touch index.js
    

NPM kitaplıklarını yükleme

Uygulama dizininde bağımlılıkları aşağıdaki komutlarla yükleyin ve her seferinde bir satır yürütür:

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

Aşağıdaki package.json gibi görünmelidir:

{
  "name": "quickstart-sdk",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@azure/cognitiveservices-luis-authoring": "^4.0.0-preview.3",
    "@azure/cognitiveservices-luis-runtime": "^5.0.0",
    "@azure/ms-rest-js": "^2.0.8"
  }
}

Nesne Modeli Yazma

Language Understanding (LUIS) yazma istemcisi, yazma anahtarınızı içeren Azure'da kimlik doğrulaması yapan bir LUISAuthoringClient nesnesidir.

Yazma için kod örnekleri

İstemci oluşturulduktan sonra aşağıdaki işlevlere erişmek için bu istemciyi kullanın:

Tahmin Nesnesi modeli

Language Understanding (LUIS) yazma istemcisi, yazma anahtarınızı içeren Azure'da kimlik doğrulaması yapan bir LUISAuthoringClient nesnesidir.

Tahmin çalışma zamanı için kod örnekleri

İstemci oluşturulduktan sonra aşağıdaki işlevlere erişmek için bu istemciyi kullanın:

Kod örnekleri

Bu kod parçacıkları, python için Language Understanding (LUIS) istemci kitaplığıyla aşağıdakileri nasıl yapacağınızı gösterir:

Bağımlılıkları ekleme

index.js Dosyayı tercih ettiğiniz düzenleyicide veya adlı IDE'de açın ve aşağıdaki bağımlılıkları ekleyin.

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

Ortak kod ekleme

  1. quickstart yöntemini ve çağrısını ekleyin. Bu yöntem, kalan kodun çoğunu tutar. Bu yöntem dosyanın sonunda çağrılır.

    const quickstart = async () => {
    
        // add calls here
    
    
    }
    quickstart()
        .then(result => console.log("Done"))
        .catch(err => {
            console.log(`Error: ${err}`)
            })
    
  2. Aksi belirtilmedikçe kalan kodu hızlı başlangıç yöntemine ekleyin.

Uygulama için değişkenler oluşturma

İki değişken kümesi oluşturun: değiştirdiğiniz ilk küme, ikinci küme kod örneğinde göründükleri gibi ayrılır.

Önemli

İşiniz bittiğinde anahtarı kodunuzdan kaldırmayı unutmayın ve asla herkese açık olarak göndermeyin. Üretim için Azure Key Vault gibi kimlik bilgilerinizi depolamanın ve bunlara erişmenin güvenli bir yolunu kullanın. Daha fazla bilgi için Azure AI hizmetleri güvenlik makalesine bakın.

  1. Yazma anahtarınızı ve kaynak adlarınızı tutmak için değişkenler oluşturun.

    const authoringKey = 'PASTE_YOUR_LUIS_AUTHORING_SUBSCRIPTION_KEY_HERE';
    
    const authoringEndpoint = "PASTE_YOUR_LUIS_AUTHORING_ENDPOINT_HERE";
    const predictionEndpoint = "PASTE_YOUR_LUIS_PREDICTION_ENDPOINT_HERE";
    
  2. Uç noktalarınızı, uygulama adınızı, sürümünüzü ve amaç adınızı barındıracak değişkenler oluşturun.

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

İstemcinin kimliğini doğrulama

Anahtarınız ile bir CognitiveServicesCredentials nesnesi oluşturun ve bunu uç noktanızla birlikte kullanarak bir LUISAuthoringClient nesnesi oluşturun.

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

LUIS uygulaması oluşturma

LUIS uygulaması amaçlar, varlıklar ve örnek konuşmalar dahil olmak üzere doğal dil işleme (NLP) modelini içerir.

Uygulamayı oluşturmak için bir AppsOperation nesnesinin ekleme yöntemini oluşturun. Ad ve dil kültürü gerekli özelliklerdir.

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

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

const appId = createAppResult.body

Uygulama için amaç oluşturma

Luis uygulamasının modelindeki birincil nesne amaçtır. Amaç, kullanıcı konuşma amaçlarının bir gruplamasıyla uyumlu hale geliyor. Kullanıcı bir soru sorabilir veya bottan (veya başka bir istemci uygulamasından) belirli bir hedeflenen yanıtı arayan bir bildirimde bulunabilir. Amaçlara örnek olarak uçuş rezervasyonu yapma, varış şehrindeki hava durumu hakkında bilgi isteme ve müşteri hizmetleri için iletişim bilgilerini sorma verilebilir.

Benzersiz amacın adıyla model.add_intent yöntemini kullanın, ardından uygulama kimliğini, sürüm kimliğini ve yeni amaç adını geçirin.

intentName Değer, Uygulama için değişken oluşturma bölümündeki değişkenlerin bir parçası olarak sabit olarak kodlanırOrderPizzaIntent.

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

Uygulama için varlık oluşturma

Varlıklar gerekli olmasa da çoğu uygulamada bulunur. Varlık, kullanıcının amacını tam olarak yerine getirmek için gereken bilgileri kullanıcı konuşmasından ayıklar. Her biri kendi veri dönüştürme nesnesi (DTO) modellerine sahip çeşitli önceden oluşturulmuş ve özel varlık türleri vardır. Uygulamanıza eklenecek yaygın önceden oluşturulmuş varlıklar arasında number, datetimeV2, geographyV2, ordinal bulunur.

Varlıkların bir amaç ile işaretlenmediğini bilmek önemlidir. Bu kişiler çoğu amaç için geçerli olabilir ve genellikle geçerlidir. Yalnızca örnek kullanıcı konuşmaları belirli, tek bir amaç için işaretlenir.

Varlıklar için oluşturma yöntemleri Model sınıfının bir parçasıdır. Her varlık türünün kendi veri dönüştürme nesnesi (DTO) modeli vardır.

Varlık oluşturma kodu, alt varlıklara ve alt varlıklara uygulanan özelliklere sahip bir makine öğrenmesi Quantity varlığı oluşturur.

Oluşturulan varlığı, 'Quantity' alt varlıklarına uygulanan alt varlıkları ve özellikleri içeren bir makine öğrenmesi varlığını gösteren portaldan alınan kısmi ekran görüntüsü.

// Add Prebuilt entity
await client.model.addPrebuilt(appId, versionId, ["number"]);

// Define ml entity with children and grandchildren
const mlEntityDefinition = {
    name: "Pizza order",
    children: [
        {
            name: "Pizza",
            children: [
                { name: "Quantity" },
                { name: "Type" },
                { name: "Size" }
            ]
        },
        {
            name: "Toppings",
            children: [
                { name: "Type" },
                { name: "Quantity" }
            ]
        }
    ]
};

// Add ML entity 
const response = await client.model.addEntity(appId, versionId, mlEntityDefinition);
const mlEntityId = response.body;

// Add phraselist feature
const phraselistResponse = await client.features.addPhraseList(appId, versionId, {
    enabledForAllModels: false,
    isExchangeable: true,
    name: "QuantityPhraselist",
    phrases: "few,more,extra"
});
const phraseListId = phraselistResponse.body;

// Get entity and subentities
const model = await client.model.getEntity(appId, versionId, mlEntityId);
const toppingQuantityId = getModelGrandchild(model, "Toppings", "Quantity");
const pizzaQuantityId = getModelGrandchild(model, "Pizza", "Quantity");

// add model as feature to subentity model
await client.features.addEntityFeature(appId, versionId, pizzaQuantityId, { modelName: "number", isRequired: true });
await client.features.addEntityFeature(appId, versionId, toppingQuantityId, { modelName: "number" });

// add phrase list as feature to subentity model
await client.features.addEntityFeature(appId, versionId, toppingQuantityId, { featureName: "QuantityPhraselist" });

Özellikleri bu alt varlığa atamak için Quantity alt öğesinin kimliğini bulmak için yönteminin üstüne quickstart aşağıdaki yöntemi koyun.

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

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

}

Amaca örnek konuşma ekleme

Bir konuşmanın amacını belirlemek ve varlıkları ayıklamak için uygulamanın konuşma örneklerine ihtiyacı vardır. Örneklerin belirli, tek bir amacı hedeflemesi ve tüm özel varlıkları işaretlemesi gerekir. Önceden oluşturulmuş varlıkların işaretlenmesi gerekmez.

Her örnek konuşma için bir nesne olan ExampleLabelObject nesnelerinin listesini oluşturarak örnek konuşmalar ekleyin. Her örnek, tüm varlıkları varlık adı ve varlık değeri ad/değer çiftleri sözlüğüyle işaretlemelidir. Varlık değeri, örnek konuşmanın metninde göründüğü gibi olmalıdır.

Portalda etiketlenmiş örnek ifadeyi gösteren kısmi ekran görüntüsü.

Arama örnekleri.uygulama kimliği, sürüm kimliği ve örnekle birlikte ekleyin .

// Define labeled example
const labeledExampleUtteranceWithMLEntity =
{
    text: "I want two small seafood pizzas with extra cheese.",
    intentName: intentName,
    entityLabels: [
        {
            startCharIndex: 7,
            endCharIndex: 48,
            entityName: "Pizza order",
            children: [
                {
                    startCharIndex: 7,
                    endCharIndex: 30,
                    entityName: "Pizza",
                    children: [
                        {
                            startCharIndex: 7,
                            endCharIndex: 9,
                            entityName: "Quantity"
                        },
                        {
                            startCharIndex: 11,
                            endCharIndex: 15,
                            entityName: "Size"
                        },
                        {
                            startCharIndex: 17,
                            endCharIndex: 23,
                            entityName: "Type"
                        }]
                },
                {
                    startCharIndex: 37,
                    endCharIndex: 48,
                    entityName: "Toppings",
                    children: [
                        {
                            startCharIndex: 37,
                            endCharIndex: 41,
                            entityName: "Quantity"
                        },
                        {
                            startCharIndex: 43,
                            endCharIndex: 48,
                            entityName: "Type"
                        }]
                }
            ]
        }
    ]
};

console.log("Labeled Example Utterance:", JSON.stringify(labeledExampleUtteranceWithMLEntity, null, 4 ));

// Add an example for the entity.
// Enable nested children to allow using multiple models with the same name.
// The quantity subentity and the phraselist could have the same exact name if this is set to True
await client.examples.add(appId, versionId, labeledExampleUtteranceWithMLEntity, { enableNestedChildren: true });

Uygulamayı eğitme

Model oluşturulduktan sonra LUIS uygulamasının modelin bu sürümü için eğitilmesi gerekir. Eğitilmiş model kapsayıcıda kullanılabilir veya hazırlama veya ürün yuvalarında yayımlanabilir.

train.trainVersion yöntemi için uygulama kimliği ve sürüm kimliği gerekir.

Bu hızlı başlangıç gösterileri gibi çok küçük bir model çok hızlı bir şekilde eğitilecektir. Üretim düzeyindeki uygulamalarda eğitim, eğitimin ne zaman başarılı olduğunu veya başarılı olup olmadığını belirlemek için get_status yöntemine yönelik bir yoklama çağrısı içermelidir. Yanıt, her nesne için ayrı bir duruma sahip ModelTrainingInfo nesnelerinin listesidir. Eğitimin tamamlandı olarak kabul edilmesi için tüm nesnelerin başarılı olması gerekir.

await client.train.trainVersion(appId, versionId);
while (true) {
    const status = await client.train.getStatus(appId, versionId);
    if (status.every(m => m.details.status == "Success")) {
        // Assumes that we never fail, and that eventually we'll always succeed.
        break;
    }
}

Uygulamayı üretim yuvasında yayımlama

app.publish yöntemini kullanarak LUIS uygulamasını yayımlayın . Bu, geçerli eğitilmiş sürümü uç noktada belirtilen yuvaya yayımlar. İstemci uygulamanız, amaç ve varlık ayıklama tahmini için kullanıcı konuşmaları göndermek için bu uç noktayı kullanır.

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

Tahmin çalışma zamanı istemcisinin kimliğini doğrulama

Anahtarınızla bir msRest.ApiKeyCredentials nesnesi kullanın ve bunu uç noktanızla birlikte kullanarak luis oluşturun. LUISRuntimeClient nesnesi.

Dikkat

Bu hızlı başlangıçta çalışma zamanı kimlik bilgilerinin bir parçası olarak yazma anahtarı kullanılır. Yazma anahtarının çalışma zamanını birkaç sorguyla sorgulamasına izin verilir. Hazırlama ve üretim düzeyi kodu için yazma anahtarını tahmin çalışma zamanı anahtarıyla değiştirin.

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

Çalışma zamanından tahmin alma

İsteği tahmin çalışma zamanına oluşturmak için aşağıdaki kodu ekleyin. Kullanıcı ifadesi predictionRequest nesnesinin bir parçasıdır.

luisRuntimeClient.prediction.getSlotPrediction yöntemi, isteği karşılamak için uygulama kimliği, yuva adı ve tahmin isteği nesnesi gibi çeşitli parametrelere ihtiyaç duyar. Ayrıntılı, tüm amaçları göster ve günlük gibi diğer seçenekler isteğe bağlıdır.

// Production == slot name
const request = { query: "I want two small pepperoni pizzas with more salsa" };
const response = await luisPredictionClient.prediction.getSlotPrediction(appId, "Production", request);
console.log(JSON.stringify(response.prediction, null, 4 ));

Tahmin yanıtı, amacı ve bulunan varlıkları içeren bir JSON nesnesidir.

{
    "query": "I want two small pepperoni pizzas with more salsa",
    "prediction": {
        "topIntent": "OrderPizzaIntent",
        "intents": {
            "OrderPizzaIntent": {
                "score": 0.753606856
            },
            "None": {
                "score": 0.119097039
            }
        },
        "entities": {
            "Pizza order": [
                {
                    "Pizza": [
                        {
                            "Quantity": [
                                2
                            ],
                            "Type": [
                                "pepperoni"
                            ],
                            "Size": [
                                "small"
                            ],
                            "$instance": {
                                "Quantity": [
                                    {
                                        "type": "builtin.number",
                                        "text": "two",
                                        "startIndex": 7,
                                        "length": 3,
                                        "score": 0.968156934,
                                        "modelTypeId": 1,
                                        "modelType": "Entity Extractor",
                                        "recognitionSources": [
                                            "model"
                                        ]
                                    }
                                ],
                                "Type": [
                                    {
                                        "type": "Type",
                                        "text": "pepperoni",
                                        "startIndex": 17,
                                        "length": 9,
                                        "score": 0.9345611,
                                        "modelTypeId": 1,
                                        "modelType": "Entity Extractor",
                                        "recognitionSources": [
                                            "model"
                                        ]
                                    }
                                ],
                                "Size": [
                                    {
                                        "type": "Size",
                                        "text": "small",
                                        "startIndex": 11,
                                        "length": 5,
                                        "score": 0.9592077,
                                        "modelTypeId": 1,
                                        "modelType": "Entity Extractor",
                                        "recognitionSources": [
                                            "model"
                                        ]
                                    }
                                ]
                            }
                        }
                    ],
                    "Toppings": [
                        {
                            "Type": [
                                "salsa"
                            ],
                            "Quantity": [
                                "more"
                            ],
                            "$instance": {
                                "Type": [
                                    {
                                        "type": "Type",
                                        "text": "salsa",
                                        "startIndex": 44,
                                        "length": 5,
                                        "score": 0.7292897,
                                        "modelTypeId": 1,
                                        "modelType": "Entity Extractor",
                                        "recognitionSources": [
                                            "model"
                                        ]
                                    }
                                ],
                                "Quantity": [
                                    {
                                        "type": "Quantity",
                                        "text": "more",
                                        "startIndex": 39,
                                        "length": 4,
                                        "score": 0.9320932,
                                        "modelTypeId": 1,
                                        "modelType": "Entity Extractor",
                                        "recognitionSources": [
                                            "model"
                                        ]
                                    }
                                ]
                            }
                        }
                    ],
                    "$instance": {
                        "Pizza": [
                            {
                                "type": "Pizza",
                                "text": "two small pepperoni pizzas",
                                "startIndex": 7,
                                "length": 26,
                                "score": 0.812199831,
                                "modelTypeId": 1,
                                "modelType": "Entity Extractor",
                                "recognitionSources": [
                                    "model"
                                ]
                            }
                        ],
                        "Toppings": [
                            {
                                "type": "Toppings",
                                "text": "more salsa",
                                "startIndex": 39,
                                "length": 10,
                                "score": 0.7250252,
                                "modelTypeId": 1,
                                "modelType": "Entity Extractor",
                                "recognitionSources": [
                                    "model"
                                ]
                            }
                        ]
                    }
                }
            ],
            "$instance": {
                "Pizza order": [
                    {
                        "type": "Pizza order",
                        "text": "two small pepperoni pizzas with more salsa",
                        "startIndex": 7,
                        "length": 42,
                        "score": 0.769223332,
                        "modelTypeId": 1,
                        "modelType": "Entity Extractor",
                        "recognitionSources": [
                            "model"
                        ]
                    }
                ]
            }
        }
    }
}

Uygulamayı çalıştırma

Uygulamayı hızlı başlangıç dosyanızdaki node index.js komutuyla çalıştırın.

node index.js

Python için Language Understanding (LUIS) istemci kitaplıklarını kullanarak:

  • Uygulama oluşturun
  • Örnek bir konuşmayla makine tarafından öğrenilen bir varlık olan bir amaç ekleme
  • Uygulamayı eğit ve yayımla
  • Sorgu tahmini çalışma zamanı

Başvuru belgeleri | Yazma ve Tahmin Kitaplığı kaynak kodu | Paket (Pypi) | Örnekleri

Önkoşullar

  • Python 3.x'in geçerli sürümü.
  • Azure aboneliği - Ücretsiz olarak oluşturun
  • Azure aboneliğinizi aldıktan sonra anahtarınızı ve uç noktanızı almak için Azure portalında bir Language Understanding yazma kaynağı oluşturun. Dağıtmasını bekleyin ve Kaynağa git düğmesine tıklayın.
    • Uygulamanızı Language Understanding yazmasına bağlamak için oluşturduğunuz kaynaktan anahtara ve uç noktaya ihtiyacınız olacaktır. Anahtarınızı ve uç noktanızı hızlı başlangıcın ilerleyen bölümlerinde aşağıdaki koda yapıştıracaksınız. Hizmeti denemek için ücretsiz fiyatlandırma katmanını (F0) kullanabilirsiniz.

Ayarlama

Yeni Python uygulaması oluşturma

  1. Konsol penceresinde uygulamanız için yeni bir dizin oluşturun ve bu dizine geçin.

    mkdir quickstart-sdk && cd quickstart-sdk
    
  2. Python kodunuz için adlı authoring_and_predict.py bir dosya oluşturun.

    touch authoring_and_predict.py
    

pip ile istemci kitaplığını yükleme

Uygulama dizininde aşağıdaki komutu kullanarak Python için Language Understanding (LUIS) istemci kitaplığını yükleyin:

pip install azure-cognitiveservices-language-luis

Nesne Modeli Yazma

Language Understanding (LUIS) yazma istemcisi, yazma anahtarınızı içeren Azure'da kimlik doğrulaması yapan bir LUISAuthoringClient nesnesidir.

Yazma için kod örnekleri

İstemci oluşturulduktan sonra aşağıdaki işlevlere erişmek için bu istemciyi kullanın:

Tahmin Nesnesi modeli

Language Understanding (LUIS) tahmin çalışma zamanı istemcisi, kaynak anahtarınızı içeren Azure'da kimlik doğrulaması yapan bir LUISRuntimeClient nesnesidir.

Tahmin çalışma zamanı için kod örnekleri

İstemci oluşturulduktan sonra aşağıdaki işlevlere erişmek için bu istemciyi kullanın:

  • Hazırlama veya üretim yuvasına göre tahmin
  • Sürüme göre tahmin

Kod örnekleri

Bu kod parçacıkları, python için Language Understanding (LUIS) istemci kitaplığıyla aşağıdakileri nasıl yapacağınızı gösterir:

Bağımlılıkları ekleme

İstemci kitaplıklarını Python dosyasına ekleyin.

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

import json, time, uuid

Ortak kod ekleme

  1. quickstart yöntemini ve çağrısını ekleyin. Bu yöntem, kalan kodun çoğunu tutar. Bu yöntem dosyanın sonunda çağrılır.

    def quickstart():
    
        # add calls here, remember to indent properly
    
    quickstart()
    
  2. Aksi belirtilmedikçe kalan kodu hızlı başlangıç yöntemine ekleyin.

Uygulama için değişkenler oluşturma

İki değişken kümesi oluşturun: değiştirdiğiniz ilk küme, ikinci küme kod örneğinde göründükleri gibi ayrılır.

Önemli

İşiniz bittiğinde anahtarı kodunuzdan kaldırmayı unutmayın ve asla herkese açık olarak göndermeyin. Üretim için Azure Key Vault gibi kimlik bilgilerinizi depolamanın ve bunlara erişmenin güvenli bir yolunu kullanın. Daha fazla bilgi için Azure AI hizmetleri güvenlik makalesine bakın.

  1. Yazma anahtarınızı ve kaynak adlarınızı tutmak için değişkenler oluşturun.

    authoringKey = 'PASTE_YOUR_LUIS_AUTHORING_SUBSCRIPTION_KEY_HERE'
    authoringEndpoint = 'PASTE_YOUR_LUIS_AUTHORING_ENDPOINT_HERE'
    predictionKey = 'PASTE_YOUR_LUIS_PREDICTION_SUBSCRIPTION_KEY_HERE'
    predictionEndpoint = 'PASTE_YOUR_LUIS_PREDICTION_ENDPOINT_HERE'
    
  2. Uç noktalarınızı, uygulama adınızı, sürümünüzü ve amaç adınızı barındıracak değişkenler oluşturun.

    # We use a UUID to avoid name collisions.
    appName = "Contoso Pizza Company " + str(uuid.uuid4())
    versionId = "0.1"
    intentName = "OrderPizzaIntent"
    

İstemcinin kimliğini doğrulama

Anahtarınız ile bir CognitiveServicesCredentials nesnesi oluşturun ve bunu uç noktanızla birlikte kullanarak bir LUISAuthoringClient nesnesi oluşturun.

client = LUISAuthoringClient(authoringEndpoint, CognitiveServicesCredentials(authoringKey))

LUIS uygulaması oluşturma

LUIS uygulaması amaçlar, varlıklar ve örnek konuşmalar dahil olmak üzere doğal dil işleme (NLP) modelini içerir.

Uygulamayı oluşturmak için bir AppsOperation nesnesinin ekleme yöntemini oluşturun. Ad ve dil kültürü gerekli özelliklerdir.

# define app basics
appDefinition = ApplicationCreateObject (name=appName, initial_version_id=versionId, culture='en-us')

# create app
app_id = client.apps.add(appDefinition)

# get app id - necessary for all other changes
print("Created LUIS app with ID {}".format(app_id))

Uygulama için amaç oluşturma

Luis uygulamasının modelindeki birincil nesne amaçtır. Amaç, kullanıcı konuşma amaçlarının bir gruplamasıyla uyumlu hale geliyor. Kullanıcı bir soru sorabilir veya bottan (veya başka bir istemci uygulamasından) belirli bir hedeflenen yanıtı arayan bir bildirimde bulunabilir. Amaçlara örnek olarak uçuş rezervasyonu yapma, varış şehrindeki hava durumu hakkında bilgi isteme ve müşteri hizmetleri için iletişim bilgilerini sorma verilebilir.

Benzersiz amacın adıyla model.add_intent yöntemini kullanın, ardından uygulama kimliğini, sürüm kimliğini ve yeni amaç adını geçirin.

intentName Değer, Uygulama için değişken oluşturma bölümündeki değişkenlerin bir parçası olarak sabit olarak kodlanırOrderPizzaIntent.

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

Uygulama için varlık oluşturma

Varlıklar gerekli olmasa da çoğu uygulamada bulunur. Varlık, kullanıcının amacını tam olarak yerine getirmek için gereken bilgileri kullanıcı konuşmasından ayıklar. Her biri kendi veri dönüştürme nesnesi (DTO) modellerine sahip çeşitli önceden oluşturulmuş ve özel varlık türleri vardır. Uygulamanıza eklenecek yaygın önceden oluşturulmuş varlıklar arasında number, datetimeV2, geographyV2, ordinal bulunur.

Varlıkların bir amaç ile işaretlenmediğini bilmek önemlidir. Bu kişiler çoğu amaç için geçerli olabilir ve genellikle geçerlidir. Yalnızca örnek kullanıcı konuşmaları belirli, tek bir amaç için işaretlenir.

Varlıklar için oluşturma yöntemleri ModelOperations sınıfının bir parçasıdır. Her varlık türünün kendi veri dönüştürme nesnesi (DTO) modeli vardır.

Varlık oluşturma kodu, alt varlıklara ve alt varlıklara uygulanan özelliklere sahip bir makine öğrenmesi Quantity varlığı oluşturur.

Oluşturulan varlığı, 'Quantity' alt varlıklarına uygulanan alt varlıkları ve özellikleri içeren bir makine öğrenmesi varlığını gösteren portaldan alınan kısmi ekran görüntüsü.

# Add Prebuilt entity
client.model.add_prebuilt(app_id, versionId, prebuilt_extractor_names=["number"])

# define machine-learned entity
mlEntityDefinition = [
{
    "name": "Pizza",
    "children": [
        { "name": "Quantity" },
        { "name": "Type" },
        { "name": "Size" }
    ]
},
{
    "name": "Toppings",
    "children": [
        { "name": "Type" },
        { "name": "Quantity" }
    ]
}]

# add entity to app
modelId = client.model.add_entity(app_id, versionId, name="Pizza order", children=mlEntityDefinition)

# define phraselist - add phrases as significant vocabulary to app
phraseList = {
    "enabledForAllModels": False,
    "isExchangeable": True,
    "name": "QuantityPhraselist",
    "phrases": "few,more,extra"
}

# add phrase list to app
phraseListId = client.features.add_phrase_list(app_id, versionId, phraseList)

# Get entity and subentities
modelObject = client.model.get_entity(app_id, versionId, modelId)
toppingQuantityId = get_grandchild_id(modelObject, "Toppings", "Quantity")
pizzaQuantityId = get_grandchild_id(modelObject, "Pizza", "Quantity")

# add model as feature to subentity model
prebuiltFeatureRequiredDefinition = { "model_name": "number", "is_required": True }
client.features.add_entity_feature(app_id, versionId, pizzaQuantityId, prebuiltFeatureRequiredDefinition)

# add model as feature to subentity model
prebuiltFeatureNotRequiredDefinition = { "model_name": "number" }
client.features.add_entity_feature(app_id, versionId, toppingQuantityId, prebuiltFeatureNotRequiredDefinition)

# add phrase list as feature to subentity model
phraseListFeatureDefinition = { "feature_name": "QuantityPhraselist", "model_name": None }
client.features.add_entity_feature(app_id, versionId, toppingQuantityId, phraseListFeatureDefinition)

Özellikleri bu alt varlığa atamak için Quantity alt öğesinin kimliğini bulmak için yönteminin üstüne quickstart aşağıdaki yöntemi koyun.

def get_grandchild_id(model, childName, grandChildName):
    
    theseChildren = next(filter((lambda child: child.name == childName), model.children))
    theseGrandchildren = next(filter((lambda child: child.name == grandChildName), theseChildren.children))
    
    grandChildId = theseGrandchildren.id
    
    return grandChildId

Amaca örnek konuşma ekleme

Bir konuşmanın amacını belirlemek ve varlıkları ayıklamak için uygulamanın konuşma örneklerine ihtiyacı vardır. Örneklerin belirli, tek bir amacı hedeflemesi ve tüm özel varlıkları işaretlemesi gerekir. Önceden oluşturulmuş varlıkların işaretlenmesi gerekmez.

Her örnek konuşma için bir nesne olan ExampleLabelObject nesnelerinin listesini oluşturarak örnek konuşmalar ekleyin. Her örnek, tüm varlıkları varlık adı ve varlık değeri ad/değer çiftleri sözlüğüyle işaretlemelidir. Varlık değeri, örnek konuşmanın metninde göründüğü gibi olmalıdır.

Portalda etiketlenmiş örnek ifadeyi gösteren kısmi ekran görüntüsü.

Arama örnekleri.uygulama kimliği, sürüm kimliği ve örnekle birlikte ekleyin .

# Define labeled example
labeledExampleUtteranceWithMLEntity = {
    "text": "I want two small seafood pizzas with extra cheese.",
    "intentName": intentName,
    "entityLabels": [
        {
            "startCharIndex": 7,
            "endCharIndex": 48,
            "entityName": "Pizza order",
            "children": [
                {
                    "startCharIndex": 7,
                    "endCharIndex": 30,
                    "entityName": "Pizza",
                    "children": [
                        {
                            "startCharIndex": 7,
                            "endCharIndex": 9,
                            "entityName": "Quantity"
                        },
                        {
                            "startCharIndex": 11,
                            "endCharIndex": 15,
                            "entityName": "Size"
                        },
                        {
                            "startCharIndex": 17,
                            "endCharIndex": 23,
                            "entityName": "Type"
                        }]
                },
                {
                    "startCharIndex": 37,
                    "endCharIndex": 48,
                    "entityName": "Toppings",
                    "children": [
                        {
                            "startCharIndex": 37,
                            "endCharIndex": 41,
                            "entityName": "Quantity"
                        },
                        {
                            "startCharIndex": 43,
                            "endCharIndex": 48,
                            "entityName": "Type"
                        }]
                }
            ]
        }
    ]
}

print("Labeled Example Utterance:", labeledExampleUtteranceWithMLEntity)

# Add an example for the entity.
# Enable nested children to allow using multiple models with the same name.
# The quantity subentity and the phraselist could have the same exact name if this is set to True
client.examples.add(app_id, versionId, labeledExampleUtteranceWithMLEntity, { "enableNestedChildren": True })

Uygulamayı eğitme

Model oluşturulduktan sonra LUIS uygulamasının modelin bu sürümü için eğitilmesi gerekir. Eğitilmiş model kapsayıcıda kullanılabilir veya hazırlama veya ürün yuvalarında yayımlanabilir.

train.train_version yöntemi için uygulama kimliği ve sürüm kimliği gerekir.

Bu hızlı başlangıç gösterileri gibi çok küçük bir model çok hızlı bir şekilde eğitilecektir. Üretim düzeyindeki uygulamalarda eğitim, eğitimin ne zaman başarılı olduğunu veya başarılı olup olmadığını belirlemek için get_status yöntemine yönelik bir yoklama çağrısı içermelidir. Yanıt, her nesne için ayrı bir duruma sahip ModelTrainingInfo nesnelerinin listesidir. Eğitimin tamamlandı olarak kabul edilmesi için tüm nesnelerin başarılı olması gerekir.

client.train.train_version(app_id, versionId)
waiting = True
while waiting:
    info = client.train.get_status(app_id, versionId)

    # get_status returns a list of training statuses, one for each model. Loop through them and make sure all are done.
    waiting = any(map(lambda x: 'Queued' == x.details.status or 'InProgress' == x.details.status, info))
    if waiting:
        print ("Waiting 10 seconds for training to complete...")
        time.sleep(10)
    else: 
        print ("trained")
        waiting = False

Uygulamayı üretim yuvasında yayımlama

app.publish yöntemini kullanarak LUIS uygulamasını yayımlayın . Bu, geçerli eğitilmiş sürümü uç noktada belirtilen yuvaya yayımlar. İstemci uygulamanız, amaç ve varlık ayıklama tahmini için kullanıcı konuşmaları göndermek için bu uç noktayı kullanır.

# Mark the app as public so we can query it using any prediction endpoint.
# Note: For production scenarios, you should instead assign the app to your own LUIS prediction endpoint. See:
# https://docs.microsoft.com/en-gb/azure/cognitive-services/luis/luis-how-to-azure-subscription#assign-a-resource-to-an-app
client.apps.update_settings(app_id, is_public=True)

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

Tahmin çalışma zamanı istemcisinin kimliğini doğrulama

Kimlik bilgileri nesnesini anahtarınız ile kullanın ve bir LUISRuntimeClientConfiguration nesnesi oluşturmak için uç noktanızla birlikte kullanın.

Dikkat

Bu hızlı başlangıçta çalışma zamanı kimlik bilgilerinin bir parçası olarak yazma anahtarı kullanılır. Yazma anahtarının çalışma zamanını birkaç sorguyla sorgulamasına izin verilir. Hazırlama ve üretim düzeyi kodu için yazma anahtarını tahmin çalışma zamanı anahtarıyla değiştirin.

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

Çalışma zamanından tahmin alma

İsteği tahmin çalışma zamanına oluşturmak için aşağıdaki kodu ekleyin.

Kullanıcı ifadesi, prediction_request nesnesinin bir parçasıdır.

get_slot_prediction yöntemi, isteği karşılamak için uygulama kimliği, yuva adı ve tahmin isteği nesnesi gibi çeşitli parametrelere ihtiyaç duyar. Ayrıntılı, tüm amaçları göster ve günlük gibi diğer seçenekler isteğe bağlıdır. İstek bir PredictionResponse nesnesi döndürür.

# Production == slot name
predictionRequest = { "query" : "I want two small pepperoni pizzas with more salsa" }

predictionResponse = clientRuntime.prediction.get_slot_prediction(app_id, "Production", predictionRequest)
print("Top intent: {}".format(predictionResponse.prediction.top_intent))
print("Sentiment: {}".format (predictionResponse.prediction.sentiment))
print("Intents: ")

for intent in predictionResponse.prediction.intents:
    print("\t{}".format (json.dumps (intent)))
print("Entities: {}".format (predictionResponse.prediction.entities))

Tahmin yanıtı, amacı ve bulunan varlıkları içeren bir JSON nesnesidir.

{
    "query": "I want two small pepperoni pizzas with more salsa",
    "prediction": {
        "topIntent": "OrderPizzaIntent",
        "intents": {
            "OrderPizzaIntent": {
                "score": 0.753606856
            },
            "None": {
                "score": 0.119097039
            }
        },
        "entities": {
            "Pizza order": [
                {
                    "Pizza": [
                        {
                            "Quantity": [
                                2
                            ],
                            "Type": [
                                "pepperoni"
                            ],
                            "Size": [
                                "small"
                            ],
                            "$instance": {
                                "Quantity": [
                                    {
                                        "type": "builtin.number",
                                        "text": "two",
                                        "startIndex": 7,
                                        "length": 3,
                                        "score": 0.968156934,
                                        "modelTypeId": 1,
                                        "modelType": "Entity Extractor",
                                        "recognitionSources": [
                                            "model"
                                        ]
                                    }
                                ],
                                "Type": [
                                    {
                                        "type": "Type",
                                        "text": "pepperoni",
                                        "startIndex": 17,
                                        "length": 9,
                                        "score": 0.9345611,
                                        "modelTypeId": 1,
                                        "modelType": "Entity Extractor",
                                        "recognitionSources": [
                                            "model"
                                        ]
                                    }
                                ],
                                "Size": [
                                    {
                                        "type": "Size",
                                        "text": "small",
                                        "startIndex": 11,
                                        "length": 5,
                                        "score": 0.9592077,
                                        "modelTypeId": 1,
                                        "modelType": "Entity Extractor",
                                        "recognitionSources": [
                                            "model"
                                        ]
                                    }
                                ]
                            }
                        }
                    ],
                    "Toppings": [
                        {
                            "Type": [
                                "salsa"
                            ],
                            "Quantity": [
                                "more"
                            ],
                            "$instance": {
                                "Type": [
                                    {
                                        "type": "Type",
                                        "text": "salsa",
                                        "startIndex": 44,
                                        "length": 5,
                                        "score": 0.7292897,
                                        "modelTypeId": 1,
                                        "modelType": "Entity Extractor",
                                        "recognitionSources": [
                                            "model"
                                        ]
                                    }
                                ],
                                "Quantity": [
                                    {
                                        "type": "Quantity",
                                        "text": "more",
                                        "startIndex": 39,
                                        "length": 4,
                                        "score": 0.9320932,
                                        "modelTypeId": 1,
                                        "modelType": "Entity Extractor",
                                        "recognitionSources": [
                                            "model"
                                        ]
                                    }
                                ]
                            }
                        }
                    ],
                    "$instance": {
                        "Pizza": [
                            {
                                "type": "Pizza",
                                "text": "two small pepperoni pizzas",
                                "startIndex": 7,
                                "length": 26,
                                "score": 0.812199831,
                                "modelTypeId": 1,
                                "modelType": "Entity Extractor",
                                "recognitionSources": [
                                    "model"
                                ]
                            }
                        ],
                        "Toppings": [
                            {
                                "type": "Toppings",
                                "text": "more salsa",
                                "startIndex": 39,
                                "length": 10,
                                "score": 0.7250252,
                                "modelTypeId": 1,
                                "modelType": "Entity Extractor",
                                "recognitionSources": [
                                    "model"
                                ]
                            }
                        ]
                    }
                }
            ],
            "$instance": {
                "Pizza order": [
                    {
                        "type": "Pizza order",
                        "text": "two small pepperoni pizzas with more salsa",
                        "startIndex": 7,
                        "length": 42,
                        "score": 0.769223332,
                        "modelTypeId": 1,
                        "modelType": "Entity Extractor",
                        "recognitionSources": [
                            "model"
                        ]
                    }
                ]
            }
        }
    }
}

Uygulamayı çalıştırma

Uygulamayı hızlı başlangıç dosyanızdaki python komutuyla çalıştırın.

python authoring_and_predict.py

Bu hızlı başlangıcı izleyerek sırayla üç REST çağrısı yapacaksınız.

  • İlk olarak, REST Batch etiket ekleme çağrısını kullanarak Pizza uygulama modelini eğitmek için kullanılacak bir grup örnek ifadeyi karşıya yükleyebilirsiniz.
  • Ardından, REST Train uygulama sürümü çağrısını kullanarak Pizza uygulaması için bir eğitim oturumu başlatacaksınız.
  • Son olarak, REST Get sürüm eğitimi durum çağrısını kullanarak Pizza uygulaması için eğitim oturumunun durumunu alırsınız.

Başvuru belgeleri

Önkoşullar

  • Ücretsiz bir LUIS hesabı.

  • Visual Studio Code gibi bir metin düzenleyicisi.

  • Komut satırı programı cURL. cURL programı macOS, çoğu Linux dağıtımı ve Windows 10 derleme 1803 ve üzeri sürümlerde zaten yüklüdür.

    cURL yüklemeniz gerekiyorsa cURL indirme sayfasından cURL'yi indirebilirsiniz.

Pizza uygulaması oluşturma

Pizza uygulamasını oluşturun.

  1. Dosyanın GitHub sayfasını açmak için pizza-app-for-luis-v6.json seçinpizza-app-for-luis.json.
  2. Ham düğmesine sağ tıklayın veya uzun dokunun ve bağlantıyı farklı kaydet'i seçerek bilgisayarınıza kaydedinpizza-app-for-luis.json.
  3. LUIS portalında oturum açın.
  4. Uygulamalarım'ı seçin.
  5. Uygulamalarım sayfasında + Konuşma için yeni uygulama'yı seçin.
  6. JSON olarak içeri aktar'ı seçin.
  7. Yeni uygulamayı içeri aktar iletişim kutusunda Dosya Seç düğmesini seçin.
  8. pizza-app-for-luis.json İndirdiğiniz dosyayı ve ardından Aç'ı seçin.
  9. Yeni uygulamayı içeri aktar iletişim kutusu Adı alanına Pizza uygulamanız için bir ad girin ve Bitti düğmesini seçin.

Uygulama içeri aktarılır.

Etkili bir LUIS uygulaması oluşturma iletişim kutusu görürseniz iletişim kutusunu kapatın.

Pizza uygulamasını eğitin ve yayımlayın

Pizza uygulamasında amaçların listesini içeren Amaçlar sayfasını görmeniz gerekir.

  1. LUIS web sitesinin sağ üst kısmında Eğit düğmesini seçin.

    Train (Eğitim) düğmesi

  2. Eğit düğmesi devre dışı bırakıldığında eğitim tamamlanır.

Sohbet botunda veya diğer istemci uygulamalarında LUIS tahmini almak için uygulamayı tahmin uç noktasında yayımlamanız gerekir.

  1. Sağ üst gezinti bölmesinde Yayımla'yı seçin.

    Uç noktaya yayımlama düğmesinin ekran görüntüsü.

  2. Üretim yuvasını ve ardından Bitti'yi seçin.

    Luis'in uç noktaya yayımlama işleminin ekran görüntüsü.

  3. Azure Kaynakları sayfasına gitmek için bildirimde Uç nokta URL'lerinize eriş'i seçin. URL'leri yalnızca uygulamayla ilişkilendirilmiş bir tahmin kaynağınız varsa görebilirsiniz. Yönet'e tıklayarak Azure Kaynakları sayfasını da bulabilirsiniz.

    Uygulamanın yayımlandığını gösteren iletinin ekran görüntüsü.

Pizza uygulamasına yazma kaynağı ekleme

  1. YÖNET'i seçin.
  2. Azure Kaynakları’nı seçin.
  3. Yazma Kaynağı'nı seçin.
  4. Yazma kaynağını değiştir'i seçin.

Yazma kaynağınız varsa, yazma kaynağınızın Kiracı Adı, Abonelik Adı ve LUIS kaynak adını girin.

Yazma kaynağınız yoksa:

  1. Yeni kaynak oluştur'u seçin.
  2. Kiracı Adı, Kaynak Adı, Abonelik Adı ve Azure Kaynak Grubu Adı girin.

Pizza uygulamanız artık kullanıma hazırdır.

Pizza uygulamanız için erişim değerlerini kaydetme

Yeni Pizza uygulamanızı kullanmak için Pizza uygulamanızın uygulama kimliği, yazma anahtarı ve yazma uç noktası gerekir. Tahminleri almak için ayrı tahmin uç noktanız ve tahmin anahtarınız olması gerekir.

Bu değerleri bulmak için:

  1. Amaçlar sayfasında YÖNET'i seçin.
  2. Uygulama Ayarlar sayfasından Uygulama Kimliğini kaydedin.
  3. Azure Kaynakları’nı seçin.
  4. Yazma Kaynağı'nı seçin.
  5. Yazma Kaynağı ve Tahmin Kaynakları sekmelerinden Birincil Anahtarı kaydedin. Bu değer yazma anahtarınızdır.
  6. Uç Nokta URL'sini kaydedin. Bu değer, yazma uç noktanızdır.

Pizza uygulamasını eğitmek için JSON dosyası oluşturma

Üç örnek konuşma içeren bir JSON dosyası oluşturmak için aşağıdaki JSON verilerini adlı ExampleUtterances.JSONbir dosyaya kaydedin:

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

JSON örnek konuşmaları belirli bir biçimi izler.

text alanı, örnek konuşmanın metnini içerir. intentName alanı, LUIS uygulaması içindeki mevcut bir amacın adına karşılık gelmelidir. entityLabels alanı gereklidir. Herhangi bir varlığı etiketlemek istemiyorsanız, boş bir dizi girin.

entityLabels dizisi boş değilse startCharIndex ve endCharIndex değerlerinin entityName alanında başvurulan varlığı işaretlemesi gerekir. Dizin sıfır tabanlıdır. Etiketi metindeki bir boşlukta başlatır veya sonlarsanız, konuşmaları eklemek için API çağrısı başarısız olur.

Örnek konuşmalar ekleme

  1. Örnek konuşmaların toplu işlemini karşıya yüklemek için bu komutu metin düzenleyicinize kopyalayın:

    curl "***YOUR-AUTHORING-ENDPOINT***/luis/authoring/v3.0-preview/apps/***YOUR-APP-ID***/versions/***YOUR-APP-VERSION***/examples?verbose=true&show-all-intents=true" ^
          --request POST ^
          --header "Content-Type:application/json" ^
          --header "Ocp-Apim-Subscription-Key: ***YOUR-AUTHORING-KEY***" ^
          --data "@ExampleUtterances.JSON"
    
  2. ile ***YOUR- başlayan değerleri kendi değerlerinizle değiştirin.

    Bilgiler Purpose
    ***YOUR-AUTHORING-ENDPOINT*** Yazma URL'si uç noktanız. Örneğin, "https://REPLACE-WITH-YOUR-RESOURCE-NAME.api.cognitive.microsoft.com/". Kaynağı oluştururken kaynak adınızı ayarlarsınız.
    ***YOUR-APP-ID*** LUIS uygulama kimliğiniz.
    ***YOUR-APP-VERSION*** LUIS uygulama sürümünüz. Pizza uygulaması için sürüm numarası, tırnak işaretleri olmadan "0.1" şeklindedir.
    ***YOUR-AUTHORING-KEY*** 32 karakter yazma anahtarınız.

    Atanan anahtarlar ve kaynaklar Luis portalında, Azure kaynakları sayfasındaki Yönet bölümünde görünür. Uygulama kimliği, Uygulama Ayarlar sayfasındaki aynı Yönet bölümünde bulunur.

    Önemli

    İşiniz bittiğinde anahtarı kodunuzdan kaldırmayı unutmayın ve asla herkese açık olarak göndermeyin. Üretim için Azure Key Vault gibi kimlik bilgilerinizi depolamanın ve bunlara erişmenin güvenli bir yolunu kullanın. Daha fazla bilgi için Azure AI hizmetleri güvenlik makalesine bakın.

  3. Bir Komut İstemi (Windows) veya Terminal (macOS ve Linux) başlatın ve dizinleri dosyayı kaydettiğiniz dizinle ExampleUtterances.JSON değiştirin.

  4. Düzenleyiciden cURL komutunu kopyalayın ve komut istemine (Windows) veya Terminal'e (macOS ve Linux) yapıştırın. Komutu yürütmek için Enter tuşuna basın.

    Aşağıdaki yanıtı görmeniz gerekir:

    [{"value":{"ExampleId":1255129706,"UtteranceText":"order a pizza"},"hasError":false},{"value":{"ExampleId":1255129707,"UtteranceText":"order a large pepperoni pizza"},"hasError":false},{"value":{"ExampleId":1255129708,"UtteranceText":"i want two large pepperoni pizzas on thin crust"},"hasError":false}]
    

    Okunabilirlik için biçimlendirilmiş çıktı aşağıdadır:

    [
      {
        "value": {
          "ExampleId": 1255129706,
          "UtteranceText": "order a pizza"
        },
        "hasError": false
      },
      {
        "value": {
          "ExampleId": 1255129707,
          "UtteranceText": "order a large pepperoni pizza"
        },
        "hasError": false
      },
      {
        "value": {
          "ExampleId": 1255129708,
          "UtteranceText": "i want two large pepperoni pizzas on thin crust"
        },
        "hasError": false
      }
    ]
    

Pizza uygulama modelini eğitin

  1. Pizza uygulaması için bir eğitim oturumu başlatmak için şu komutu metin düzenleyicinize kopyalayın:

    curl "***YOUR-AUTHORING-ENDPOINT***/luis/authoring/v3.0-preview/apps/***YOUR-APP-ID***/versions/***YOUR-APP-VERSION***/train?verbose=true&show-all-intents=true" ^
          --data "" ^
          --request POST ^
          --header "Content-Type:application/json" ^
          --header "Ocp-Apim-Subscription-Key: ***YOUR-AUTHORING-KEY***"
    
  2. Daha önce yaptığınız gibi, ile ***YOUR- başlayan değerleri kendi değerlerinizle değiştirin.

  3. Düzenleyiciden cURL komutunu kopyalayın ve komut istemine (Windows) veya Terminal'e (macOS ve Linux) yapıştırın. Komutu yürütmek için Enter tuşuna basın.

    Aşağıdaki yanıtı görmeniz gerekir:

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

    Okunabilirlik için biçimlendirilmiş çıktı aşağıdadır:

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

Eğitimin durumunu alma

  1. Eğitim oturumunun eğitim durumunu almak için bu komutu metin düzenleyicinize kopyalayın:

    curl "***YOUR-AUTHORING-ENDPOINT***/luis/authoring/v3.0-preview/apps/***YOUR-APP-ID***/versions/***YOUR-APP-VERSION***/train?verbose=true&show-all-intents=true" ^
            --request GET ^
            --header "Content-Type:application/json" ^
            --header "Ocp-Apim-Subscription-Key: ***YOUR-AUTHORING-KEY***"
    
  2. Daha önce yaptığınız gibi, ile ***YOUR- başlayan değerleri kendi değerlerinizle değiştirin.

  3. Düzenleyiciden cURL komutunu kopyalayın ve komut istemine (Windows) veya Terminal'e (macOS ve Linux) yapıştırın. Komutu yürütmek için Enter tuşuna basın.

    Aşağıdaki yanıtı görmeniz gerekir:

    [{"modelId":"8eb7ad8f-5db5-4c28-819b-ca3905fffd80","details":{"statusId":2,"status":"UpToDate","exampleCount":171}},{"modelId":"6f53bc92-ae54-44ce-bc4e-010d1f8cfda0","details":{"statusId":2,"status":"UpToDate","exampleCount":171}},{"modelId":"6cb17888-ad6e-464c-82c0-d37fd1f2c4f8","details":{"statusId":2,"status":"UpToDate","exampleCount":171}},{"modelId":"a16fc4fd-1949-4e77-9de3-30369f16c3a5","details":{"statusId":2,"status":"UpToDate","exampleCount":171}},{"modelId":"6bacdb75-1889-4f93-8971-8c8995ff8960","details":{"statusId":2,"status":"UpToDate","exampleCount":171}},{"modelId":"be963f4c-4898-48d7-9eba-3c6af0867b9d","details":{"statusId":2,"status":"UpToDate","exampleCount":171}}]
    

    Okunabilirlik için biçimlendirilmiş çıktı aşağıdadır:

    [
      {
        "modelId": "8eb7ad8f-5db5-4c28-819b-ca3905fffd80",
        "details": {
          "statusId": 2,
          "status": "UpToDate",
          "exampleCount": 171
        }
      },
      {
        "modelId": "6f53bc92-ae54-44ce-bc4e-010d1f8cfda0",
        "details": {
          "statusId": 2,
          "status": "UpToDate",
          "exampleCount": 171
        }
      },
      {
        "modelId": "6cb17888-ad6e-464c-82c0-d37fd1f2c4f8",
        "details": {
          "statusId": 2,
          "status": "UpToDate",
          "exampleCount": 171
        }
      },
      {
        "modelId": "a16fc4fd-1949-4e77-9de3-30369f16c3a5",
        "details": {
          "statusId": 2,
          "status": "UpToDate",
          "exampleCount": 171
        }
      },
      {
        "modelId": "6bacdb75-1889-4f93-8971-8c8995ff8960",
        "details": {
          "statusId": 2,
          "status": "UpToDate",
          "exampleCount": 171
        }
      },
      {
        "modelId": "be963f4c-4898-48d7-9eba-3c6af0867b9d",
        "details": {
          "statusId": 2,
          "status": "UpToDate",
          "exampleCount": 171
        }
      }
    ]
    

Tahmin uç noktasından amaç alma

Tahmin uç noktasını sorgulamak ve tahmin sonucu almak için cURL kullanın.

Not

Bu komut tahmin uç noktanızı kullanır.

  1. Bu komutu metin düzenleyicinize kopyalayın:

    curl "https://***YOUR-PREDICTION-ENDPOINT***/luis/prediction/v3.0/apps/***YOUR-APP-ID***/slots/production/predict" ^
          --request GET ^
          --get ^
          --data "subscription-key=***YOUR-PREDICTION-KEY***" ^
          --data "verbose=true" ^
          --data "show-all-intents=true" ^
          --data-urlencode "query=I want two large pepperoni pizzas on thin crust please"
    
  2. ile ***YOUR- başlayan değerleri kendi değerlerinizle değiştirin.

    Bilgiler Purpose
    ***YOUR-PREDICTION-ENDPOINT*** Tahmin URL'si uç noktanız. Uygulamanızın LUIS portalı, Azure Kaynakları sayfasında bulunur.
    Örneğin, https://westus.api.cognitive.microsoft.com/.
    ***YOUR-APP-ID*** Uygulama kimliğiniz. LUIS portalında, uygulamanızın Uygulama Ayarlar sayfasında bulunur.
    ***YOUR-PREDICTION-KEY*** 32 karakterlik tahmin anahtarınız. Uygulamanızın LUIS portalı, Azure Kaynakları sayfasında bulunur.
  3. Komutu yürütmek için metni konsol penceresine kopyalayın ve Enter tuşuna basın:

  4. JSON olarak döndürülen tahmin yanıtını gözden geçirin:

    {"query":"I want two large pepperoni pizzas on thin crust please","prediction":{"topIntent":"ModifyOrder","intents":{"ModifyOrder":{"score":1.0},"None":{"score":8.55E-09},"Greetings":{"score":1.82222226E-09},"CancelOrder":{"score":1.47272727E-09},"Confirmation":{"score":9.8125E-10}},"entities":{"Order":[{"FullPizzaWithModifiers":[{"PizzaType":["pepperoni pizzas"],"Size":[["Large"]],"Quantity":[2],"Crust":[["Thin"]],"$instance":{"PizzaType":[{"type":"PizzaType","text":"pepperoni pizzas","startIndex":17,"length":16,"score":0.9978157,"modelTypeId":1,"modelType":"Entity Extractor","recognitionSources":["model"]}],"Size":[{"type":"SizeList","text":"large","startIndex":11,"length":5,"score":0.9984481,"modelTypeId":1,"modelType":"Entity Extractor","recognitionSources":["model"]}],"Quantity":[{"type":"builtin.number","text":"two","startIndex":7,"length":3,"score":0.999770939,"modelTypeId":1,"modelType":"Entity Extractor","recognitionSources":["model"]}],"Crust":[{"type":"CrustList","text":"thin crust","startIndex":37,"length":10,"score":0.933985531,"modelTypeId":1,"modelType":"Entity Extractor","recognitionSources":["model"]}]}}],"$instance":{"FullPizzaWithModifiers":[{"type":"FullPizzaWithModifiers","text":"two large pepperoni pizzas on thin crust","startIndex":7,"length":40,"score":0.90681237,"modelTypeId":1,"modelType":"Entity Extractor","recognitionSources":["model"]}]}}],"ToppingList":[["Pepperoni"]],"$instance":{"Order":[{"type":"Order","text":"two large pepperoni pizzas on thin crust","startIndex":7,"length":40,"score":0.9047088,"modelTypeId":1,"modelType":"Entity Extractor","recognitionSources":["model"]}],"ToppingList":[{"type":"ToppingList","text":"pepperoni","startIndex":17,"length":9,"modelTypeId":5,"modelType":"List Entity Extractor","recognitionSources":["model"]}]}}}}
    

    Okunabilirlik için biçimlendirilmiş JSON yanıtı:

    {
      "query": "I want two large pepperoni pizzas on thin crust please",
      "prediction": {
        "topIntent": "ModifyOrder",
        "intents": {
          "ModifyOrder": {
            "score": 1.0
          },
          "None": {
            "score": 8.55e-9
          },
          "Greetings": {
            "score": 1.82222226e-9
          },
          "CancelOrder": {
            "score": 1.47272727e-9
          },
          "Confirmation": {
            "score": 9.8125e-10
          }
        },
        "entities": {
          "Order": [
            {
              "FullPizzaWithModifiers": [
                {
                  "PizzaType": [
                    "pepperoni pizzas"
                  ],
                  "Size": [
                    [
                      "Large"
                    ]
                  ],
                  "Quantity": [
                    2
                  ],
                  "Crust": [
                    [
                      "Thin"
                    ]
                  ],
                  "$instance": {
                    "PizzaType": [
                      {
                        "type": "PizzaType",
                        "text": "pepperoni pizzas",
                        "startIndex": 17,
                        "length": 16,
                        "score": 0.9978157,
                        "modelTypeId": 1,
                        "modelType": "Entity Extractor",
                        "recognitionSources": [
                          "model"
                        ]
                      }
                    ],
                    "Size": [
                      {
                        "type": "SizeList",
                        "text": "large",
                        "startIndex": 11,
                        "length": 5,
                        "score": 0.9984481,
                        "modelTypeId": 1,
                        "modelType": "Entity Extractor",
                        "recognitionSources": [
                          "model"
                        ]
                      }
                    ],
                    "Quantity": [
                      {
                        "type": "builtin.number",
                        "text": "two",
                        "startIndex": 7,
                        "length": 3,
                        "score": 0.999770939,
                        "modelTypeId": 1,
                        "modelType": "Entity Extractor",
                        "recognitionSources": [
                          "model"
                        ]
                      }
                    ],
                    "Crust": [
                      {
                        "type": "CrustList",
                        "text": "thin crust",
                        "startIndex": 37,
                        "length": 10,
                        "score": 0.933985531,
                        "modelTypeId": 1,
                        "modelType": "Entity Extractor",
                        "recognitionSources": [
                          "model"
                        ]
                      }
                    ]
                  }
                }
              ],
              "$instance": {
                "FullPizzaWithModifiers": [
                  {
                    "type": "FullPizzaWithModifiers",
                    "text": "two large pepperoni pizzas on thin crust",
                    "startIndex": 7,
                    "length": 40,
                    "score": 0.90681237,
                    "modelTypeId": 1,
                    "modelType": "Entity Extractor",
                    "recognitionSources": [
                      "model"
                    ]
                  }
                ]
              }
            }
          ],
          "ToppingList": [
            [
              "Pepperoni"
            ]
          ],
          "$instance": {
            "Order": [
              {
                "type": "Order",
                "text": "two large pepperoni pizzas on thin crust",
                "startIndex": 7,
                "length": 40,
                "score": 0.9047088,
                "modelTypeId": 1,
                "modelType": "Entity Extractor",
                "recognitionSources": [
                  "model"
                ]
              }
            ],
            "ToppingList": [
              {
                "type": "ToppingList",
                "text": "pepperoni",
                "startIndex": 17,
                "length": 9,
                "modelTypeId": 5,
                "modelType": "List Entity Extractor",
                "recognitionSources": [
                  "model"
                ]
              }
            ]
          }
        }
      }
    }
    

Kaynakları temizleme

Uygulamayı LUIS portalından silebilir ve Azure portaldan Azure kaynaklarını silebilirsiniz.

REST API kullanıyorsanız, hızlı başlangıcı tamamladığınızda dosyayı dosya sisteminden silin ExampleUtterances.JSON .

Sorun giderme

  • İstemci kitaplığında kimlik doğrulaması - kimlik doğrulama hataları genellikle yanlış anahtar ve uç noktanın kullanıldığını gösterir. Bu hızlı başlangıçta kolaylık sağlamak amacıyla tahmin çalışma zamanı için yazma anahtarı ve uç noktası kullanılır, ancak yalnızca aylık kotayı henüz kullanmadıysanız çalışır. Yazma anahtarını ve uç noktayı kullanamıyorsanız, tahmin çalışma zamanı SDK'sı istemci kitaplığına erişirken tahmin çalışma zamanı anahtarını ve uç noktasını kullanmanız gerekir.
  • Varlık oluşturma - Bu öğreticide kullanılan iç içe makine öğrenmesi varlığını oluştururken hata alırsanız kodu kopyaladığınızdan ve kodu değiştirerek farklı bir varlık oluşturmadığınızdan emin olun.
  • Örnek konuşma oluşturma - Bu öğreticide kullanılan etiketli örnek ifadeyi oluştururken hata alırsanız, kodu kopyaladığınızdan ve farklı bir etiketlenmiş örnek oluşturmak için kodu değiştirmediğinizden emin olun.
  • Eğitim - Eğitim hatası alırsanız, bu genellikle boş bir uygulamayı (örnek konuşmaları içeren amaç yok) veya hatalı biçimlendirilmiş amaçlara veya varlıklara sahip bir uygulamayı gösterir.
  • Çeşitli hatalar : Kod, metin ve JSON nesneleriyle istemci kitaplıklarına çağırdığı için kodu değiştirmediğinizden emin olun.

Diğer hatalar : Önceki listede ele alınmayan bir hata alırsanız, bu sayfanın alt kısmından geri bildirim sağlayarak bize bildirin. Yüklediğiniz istemci kitaplıklarının programlama dilini ve sürümünü ekleyin.

Sonraki adımlar