考虑通过拥有聊天机器人或虚拟助理处理订单,您可以更快地销售或帮助客户。订单流程具有某些信息,需要填写以完成该过程。当您构建一个自动程序时,这称为槽填充。本指南是有关如何创建槽填充流的演练。
您可能还喜欢:
插槽填充聊天机器人将永远无法满足人类的期望
插槽填充是收集从用户的某些位的信息之前,可以给出最终响应。典型的用例是进行某种订单,其中某些参数需要结算才能下订单,例如预订航班或订购一双鞋。
在这里,我们将构建一个用于订购咖啡的流程:
用户:我想点杯咖啡。
机器人:好的,你要什么咖啡?用户:请加卡布奇诺。
机器人:你想种什么尺寸?用户:小会很好。
机器人:好的,一个小卡布奇诺将在5分钟内准备好取货。
有时,用户会在第一个请求中提及特定类型的咖啡和/或大小,因此您的流量也需要满足这一点:
用户:请来一个小卡布奇诺好吗?
机器人:好的,一个小卡布奇诺将在5分钟内准备好取货。
其他时候,用户可能提供的信息比特定点要求的信息多:
用户:请我点一杯咖啡。
机器人:好的,你要什么咖啡?用户:请提供一个小卡布奇诺咖啡。
机器人:好的,一个小卡布奇诺将在5分钟内准备好取货。
以下是创建槽填充流的步骤:
- 决定要填充的插槽:
- 您需要什么信息?
- 创建基本流:
- 创建流结构
- 填充节点和过渡
- 汇总在最终输出中收集的信息。
- 拾取实体:
- 为每个插槽添加一个流变量。
- 为每个插槽添加一个流侦听器。
- 指定何时应跳过输出(自动程序不应要求已知内容)。
- 在”试用”面板中测试所有方案。
完成后,您的流将如下所示:
决定插槽
在开始创建流之前,我们首先必须决定需要从用户那里获得哪些信息对于咖啡订单,我们的机器人需要收集两条信息:咖啡的类型和大小。
我们将利用实体 COFFEES_服务。实体和咖啡。我们之前创建的这些实体将在流侦听器中使用,以在用户在流中提及这些值时选取这些值。当提示相应的值时,它们还将用于检查用户响应。
创建基本流
现在,我们将开始创建流的第一个简单版本。这包括设置结构和填充触发器、过渡和输出节点。我们将一步一步地完成这些。
设置流结构
让我们开始:
- 创建新流并调用
User wants to order a coffee
它。 - 选择输出节点,然后向其添加另一个输出节点。
- 然后选择最新的输出节点,然后再添加一个。您的流现在应该由类触发器和三个连续输出节点组成。
填充触发器
现在是时候填充触发器了:
- 将以下学习示例复制到剪贴板:
A small filter coffee, please
Can I get a coffee?
Can I have a coffee, please?
Can I order a coffee
Can I order an espresso?
Can you get me a coffee
Could I get a large macchiato?
Could I have a flat white
Could I order a large americano
Give me a frappuccino, please
I want a small cappuccino!
I want espresso
I want to order a coffee
I would like a coffee
I would like to order a coffee
I'd like a large espresso
I'd like to order an americano
May I have a filter coffee? - 选择触发器,打开右侧的”学习示例”面板,然后单击”没有积极学习示例”的位置。然后点击 Ctrl + V 粘贴学习示例。您可以看到,当示例出现在字段中时,它有效。如果您不确定如何一次导入所有示例,请查看下面的视频。
- 命名触发器
Can I order a coffee?
。
填充第一个输出节点
在触发器之后的第一个输出节点中,我们希望提示用户更详细地指示所需的咖啡类型:
- 选择第一个输出节点。
- 打开右侧的”答案”面板,粘贴以下内容:
Ok, what coffee would you like?
。 - 为节点命名
Ask for coffee type
。
配置第一个转换
在上面的输出节点中,我们向用户询问所需的咖啡类型如果用户不回答我们服务的咖啡类型,我们将不继续订购过程。因此,我们将为这一过渡提供一个条件,需要提及咖啡类型:
- 从”询问咖啡类型”节点选择传出过渡。
- 向右打开”示例”面板,以便将切换设置为:
- “条件”和
- “在继续之前获取输入”
- 将实体
%COFFEES_SERVED.ENTITY
粘贴到条件字段中。 - 命名过渡:
User responds with coffee type
。
填充第二个输出节点
在上面的第一个输出节点中,我们向用户询问了所需的咖啡类型。在这里,是时候要求咖啡的大小:
- 选择第二个输出节点。
- 在右侧粘贴的”应答”面板
What size would you like?
中。 - 命名此
Ask for size
节点。
配置上次转换
在询问上一个输出节点中的用户咖啡大小后,我们现在希望用户在他的回答中给我们一个咖啡类型。因此,我们再次将此转换作为条件,但这次我们需要在用户输入中存在一个大小才能遍历转换。
- 选择流中最后两个输出节点之间的过渡节点。
- 使用”示例”面板中的切换进行此转换:
- “条件”和
- “在继续之前获取输入”。
- 粘贴:
%COFFEE_SIZES.ENTITY
到此转换的条件字段。 - 命名
User responds with size
它。
填充最终输出节点
现在我们快完成了!剩下的唯一是汇总和确认整个订单的最终输出节点:
- 选择最终输出节点。
- 粘贴:
Ok, a ${orderedCoffeeSize} ${orderedCoffeeType} will be ready for pickup in 5 minutes.
进入”答案”字段。 - 命名此输出
Summarize order
节点。 - 点击”保存”。
再试一次!
现在继续,并给它第一次尝试试用。例如,您可以尝试以下对话:
用户:我想点杯咖啡。
机器人:好的,你要什么咖啡?用户: 卡布奇诺, 请
机器人:好的,一个小卡布奇诺将在5分钟内准备好取货。
您确实已经注意到,最后的输出并非您预期的。在引导您完成整个对话时,机器人在最后一个答案中显示,他无法接取您的订单。原因是:我们在此输出中使用了两个流变量(订购的FeeInType,订购的CoffeeSize),我们既没有定义也没有为其分配任何值。现在,我们将在下一节中更改这一点。
拾取实体
因此,现在我们有了基本流程,但机器人还没有拿起咖啡类型或用户订购的咖啡大小。为了能够拿起它们,我们基本上必须做两件事:
- 添加流变量
- 添加向这些变量赋值的流侦听器。
我们将在下面指导您完成这两个操作。
添加流变量
现在,我们将添加两个流变量,一个用于存储咖啡类型,另一个用于存储咖啡大小。
- 在解决方案的主窗口中,移动到”FLOW”选项卡,并在左侧的紫色导航栏中选择”变量”。
- 添加以下两个变量,并将两个变量初始化为空
""
字符串:orderedCoffeeType
orderedCoffeeSize
添加流侦听器
仅仅创建变量是不够的。我们现在必须确保他们得到各自的价值。我们希望我们的机器人存储咖啡类型和大小,无论他们提到流。因此,我们使用两个流侦听器。这是如何去:
- 移动到”FLOW”选项卡。在左侧的紫色导航栏中选择”听众”。
- 单击右上角的小”添加”图标以创建流侦听器。
- 创建两个听器,一个用于咖啡类型,一个用于大小。
- 咖啡类型的听者:
- 名字:
Pick up coffee type
- 条件:
%COFFEES_SERVED.ENTITY^{ orderedCoffeeType = lob.coffeeType }
- 名字:
- 咖啡大小的听者
- 名字:
Pick up coffee size
- 条件:
%COFFEE_SIZES.ENTITY^{ orderedCoffeeSize = lob.coffeeSize }
- 名字:
- 咖啡类型的听者:
- 保存流。
两个侦听器条件都包含传播脚本。对于咖啡类型,我们告诉 Teneo 将流量变量”订购的咖啡类型”设置为ai/studio/语言理解/概念/实体_实体变量”rel=”nofollow”目标=”\blank”_实体变量咖啡类型。顾名思义,实体变量属于实体和语言对象,并且使用前缀”lob”在传播脚本中访问它们,如下所示:
对于尺寸,我们同样这样做;我们将排序的流量变量 FeeFeeSize 设置为实体变量 coffeeSize 的值。
再试一次!
现在是时候再试一次了!转到尝试,并询问机器人以下:
用户:我想点杯咖啡。
机器人:好的,你要什么咖啡?用户:请加卡布奇诺。
机器人:你想种什么尺寸?用户:小会很好。
机器人:好的,一个小卡布奇诺将在5分钟内准备好取货。
现在,这应该能够顺利解决。但是,一旦您稍微更改了答案,您将获得以下消息:
用户:我想点杯咖啡。
机器人:好的,你要什么咖啡?用户:请提供一个小卡布奇诺咖啡。
机器人:你想种什么尺寸?用户:小会很好。
机器人:好的,一个小卡布奇诺将在5分钟内准备好取货。
机器人问你,你想什么样的大小,尽管你已经提到你以前的答案的大小。如果自动程序跳过用户已经给出答案的问题,即使没有明确提示这样做,情况会好得多。在 Teneo 中,您可以使用”跳过条件”来实现此目的。下一节将介绍如何。
指定何时应跳过输出
作为最后一步,我们希望避免提示用户已经提到的事情。在 Teneo 中,您可以通过向输出节点添加”跳过条件”来执行此操作:
- 选择”询问咖啡类型”节点。
- 在右侧打开其”跳过条件”面板。
- 单击”添加”以创建跳过条件。粘贴
orderedCoffeeType
到”跳过条件”字段中。如果变量设置为 true,则计算为 true;如果变量为空,则计算为 false - 现在,使用”选择目标”旁边的下拉菜单来确定流处理应该如何进行。在这种情况下,它应该是”用户使用咖啡类型进行响应”。
- 点击”保存”。
我们在这里所做的是告诉 Teneo: orderedCoffeeType
如果您在到达”询问咖啡类型”输出节点时具有值,请跳过它并遍历路径”用户使用咖啡类型响应”,而无需等待用户的输入但对于该输出节点,应根据 是否已知条件对跳过 orderedCoffeeSize
条件。
测试方案
现在是时候测试流了!
用户:我想点杯咖啡。
机器人:好的,你要什么咖啡?用户:请提供一个小卡布奇诺咖啡。
机器人:好的,一个小卡布奇诺将在5分钟内准备好取货。
现在可以将所有详细信息放入单个请求中:
用户:请来一杯大浓咖啡吗?
Bot:好的,5分钟后就可以准备一大杯浓缩咖啡了。