IBM Cloud Docs
如何处理对话

如何处理对话

对话使用在用户输入中识别到的意向以及应用程序中的上下文来与用户进行交互,并最终提供有用的响应。

该对话框将意向 (用户表示要执行的操作) 与响应 (机器人返回的操作) 相匹配。 响应可能是对问题 (例如,What are your store hours? ) 的回答,也可能是对命令 (例如,下订单) 的执行。 意向和实体的信息可能足以确定正确的响应,但若不能,对话可能会要求用户提供正确响应所需的更多输入。 例如,如果用户询问,Where can I get some food? 您可能想要明确他们是要餐厅还是杂货店,进餐还是拿出来等等。 您可以在文本响应中要求提供更多详细信息,并创建一个或多个子节点来处理新的输入。

对话在 watsonx Assistant 中以图形方式表示为树。 创建分支来处理您希望交谈处理的每个意向。 分支由多个节点组成。

对话节点

每个对话节点至少包含一个条件和一个响应。

Shows user input going to a box that contains the statement If: CONDITION, Then: RESPONSE
Empty node

  • 条件:指定要触发对话中的此节点,用户输入中必须提供的信息。 该信息通常是特定意向。 还可以是实体类型、实体值或上下文变量值。 有关更多信息,请参阅 条件
  • 响应:助手用于响应用户的话语。 响应还可以配置为显示图像或选项列表,或者触发程序化操作。 有关更多信息,请参阅 响应

您可以将节点视为具有 if/then 构造:如果此条件为 true,那么返回此响应。

例如,如果助手的自然语言处理功能确定用户输入包含 #cupcake-menu 意向,那么将触发以下节点。 触发节点的结果是,助手会使用相应的回答进行响应。

显示用户询问有关蛋糕口味的信息。 If 条件是 #cupcake-menu,Then 响应是一个蛋糕口味的列表。
简单条件和响应

具有一个条件和响应的单个节点可以处理简单的用户请求。 但是,用户往往会有更复杂的问题,或者希望获得更复杂任务的帮助。 为此,可以添加子节点,这些子节点会要求用户提供助手所需的任何其他信息。

显示对话框中的第一个节点询问用户想要的蛋糕类型 (无麸质或常规),并且有两个子节点提供不同的响应,具体取决于用户的回答。
带有子节点的Node

对话流

创建的对话由助手从树中的第一个节点到最后一个节点进行处理。

箭头指向 3 节点旁边,以显示对话从第一个节点流向最后一个
Node 流

随着助手沿树向下推进,如果发现符合的条件,就会触发相应节点。 然后,服务会沿着触发的节点移动,以根据任何子节点条件检查用户输入。 在检查子节点时,它将再次从第一个子节点移至最后一个子节点。

助手将继续在对话树中从第一个节点向最后一个节点推进,然后沿每个触发的节点从第一个子节点向最后一个子节点推进,再沿每个触发的子节点推进,直至到达所在分支中的最后一个节点。

显示箭头 1 从第一个根节点指向最后一个根节点,箭头 2 从触发节点的长度指向,箭头 3 从触发节点的第一个子节点指向最后一个子节点。
Node 流

开始构建对话时,必须确定要包含的分支数以及这些分支的放置位置。 分支的顺序非常重要,因为节点是按第一个到最后一个的顺序求值的。 将使用其条件与输入相匹配的第一个根节点;树中后续的任何节点都不会触发。

助手到达分支末尾,或者在当前所求值的子节点集内找不到求值为 true 的条件时,会跳回至树的基本节点。 助手从第一个到最后一个处理根节点。 如果没有任何条件求值为 true,那么将返回树中最后一个节点的响应,该响应通常具有始终求值为 true 的特殊 anything_else 条件。

可以通过以下方式,中断标准的从头到尾的流。

  • 通过定制在处理某个节点后执行的操作。 例如,可以将一个节点配置为在进行处理后直接跳转至另一个节点,即便这另一个节点位于树中的更早位置。 有关更多信息,请参阅 定义下一步操作

  • 通过配置要跳转至其他节点的条件响应。 有关更多信息,请参阅 条件响应

  • 通过配置对话节点的离题设置。 离题还可能会影响用户在运行时如何在各个节点之间移动。 如果从大多数节点启用离题并配置了返回,那么用户可以更轻松地从一个节点跳转至另一个节点,然后再跳转回前者。 有关更多信息,请参阅 离题

样本对话

此图显示了使用图形用户界面对话编辑器构建的对话树的实体模型。

具有示例内容的样本对话树
对话树

此图中的对话树包含两个根对话节点。 典型的对话树可能有更多节点,但通过此图,可一窥其中一小部分节点可能是什么样的。

  • 第一个根节点以意向值为条件。 它有两个子节点,每个子节点均以一个实体值为条件。 第二个子节点定义了两个响应。 如果上下文变量的值与条件中指定的值匹配,那么将向用户返回第一个响应。 否则,将返回第二个响应。

    要捕获有关特定主题的问题,然后在根响应中询问由子节点处理的跟进问题,此标准类型的节点会很有用。 例如,它可能会识别用户有关折扣的问题,然后提出跟进问题:用户是否属于与公司有特殊折扣协议的任何组织。 子节点会根据用户对有关组织成员资格问题的回答来提供不同的响应。

  • 第二个根节点是带槽的节点。 它也以意向值为条件。 此节点定义了一组槽,其中要向用户收集的每条信息一个槽。 每个槽会提出一个问题,以从用户那里探取回答。 它会在用户对提示的回复中查找特定实体值,然后将其保存在槽上下文变量中。

    此类型的节点对于收集您可能需要代表用户执行事务的详细信息很有用。 例如,如果用户的意向是预订航班,那么槽可以收集出发地和目的地位置信息、出行日期等。