我正在使用Rivescript开发聊天机器人,并试图在条件响应中使用关键字触发器。
在网站上的tutorial中,说明可以使用...
[*]
可选选项,可忽略消息的一部分...
这在初始提示+ [*] you [*]
中工作正常,但是当我尝试使用此方法捕获包含yes
或no
作为其一部分的任何响应时有条件的回应似乎打破了吗?我没有收到错误代码,但是它只是默认为- So, back to the matter at hand...
作为响应。
+ [*] you [*]
- Oh, so we're talking about me now?
+ *
% oh so we are talking about me now
* <star> == [*] no [*] => Whatever...
* <star> == [*] yes [*] => This should be fun.{topic=myself}
- So, back to the matter at hand...
如果这行得通,我希望对话能够进行,例如:
User: What do you do?
Bot: Oh, so we're talking about me now?
User: Yes, I suppose so
Bot: This should be fun.
因此,没有明确用户输入,有没有办法使用条件响应?而是仅仅包含某种回应的人?我想这是在两个实例中同时使用*
和<star>
的情况下出现的问题,但是无法在框架内找到解决方案吗?也许我缺少什么?我也尝试过使用[*]
和*yes*
。
更新:
也许,我使用的条件运算符有问题吗?当我只是想找出一个值是否包含在另一个值中时,也许*no*
不是比较两个值的正确方法?此后,我发现了 Working Draft,但这里也没有运气...
答案 0 :(得分:1)
好的,所以我找到了使用对象宏的解决方案-但这不是很优雅。
此解决方案将用户对lowercase
变量中的test
对象宏的完整响应(所有单词都用小写– args
–分隔在一个数组中)返回。枚举此数组中的项目,以查看它们是否与positives
或negatives
数组(本质上是铆钉'brain'中已经存在的重复替换)中的某个项目匹配。
如果存在匹配项,则将action
变量更新为yes
或no
并中断循环,如果没有匹配项,则{{1} }变量仍为action
。然后,将此undefined
变量返回到条件响应,并通过rivescript进行评估,以查看它是否符合任何条件。
action
这似乎工作得很好,但是我确信必须有一个更好的解决方案,即使它只是清理对象宏本身(也许有一种方法可以将替换引入对象宏中?)。
我接受这个答案,但是如果有人有其他建议/解决方案,我仍然很乐意听到。
答案 1 :(得分:0)
因此,我设法与Noah Petherbridge进行了联系,后者从事Rivescript的工作,并非常友善地抽出时间来纠正我的理解:
+ [*] you [*]
- So you are talking about me now?
+ [*] (yes|no) [*]
% so you are talking about me now
* <star> == yes => yes answer
* <star> == no => no answer
- default, shouldn't happen answer
出于某种原因,我想我认为我不能在条件触发器中使用触发器交替-毕竟有一个更优雅的解决方案!
我现在将接受这个答案,并将这个小旅程留给可能正在苦苦挣扎的其他人。