我正在使用IBM Watson Assistant创建聊天机器人。我正在使用具有意图,实体和对话框流程的Web界面(我不知道它的名称,我只是将其称为Web界面)。我有四个问题,希望有人能提供帮助。
我创建了两个强度:#how_are_you,示例为“你好吗?”并以示例“我很好”为意图#feeling_good。当然,针对这两个目的,我有更多示例。在对话框中,我现在有一个父节点在寻找#feeling_good,一个子节点在寻找#how_are_you(跳过用户输入)。用户现在输入句子“我很好。你好吗?”那么只会触发#feeling_good,而不会触发#how_are_you。如何仅用一个用户输入即可触发两种意图?
我希望对话框中有一个节点等待100秒,然后向用户发送另一条消息。等待是没有问题的(使用暂停),但是如果用户在等待期间没有发送其他消息,那么我该怎么做才在100 s之后才发送一条消息?这意味着当用户发送消息时,应取消等待节点。
我有一个检查特定意图的节点。当意图不匹配时,我跳回到父节点。问题是每次都重复来自父节点的文本。回跳时如何防止这种重复?
最后一个问题可能更棘手。我想定义一个数字数组[1,2,3,4,5]。然后,一个节点应从该数组(例如2)中采样一个随机数而不进行替换,即剩余数组为[1,3,4,5]。一段时间后,另一个节点应从数组中随机选择另一个数字(例如4)。等等。如何实现呢?我了解变量(例如$ var),但是我不知道如何表示数组和对随机数进行采样。
非常感谢您提前回答。祝大家新年快乐。
答案 0 :(得分:1)
1)在Watson Assistant中,始终首先使用具有最高置信度的意图。因此,处理由一个句子触发的多个意图很棘手。 “最佳”解决方案是使用复合意图-#HELLO_HOW_ARE_YOU。或者,您可以创建条件来检查返回的前两个意图是否为#HELLO和#HOW_ARE_YOU
的组合2)理想情况下,应由在界面中实现聊天控制台的客户端来处理由于不活动而导致的等待和发送消息。 WA不太适合这些类型的操作,尽管有一些支持,但是处理这些问题的更好方法是让您的客户端应用程序(检测到不活动状态时)发送要映射到#INACTIVITY_INTENT的内容,WA会响应您的消息加上这个意图。
3)不要跳到该节点,而是跳到该节点的第一个子节点并使用wait for user input
。
4)这是可能的。 WA表达式语言支持获取随机数,获取数组的大小以及从数组中删除元素。
例如。 <? $array.remove(new Random().nextInt(3))?>