对话流 - 上下文

上下文通过定义对话需要达到的特定状态来控制对话流,以便匹配意图。如果最终用户短语及其训练词具有可比性,则对话流通常会匹配意图。当上下文应用于 Dialogflow 时,它只会在上下文处于活动状态时考虑匹配意图。

因此,有两种上下文可以激活和停用,您还可以控制对话流程 −

  • 输入上下文:仅当输入上下文处于活动状态且最终用户表达与意图匹配时,Dialogflow 才允许匹配意图。

  • 输出上下文:当将输出上下文应用于意图时,Dialogflow 允许在意图匹配后保留上下文,或者在上下文尚未处于活动状态时激活上下文。

上下文示例

在我们为酒店预订演示聊天机器人创建的示例中,只需提供人数和住宿晚数即可进行预订。此外,除了当前参数外,我们还将向我们的 webhook 添加一个新参数,询问用户他们是否更喜欢可以看到山脉或大海的酒店 - totalPersons 和 totalNights。

1. 单击 Dialogflow 控制台中的"预订信息意图"按钮。

2. 在 Context 字段中输入 bookingInfoCtxt 作为输出上下文,然后按 Enter。

Dialogflow Context Example

3. 现在您必须转到"文本响应"部分并按如下所示创建它。由于用户很可能在现实世界中以相同的意图表达他们的愿望,因此可以以不同的方式处理。

Dialogflow Context Example

4.转到履行部分并关闭:为此,请激活 webhook 调用。webhook 调用将移动到新意图。

如上所示,我们为此意图创建了一个输出上下文,它将用于发送到另一个记录用户首选房间视图的意图。让我们看看如何:

  • 创建一个新目的并将其命名为房间视图。

  • 在上下文部分,输入我们在前面的步骤中创建的输入上下文的值:输入 bookingInfoCtxt 后按 Enter。

  • 我们只是在短语训练中包含了海洋和山脉值;您可以添加更多值以提高确定用户意图的准确性。

  • 单击保存后,您必须通过从左侧菜单中选择实体来创建一个名为 room-view-preference 的新实体。实体只是一种可以从意图中检索的类型,我使用两个值创建了它,如下所示。

Dialogflow Context Example

5. 现在您必须返回"房间视图"意图,并且必须为训练短语设置实体,如下所示(针对两者):

Dialogflow Context Example

6. 移至操作和参数部分并按如下方式完成。使用 #[ContextName].[ParamName] 验证参数是如何从上下文中获取的。

Dialogflow Context Example

后续意图

后续意图允许您自动定义意图配对的上下文。后续意图是与其相关的父意图的子项。创建后续意图时,同名的输入上下文将添加到后续意图,输出上下文将自动添加到父意图。只有当匹配上一轮对话的父意图时,后续意图才会匹配。此外,您还可以在各个级别创建嵌套的后续意图。

Dialogflow 针对典型的最终用户响应(如"是"、"否"或"取消")具有各种预先建立的后续意图。为了处理独特的响应,您还可以设计自己的后续意图。

例如,以下嵌套意图可以出现在发型师代理中。

意图 训练短语 输入上下文 输出上下文 意图响应
Appointment Hello appointment-followup Would you like to make an appointment?
Appointment - yes Yes appointment-followup appointment-yes-followup Would you like a haircut?
Haircut - yes Yes appointment-yes-followup Your appointment is set.
Haircut - no No appointment-yes-followup Goodbye.
Appointment - no No appointment-followup Goodbye.

管理上下文

上下文通常在设计阶段(创建代理时)配置。例如,使用以下训练短语:"我想将披萨添加到我的购物车中。"

在某些更复杂的情况下,您可能还想构建在运行时检索和设置某些上下文的代码。例如,您可以验证小工具的位置并将其添加到上下文中,以便以后访问它。

上下文命名

以下规则适用于命名上下文 −

规则 示例
Use alphanumeric names. mycontext1
Use - or _ instead of spaces. my-context-1
Names are not case sensitive. Abc123 and abc123 are considered equivalent.
All context names are lowercase when using the API. abc123