假设我想让一个比萨订购DialogFlow代理。要点披萨,我们需要三样东西:size
,type
和toppings
。
如果我们想使用后续的意图方法,而不是使用实体,那么用户可能提供信息的组合就太多了。
他说:我想要一个比萨饼->没有信息
我想要小比萨饼->号
我想要小奶酪比萨饼->大小和型号
4:我想要小奶酪比萨,上面有橄榄->大小、型号和配料。
5:我想要小比萨饼,配橄榄,->大小和配料
..。
诸若此类
如何解决这个问题?
如果我们有更多的实体(2^n组合),就会有这么多的组合。
注1:不能使用实体和插槽选项,因为如果我们沿着这条路走下去,就会出现很多问题,比如重提示循环、验证等等。
有没有更好的解决办法?
备注2:如果我们使用实体,标记它们所需的,并设置提示,如果它没有从用户那里得到想要的输入,它就会被困在重新提示循环中,也就是说,它总是要求用户提供相同的提示符(或随机的)提示。在我的用例中,它不利于用户体验。如果我们用后续的意图代替,那么我们就可以为解决这个问题的所有意图设置后备意图。(请注意,这只是用例的例子)
This is another example为什么我使用跟踪意图,它也解决了我的日期捕获问题。我采取了@sys.date.recent
,并设置了一个后备意图,以捕获输入,如last week, last month
等,这是不可能的使用插槽。
发布于 2018-10-08 07:48:40
首先,记住意图应该反映用户所说的内容,而不一定是您正在做的事情。
表面上,不清楚为什么插槽填充(无论是满足还是使用内置提示)不能满足您的需求。由于您已经指出所有三位信息都是必需的(大小、类型和顶部),您可以在短语中将它们标记为这样,对话框流将提示输入丢失的信息,直到它得到所有信息为止。
你几乎肯定不想使用后续意图。这些都是好的,当您总是发送一个特定的响应,它总是有一组来自用户的非常狭窄的回复,但是如果来自您的操作的响应会以许多不同的方式提示用户回复,那么这些都是非常糟糕的。
相反,我会使用一个相关的概念:上下文。(至少如果你不打算使用插槽填充。)当你问他们想要什么的时候,设定一个背景,让你知道他们想要什么。然后有一个或多个意图,将其作为接受用户可能说的各种内容的输入上下文。你的网络钩子应该看看你是否有你需要的信息,如果没有,提示他们你还想要什么。最后,提示确认,但他们可能会说一些东西,以调整订单。
https://stackoverflow.com/questions/52700975
复制