Мы начали экспериментировать с пакетом nuget Microsoft.CognitiveServices.Speech (https://docs.microsoft.com/en-gb/azure/cognitive-services/speech-service/how-to-recognize-intents-from-speech-csharp).. Это замечательно, так как позволяет создать языковую модель и специально указать цели, которые вы хотите сопоставить:
// Creates a Language Understanding model using the app id, and adds specific intents from your model
var model = LanguageUnderstandingModel.FromAppId("YourLanguageUnderstandingAppId");
recognizer.AddIntent(model, "YourLanguageUnderstandingIntentName1", "id1");
recognizer.AddIntent(model, "YourLanguageUnderstandingIntentName2", "id2");
recognizer.AddIntent(model, "YourLanguageUnderstandingIntentName3", "any-IntentId-here");
Однако мы создаем API и будем передавать текст, и это вызовет Luis с использованием конечной точки API, это очень просто, например:
using (var client = new HttpClient())
{
var queryString = HttpUtility.ParseQueryString(String.Empty);
// The request header contains your subscription key
client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", _cognitiveSettings.SubscriptionKey);
// The "q" parameter contains the utterance to send to LUIS
queryString["q"] = query;
// These optional request parameters are set to their default values
queryString["staging"] = _cognitiveSettings.IsProduction ? bool.FalseString : bool.TrueString;
queryString["timezoneOffset"] = "0";
queryString["verbose"] = "true";
queryString["spellCheck"] = "false";
var endpointUri = $"https://westeurope.api.cognitive.microsoft.com/luis/v2.0/apps/{_luisAppId}?{queryString}";
var response = await client.GetAsync(endpointUri);
var responseJson = await response.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<IntentResponseModel>(responseJson);
}
Есть ли способ контролировать намерения, которые мы хотели бы получить для определенной текстовой строки? Мы можем установить для verbose значение true, чтобы оно возвращало все намерения с рейтингом совпадения, но мы предпочли бы иметь возможность указать подмножество намерений в зависимости от состояния и просто попытаться сопоставить их. Кажется, вы можете сделать это с помощью SDK, используя аудио, это можно сделать с помощью текста (есть ли текстовый SDK?).
Кроме того, существует ли способ сопоставления прав, возвращаемых в JSON, с цели, которая их заполнила, похоже, что между намерениями и сущностями нет связи.