构建对话模型

对话模型定义了用户可以向您的 Action 说出什么内容,以及您的 Action 会如何响应用户。对话模型的主要构成要素包括意图类型场景提示。调用您的某个 Action 后,Google 助理会将用户交给该 Action,此 Action 会根据您的对话模型开始与用户对话,其中包括:

  • 有效用户请求 - 为了定义用户可以对您的 Action 说出什么内容,您可以创建一组 intent 来增强 Google 助理 NLU,使其能够理解特定于您的 Action 的请求。每个意图都定义了训练短语,用于描述用户可以说什么来匹配该意图。Google 助理 NLU 会扩展这些训练短语以包含相似的短语,这些短语的聚合会生成 intent 的语言模型。

  • 操作逻辑和响应 - 场景会处理 intent、执行所需的逻辑并生成提示以返回给用户。

图 1. 对话模型由定义用户体验的意图、类型、场景和提示组成。符合调用条件的 intent 也可与您的对话匹配。

定义有效的用户请求

如需定义用户可以对您的 Action 说出什么内容,您可以组合使用 intent 和类型。借助用户 intent 和类型,您可以使用自己的语言模型增强 Google 助理 NLU。借助系统 intent 和类型,您可以充分利用内置语言模型和事件检测功能,例如用户希望退出您的 Action 或 Google 助理,却未检测到任何输入。

创建用户 intent

借助用户 intent,您可以定义自己的训练短语,从而定义用户可以对您的 Action 说出什么内容。Google 助理 NLU 使用这些短语进行自我训练,以便理解用户所说的内容。当用户说出的内容与用户 intent 的语言模型匹配时,Google 助理会匹配该 intent 并通知您的 Action,以便您执行逻辑并响应用户。

图 1. 用户 intent 示例

如需创建用户 intent,请执行以下操作:

  1. Develop 标签页中,依次点击 User intent > ⊕ (New intent),指定名称,然后按 Enter 键创建 intent。
  2. 在左侧菜单中点击新创建的 intent。此时会显示 Intent 编辑器
  3. 将训练短语添加到意图中。您应该添加尽可能多的训练短语来训练 Google 助理 NLU。
  4. 可选:为训练短语添加注解,以指示 Google 助理 NLU 从用户输入中解析和提取与指定类型匹配的类型化参数:
    1. 添加新参数字段中,输入参数的名称。
    2. 从下拉菜单中选择一种系统类型,或创建自定义类型
    3. 指定参数是否为列表。这样,该参数就可以收集同一类型的多个值。
    4. 添加训练短语部分中,突出显示要应用类型的文本。这会告知 Google 助理 NLU 将突出显示的文本视为参数。如果用户说出与类型相匹配的内容,NLU 会将该值作为参数提取。

创建系统 intent

借助系统 intent,您可以通过预定义的语言模型将 intent 用于常见事件,例如用户想要退出您的 Action 或用户输入超时。如需创建系统 intent,请执行以下操作:

  1. 开发标签页中,点击系统 intent。有一组系统 intent,如 NO_MATCHNO_INPUTCANCEL
  2. 每个系统 intent 都包含自己的处理程序,您可针对每种系统 intent 对其进行自定义。例如,系统 intent 允许您在事件发生时触发 webhook 事件并发送静态提示。

创建自定义类型

借助自定义类型,您可以创建自己的类型规范,以训练 NLU 理解应映射到单个键的一组值。

图 2. 自定义类型示例

要创建自定义类型,请执行以下操作:

  1. Develop 标签页中,依次点击 Types > ⊕ (New type)
  2. 此类支持哪些类型的值?部分中选择如何提供类型值:

    • 借助字词和同义词,您可以将多个值映射到单个键(称为条目)。您的类型可以包含一个或多个条目。如果您选择此选项,还可以启用以下 NLU 设置:
      • 启用模糊匹配 - 允许匹配包含多个字词的条目,即使这些字词以不同顺序读出也是如此。
      • 接受未知值 - 如果您无法指定所有可能的值,它将根据周围的输入和 intent 训练数据接受未知字词或短语,例如可能添加到购物清单的商品。
    • 正则表达式允许类型与基于 Google 的 RE2 标准的正则表达式模式进行匹配。
    • 自由格式文本允许类型匹配用户所说的任何内容。
  3. 添加条目部分中指定类型值。如果选择自由格式文本,您的类型将匹配任何文本,因此您无需提供任何条目。

构建操作逻辑和响应

Google 助理 NLU 将用户请求与 intent 进行匹配,以便您的 Action 可以在场景中处理这些请求。场景是强大的逻辑执行器,可让您在对话期间处理事件。

图 3. 自定义场景示例

创建场景

以下部分介绍了如何创建场景并为每个场景的生命周期阶段定义功能。

