2017-07-04 125 views
0
[LuisIntent(intentName: "Eligibility")] 
private async Task Eligibility(IDialogContext context, LuisResult result) 
{ 
    await context.PostAsync($"You have chosen the eligibility intent with no entities"); 
    context.Wait(MessageReceivedAsync); 
} 

如何重写LuisIntent属性,使其同时使用IntentName和EntityName?LuisIntent属性如何覆盖?

+0

对于1个intent和2个实体,你想有2种不同的方法? –

+0

与通常的属性不同,LuisAttribute不是“密封”的,所以你可以对它进行子类化 - 但是框架不会知道你已经完成了,并且不会将实体传递给它。 – stuartd

+0

..无论如何,你已经获得了'LuisResult'参数中的实体。 – stuartd

回答

1

我相信你想要做的事情可以以一种更简单的方式完成,假设你想要做的是根据检测到一个实体(或多个实体)执行不同的逻辑。

您在意向方法中获得的LuisResult类包含一个Entities属性,其中包含LUIS根据您的查询检测到的实体列表。

如果你仍然想要做过滤覆盖的事情,那么我相信你将不得不从头开始,覆盖LuisDialogDispatchToIntentHandler方法。该方法负责根据意图名称查找意图处理程序字典,该处理程序需要调用存储。

但是,这将不够可能,你将不得不创建一个新的EnumerateHandlers,因为正如我前面提到的,处理程序字典正在创建,只是意图名称作为密钥,它似乎你想要合并实体。

最后,您将不得不更新LuisIntentAttribute以合并您要过滤的实体名称。

正如你所看到的最重要的路径不是最好的路要走。