【问题标题】:New intent in LUIS for multi turn dialogsLUIS 中用于多轮对话的新意图
【发布时间】:2019-06-20 18:50:32
【问题描述】:

我将创建一个多轮对话。我不明白它应该如何与 LUIS 模型连接。我查看了文档,但有些示例只有一圈对话框。另外,我使用虚拟助手模板。 我想做这样的事情。

用户:我想订机票

机器人:目的地是什么?

用户:伦敦

机器人:什么时候?

用户:9 月 21 日。

Bot:票被买了。

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

【问题讨论】:

    标签: botframework azure-language-understanding dispatch


    【解决方案1】:

    一般 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 中提供了有关如何进行此设置和工作的完整指南。因此,您可以测试以查看一切如何工作,然后根据需要进行修改。

    其他有趣的链接:


    虚拟助手的东西

    了解上述工作原理后,您将能够通过执行以下操作来修改虚拟助手模板以处理 BookFlight 意图:

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

    运行此脚本的结果应该是在本地创建了一堆文件,以及正在更新的DispatchLuis.cs 文件以包含您的新意图。您还应该检查创建的Summary.html 文件以查看您的新意图。现在,您必须更新 VA 代码才能在触发新意图时实际执行某些操作 - 在 MainDialog.cs 文件的 RouteAsync 方法中添加另一个 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));
        }
        ...
    }
    

    【讨论】:

    • 你去@Dmitresky 怎么样?
    • 我已经创建了对话框。谢谢!但我不明白第二步会发生什么。请求会发送给调度员吗?
    • 您是在询问瀑布对话框中的第二个和后续步骤吗?
    • 如果你使用的是虚拟助手模板,那么取消是内置的。你可以通过在机器人启动时输入“取消”来测试它,你应该得到类似“没有什么可以取消”的信息作为消息。但是,当您处于对话流中时,您将看到取消确认消息。这样做的流程是代码将在转到活动对话框的代码之前转到 MainDialog.cs 中的 OnInterrupt 方法,因此用户将能够取消而不是让他们的输入被您的内部对话框吞没。跨度>
    • MainDialog.cs 继承自 RouterDialog 继承自 InterruptableDialogOnInterruptDialogAsync 是您感兴趣的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-19
    • 1970-01-01
    相关资源
    最近更新 更多