如需创建场景,请执行以下操作:

  1. Develop 标签页中,点击 Scenes > ⊕ (New scene),指定名称,然后按 Enter 键创建场景。
  2. 在左侧菜单中点击新创建的场景。此时会显示场景编辑器

定义一次性设置

当某个场景首次处于活动状态时,您可以在“进入”阶段执行一次性任务。“进入”阶段仅执行一次,并且是唯一不在场景执行循环中运行的阶段。

  1. 在场景中,点击 On enter 阶段以指定其功能。您可以在此阶段指定以下功能:

    • 调用 webhook - 触发 webhook。如需详细了解 webhook,请参阅 webhook 文档。
    • 发送提示 - 指定向用户发送静态提示,以便用户了解如何继续对话。如需详细了解如何指定提示,请参阅提示文档。
    图 4. 进入阶段的场景示例

检查状况

借助条件,您可以检查槽填充、会话存储、用户存储空间和主屏幕存储参数,以控制场景执行流程。

  1. 在场景中,点击 Condition 阶段对应的 + 图标。右侧会显示条件编辑器。您可以在此阶段指定以下功能:

    • 条件 - 指定作为逻辑所依据的实际条件语句。如需了解语法信息,请参阅conditions文档。
    • 调用 webhook - 触发 webhook。如需详细了解 webhook,请参阅 webhook 文档。
    • 发送提示 - 指定要向用户发送的静态提示,以便用户了解如何继续对话。如需详细了解如何指定提示,请参阅提示文档。
    • 过渡 - 指定条件语句为 true 时要过渡到的场景。
图 5. 场景的条件阶段示例

定义槽填充

借助槽,您可以从用户输入中提取类型化参数。

在场景编辑器中,点击槽填充阶段对应的 + 图标。显示槽的编辑器会显示在右侧。您可以为槽指定以下属性:

  • 槽名称:指定槽的名称。如果您想利用槽值映射,请使用与相应 intent 参数相同的名称。
  • 槽类型:使用系统类型或自定义类型指定槽的类型
  • 此槽为必需:将此槽标记为必需。启用后,只有在填充此槽后,槽填充才会完成。
  • 为此槽分配默认值:为从指定会话参数中读取的槽指定默认值。
  • 自定义槽值回写:指定一个会话参数,以在槽填充完成后保留槽的值。
  • 槽验证:在槽填充时触发网络钩子。此设置适用于所有槽。
  • 调用 webhook(在需要槽位时启用):触发 webhook。如需详细了解 webhook,请参阅 webhook 文档。
  • 发送提示(在需要槽时启用):指定向用户发送的静态提示,以便用户了解如何继续对话。如需详细了解如何指定提示,请参阅提示文档。

对于某些槽类型(例如与交易或用户互动相关的槽),会额外显示一个部分供您配置槽。槽配置可以根据您提供的属性改变用户的对话体验。

如需配置槽位,请在执行方式(作为会话参数引用)或内嵌 JSON 编辑器中的 JSON 对象中提供属性。您可以在 Actions Builder JSON 参考文档中找到每种空档类型的可用属性。例如,actions.type.DeliveryAddressValue 槽类型对应于 DeliveryAddressValue 槽的参考内容。

图 6. 场景的槽填充设置示例

槽值映射

在许多情况下,之前的 intent 匹配可能包含部分或完全填充相应场景槽值的参数。在这些情况下,如果槽名称与 intent 参数名称匹配,则由 intent 参数填充的所有槽都会映射到场景的槽填充。

例如,如果用户通过说“我想订购大杯香草咖啡”来匹配订购饮料的意图,那么如果场景定义相同的槽,则系统会认为现有尺寸、口味和饮料类型的槽已填充。

处理输入

在此阶段,您可以让 Google 助理 NLU 将用户输入与 intent 相匹配。您可以通过向场景添加所需的 intent,将 intent 匹配的范围限定为特定场景。这样,您就可以让 Google 助理在特定场景处于活动状态时匹配特定 intent,从而控制对话流程。

  1. 在场景中,点击 User intentHandlingSystem intentHandling 阶段对应的 + 图标。intent 处理程序的编辑器会显示在右侧。您可以指定 intent 处理程序的以下功能:

    • intent - 指定您要在此场景中匹配的 intent。
    • 调用 webhook - 触发 webhook。如需详细了解如何处理 webhook 请求,请参阅 webhook 文档。
    • 发送提示 - 指定向用户发送静态提示,以便他们知道如何响应。如需详细了解如何指定提示,请参阅提示文档。
    • 过渡(如果适用)- 指定当指定的 intent 匹配时要过渡到的场景。
图 7. 场景的用户 intent 处理程序示例
图 8. 场景的系统 intent 处理程序示例