我要创建一个多转对话框。我不知道如何将它与LUIS模型联系起来。我签出了文档,但是有些示例只有一个转弯对话框。另外,我使用虚拟助手模板。 我想做这样的事情。
用户:我要预订航班
Bot:目的地是什么?
用户:伦敦
Bot:什么时候?
用户:9月21日。
Bot:机票已购买。
问题是第二步会发生什么?我应该检查调度员吗?我应该为意图内的所有步骤添加所有可能的短语吗?
答案 0 :(得分:2)
LUIS的常规内容
对于您的LUIS模型,您将需要您的意图-BookFlight
和None
。在BookFlight
意向下,您将拥有Utterances
-您希望能够触发BookFlight
意向的所有短语。
MyLuisApp
--BookFlight
----I want to book a flight
----Book a flight
----I need a plane ticket
----etc
--None
----Utterances that don't match any of your intents
按照this documentation,无意图非常重要。
将此功能添加到新的漫游器或核心漫游器模板
提供了几个有关如何实现此目标的示例,但是最好的方法是使用对话框。您想要的是Waterfall Dialog。在此对话框中,您可以定义瀑布的每个阶段,例如询问目的地,询问日期等
为了触发BookFlight瀑布,您需要一个MainDialog处理每个请求,并与LUIS调度程序link1和link2进行检查,以根据this example找出用户意图。 。如果意图是BookFlight
,则您将启动BookFlightDialog,其中包含书本飞行瀑布。
...
// Check dispatch result
var dispatchResult = await cognitiveModels.DispatchService.RecognizeAsync<DispatchLuis>(dc.Context, CancellationToken.None);
var intent = dispatchResult.TopIntent().intent;
if (intent == "BookFlight")
{
// Start BookFlightDialog
await dc.BeginDialogAsync(nameof(BookFlightDialog));
}
常规瀑布对话框的内容
您将步骤定义为:
var waterfallSteps = new WaterfallStep[]
{
AskDestinationAsync,
AskDepartureDateAsync,
ConfirmStepAsync,
FinishDialogAsync,
};
对于您的方案,实际上已经创建了一个示例,其中包含可用的BookFlight意向here。有关如何进行此设置以及如何在official documentation中进行操作的完整指南。因此,您可以进行测试以查看一切工作原理,然后根据需要对其进行修改。
其他有趣的链接:
虚拟助手的东西
一旦了解了上述工作原理,便可以通过执行以下操作来修改Virtual Assistant模板以处理BookFlight意图:
.\Deployment\Scripts\update_cognitive_models.ps1 -RemoteToLocal
运行该脚本的结果应该是在本地创建一堆文件,以及DispatchLuis.cs
文件正在更新以包括您的新意图。您还应该检查创建的Summary.html
文件,以查看是否有新的意图。现在,您将必须更新VA代码以在触发新的意图时实际执行某些操作-在RouteAsync
文件的MainDialog.cs
方法内添加另一个if / case语句-有关的信息,请参见here一个例子。
类似这样的东西:
MainDialog.cs
protected override async Task RouteAsync(DialogContext dc, CancellationToken cancellationToken = default(CancellationToken))
{
// Call to dispatch to get intent
if (intent == DispatchLuis.Intent.bookflight)
{
// Start BookFlightDialog
await dc.BeginDialogAsync(nameof(BookFlightDialog));
}
...
}