我们已经开始尝试使用Microsoft.CognitiveServices.Speech nuget程序包(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,并将传递文本,这将使用API端点调用Luis,这是非常基本的,就像这样:
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中返回的实体与填充它们的意图进行匹配,看来意图与实体之间没有链接。
答案 0 :(得分:0)
不幸的是,没有,无法控制返回的意图。在应用程序中,您将需要过滤返回的意图以限制与特定文本字符串匹配的内容。