LUIS中用于多轮对话的新意图

时间:2019-06-20 09:28:23

标签: botframework luis dispatch

我要创建一个多转对话框。我不知道如何将它与LUIS模型联系起来。我签出了文档,但是有些示例只有一个转弯对话框。另外,我使用虚拟助手模板。 我想做这样的事情。

  

用户:我要预订航班

     

Bot:目的地是什么?

     

用户:伦敦

     

Bot:什么时候?

     

用户:9月21日。

     

Bot:机票已购买。

问题是第二步会发生什么?我应该检查调度员吗?我应该为意图内的所有步骤添加所有可能的短语吗?

1 个答案:

答案 0 :(得分:2)

LUIS的常规内容

对于您的LUIS模型,您将需要您的意图-BookFlightNone。在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调度程序link1link2进行检查,以根据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意图:

  • 向连接到VA模板的现有LUIS DISPATCH 应用添加BookFlight意图。
  • 为BookFlight意图添加语音。
  • 保存并培训您的LUIS应用。
  • 发布您的LUIS应用。
  • 按照说明here步骤3 运行update_cognitive_models.ps1脚本,这将拉低更改(您的新意图和话语)。
    • .\Deployment\Scripts\update_cognitive_models.ps1 -RemoteToLocal
      • 注意::此命令必须使用PowerShell Core并从项目目录的根目录(即Virtual Assistant文件夹中)运行。

运行该脚本的结果应该是在本地创建一堆文件,以及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));
    }
    ...
}