【问题标题】:Return back to the same place in the dialog tree after switching between intents in Amazon LEX在 Amazon LEX 中的意图之间切换后返回对话树中的相同位置
【发布时间】:2019-06-01 01:23:21
【问题描述】:

假设我有一个用于预订租车的对话树。 该机器人有一个名为“orderIntent”的主要意图和一个名为“colorIntent”的第二个意图。 在“orderIntent”对话框中,将要求用户选择汽车类别、日期和价格(所有这些在此意图中都有一个单独的位置)。

我希望在对话框中的任何给定时刻,用户都能够调用“colorIntent”意图并根据需要设置颜色,完成后返回树中的同一位置他之前离开的对话框。

例如,当用户被要求选择预订日期,并回复“我想为汽车选择绿色”时,这将调用“colorIntent”意图,用户将能够选择一种颜色。

之后,用户应该返回到他部分完成的对话的同一部分,并且将再次被要求选择预订日期。我想实现这一点,同时保留他在主对话框中已经部分完成的关于他已经选择的汽车类别和价格的信息,以及关于他从“colorIntent”意图中选择的颜色的新信息。

如何在机器人的 AWS Lambda 中配置这样的逻辑?

【问题讨论】:

    标签: aws-lambda amazon-lex aws-lex


    【解决方案1】:

    https://github.com/awslabs/serverless-application-model/blob/master/examples/apps/lex-book-trip-python/lambda_function.py

    尝试查看 book_car 功能,这将解决您的问题。因为在这里他们正在获取 book_hotel 的一些槽值并在 book_car 中进行设置。

    【讨论】:

    • 据我所见,我认为它基于 BookTrip Lex 蓝图。在这种情况下,意图共享信息,但前提是意图已经实现并完成。如果在对话框中间调用第二个意图,对话框将不会恢复到您离开第一个意图时的部分。
    【解决方案2】:

    使用sessionAttributes 来实现这一点,因为sessionAttributes 保留在意图中,而slots 仅保留在每个意图中。

    Intent_A 逻辑可以运行,同时填充slots,并且槽值也应该保存在sessionAttributes 中。然后在 IntentA 的任何一点,用户都可以触发 Intent_B。

    现在 Intent_A 的 slots 被 Intent_B 的 slots 覆盖,但 Intent_A 的槽值仍保存在 sessionAttributes 中。

    有关如何在意图之间进行更改的额外信息:

    你有两个选择:

    (1) 强制用户再次触发 IntentA 提示,“要继续预订汽车,请说,预订 汽车”

    (2) 使用confirmIntent 返回 IntentA,但需要 问一个确认问题,例如,“你想继续预订吗 汽车?” 无论如何,对此的响应都会转到 Intent_A,所以 在 Intent_A 中,您只需检查 confirmationStatus 这将是 "Confirmed""Denied",具体取决于 用户回答了这个问题。如果确认,那么您可以继续 Intent_A,如果被拒绝,则应关闭 Intent_A。

    (在 dialogAction 类型下查看confirmIntent here

    回到 Intent_A 后,您应该检查是否有任何插槽数据在 sessionAttributes 内,并将这些数据强制返回到适当的 slots。然后您的原始逻辑可以检测哪些插槽已被填充,并从中断处继续。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多