了解 Amazon Lex V2 机器人会话 - Amazon Lex

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

了解 Amazon Lex V2 机器人会话

用户启动与您的机器人的对话时,Amazon Lex V2 会创建一个会话。您的应用程序与 Amazon Lex V2 之间交换的信息组成了对话的会话状态。当您发出请求时,会话会通过您指定的标识符进行标识。有关会话标识符的更多信息,请参阅RecognizeTextRecognizeUtterance操作中的sessionId字段。

您可以修改在应用程序和自动程序之间发送的会话状态。例如,您可以创建和修改其中包含会话自定义信息的会话属性,也可以通过设置对话上下文来更改对话流,以解释下一个表达。

您可以通过三种方式来更新会话状态。

  • 将会话信息作为调用 RecognizeTextRecognizeUtterance 操作的一部分,以内联方式传递。

  • 使用 Lambda 函数和在每轮对话之后调用的 RecognizeTextRecognizeUtterance 操作。有关更多信息,请参阅 整合一个 AWS Lambda 在你的机器人中发挥作用。另一种是在应用程序API中使用 Amazon Lex V2 运行时来更改会话状态。

  • 通过操作可以帮助您管理与机器人的对话中的会话信息。这些操作是PutSession操作、GetSession操作和DeleteSession操作。使用这些操作,您可以获取自动程序与用户会话的状态信息,还可以对状态执行更精细的控制。

如果您希望获取会话的当前状态,请使用 GetSession 操作。此操作会返回会话的当前状态,包括与用户进行的对话的状态、已经设置的任意会话属性以及当前意图和 Amazon Lex V2 识别为与用户言语匹配的任何其他意图的槽位值。

PutSession 操作可让您直接操作当前会话状态。您可以设置会话,包括机器人接下来要执行的对话操作类型以及 Amazon Lex V2 向用户发送的消息。这让您可以控制与自动程序的对话流。将对话操作 type 字段设置为 Delegate,可以让 Amazon Lex V2 确定机器人的下一个操作。

您可以使用 PutSession 操作创建与自动程序的新会话,并设置自动程序在开始时应使用的目的。您还可以使用 PutSession 操作将一个目的更改为另一个。创建会话或更改目的时,您还可以设置会话状态,例如槽值和会话属性。新目的完成后,您可以选择重启之前的目的。

来自 PutSession 操作的响应包含与 RecognizeUtterance 操作相同的信息。您可以使用此信息向用户提示信息的下一部分,就像您对待 RecognizeUtterance 操作的响应一样。

使用 DeleteSession 操作以删除现有会话并使用新会话重新开始。例如,在您测试自动程序时,可以使用 DeleteSession 操作从自动程序删除测试会话。

会话操作可用于履行 Lambda 函数。例如,如果您的 Lambda 函数返回 Failed 作为履行状态,您可以通过 PutSession 操作将对话操作类型设置为 close,将 fulfillmentState 设置为 ReadyForFulfillment 以重试履行步骤。

您可以对会话操作采取下列措施:

  • 让自动程序启动对话而不是等待用户启动。

  • 在对话期间切换目的。

  • 返回到以前的目的。

  • 在交互过程中启动或重新启动对话。

  • 验证槽值并让自动程序重新提示无效的值。

下文分别详细介绍了这些操作。

启动新会话

如果您希望自动程序开始与用户的对话,可以使用 PutSession 操作。

  • 创建没有槽的欢迎目的,并创建一条总结性消息向用户提示阐明目的。例如,“您希望订购什么? 您可以说‘订一杯饮料’或‘订一个披萨’。”

  • 调用 PutSession 操作。将目的名称设置为欢迎目的的名称,并将对话操作设置为 Delegate

  • Amazon Lex 将使用您的欢迎意图中的提示做出响应,以启动与用户的对话。

切换意图

您可以使用 PutSession 操作将一个目的切换为另一个。您还可以使用它切换回以前的目的。您可以使用 PutSession 操作为新目的设置会话属性值或槽值。

  • 调用 PutSession 操作。将目的名称设置为新目的的名称,并将对话操作设置为 Delegate。您还可以为新目的设置所需的任意槽值和会话属性。

  • Amazon Lex 使用新意图启动与用户的对话。

恢复以前的意图

要恢复以前的意图,可以通过 GetSession 操作获取意图状态,执行所需的交互,然后通过 PutSession 操作将意图设置回其之前的对话状态。

  • 调用 GetSession 操作。存储意图状态。

  • 进行另一次互动,例如履行不同的意图。

  • 根据为上一个意图保存的信息调用该 PutSession 操作。这会将用户返回到对话中相同位置的上一个目的。

在某些情况下,可能需要恢复用户与自动程序的对话。例如,假设您创建了一个客户服务自动程序。您的应用程序确定用户需要与客户服务代表交谈。在与用户交谈之后,客户服务代表可以使用所收集的信息将对话引导回自动程序。

要恢复会话,请使用类似于下文的步骤:

  • 您的应用程序确定用户需要与客户服务代表交谈。

  • 使用 GetSession 操作获取目的的当前对话状态。

  • 客户服务代表与用户交谈并解决问题。

  • 使用 PutSession 操作设置目的的对话状态。这可能包括设置槽值、设置会话属性或者更改目的。

  • 自动程序恢复与用户的对话。

验证槽位值

您可以使用客户端应用程序验证对自动程序的响应。如果响应无效,您可以使用 PutSession 操作获取用户的新响应。例如,假设您的鲜花订购自动程序只能卖郁金香、玫瑰和百合。如果用户订购康乃馨,您的应用程序可以执行以下操作:

  • 检查 PostTextPostContent 响应返回的槽值。

  • 如果槽值无效,则调用 PutSession 操作。您的应用程序应清除槽值,设置 slotToElicit 字段,并将 dialogAction.type 值设置为 elicitSlot。(可选)如果您希望更改 Amazon Lex 用于引入插槽值的消息,可以设置 messagemessageFormat 字段。