1

我正在构建一个 LuisDialog 并且 LUIS 集成运行良好。

在 LUIS 没有填补我需要的所有空白的情况下,消除歧义的最佳方法是什么?

现在,我使用 PromptDialog 回调 - 所以在 Dialog 方法中(用 LuisIntent 属性装饰),当我需要获取更多详细信息/消除歧义时,我会:

PromptDialog.Choice<string>(context, EnsureTimeOfDayChosen, new[] { "Morning (AM)", "Afternoon (PM)", "Any" }, "What time of day would you like us to book the appointment? (AM/PM/Any)", "Please choose AM or PM.  Alternatively, if you don't mind which, just say Any.");

和代表的身体(EnsureTimeOfDayChosen):

string AmPmOrAny = await result;
context.PerUserInConversationData.SetValue<string>("TimeOfDay", AmPmOrAny);
BookAppointment(context);

这种方法的问题是委托的最后一行——感觉不对。我不能轻易地回调到我最初调用的地方,LuisIntent 装饰方法和恢复。

相反,我必须预先处理 LUIS 信息,并在收集更多信息后调用 BookAppointment 方法,并将其存储在 PerUserInConversationData 中。

我做错了吗?

任何帮助将不胜感激 - 亲切的问候,马特。

4

1 回答 1

1

鉴于 Dialog 模型的当前实现,我想不出更好的方法来实现您的逻辑。目前,只要您在等待用户的异步响应,您的代码就会在响应时提供的回调中恢复。您可以将其视为异步编程的开始/结束模型

于 2016-04-16T00:10:54.453 回答