【问题标题】:AIML, recognizing a saved variable in a patternAIML,识别模式中保存的变量
【发布时间】:2018-12-06 16:48:46
【问题描述】:
嘿,我刚刚学习 AIML,我想给我的聊天机器人一个词,然后它会保存并在我稍后回复时识别出来
这是我的尝试:
<?xml version = "1.0" encoding = "UTF-8"?>
<aiml>
<category>
<pattern> secret word is *</pattern>
<template>
<set name = "secretWord"><star/></set>? Ok got it.
</template>
</category>
<category>
<pattern> <get name = "secretWord"/> </pattern>
<template>Thats the secret word</template>
</category>
</aiml>
到现在,只要我说出密语,它就没有反应
也许有更好/更标准的方法来做到这一点?或者这在aiml中是不可能的?
【问题讨论】:
标签:
templates
design-patterns
get
set
aiml
【解决方案1】:
使用不同的方法可以实现您想要的。基本问题是您不能在<pattern> 元素中使用<get name="secretWord"/>,因此您需要使用纯文本和星号(*) 的不同模式。因此,您将编辑您的第二个类别以提出问题,如下所示:
<category>
<pattern> IS MY SECRET WORD * </pattern>
<template>
<condition>
<li name="secretWord"><value><get name="secretWord"/></value>
That's the secret word
</li>
<li>
Sorry, "<star/>" is not the secret word
</li>
</condition>
</template>
</category>
这需要客户输入“我的密码是 FOO 吗?”。验证他们的秘密词,类别将确认或不确认。 <condition> 元素根据其当前值检查“secretWord”属性,如果匹配,则说“这是秘密词”。默认的<li> ... </li> 会在客户端输入密码错误时显示“对不起...”文本。
另外,请注意这依赖于使用 value 子元素的 AIML v2,并且通常以大写形式编写模式。
【解决方案2】:
您可以使用 AIML 中的学习标签来做到这一点。它允许机器人设置一个新类别。这就是多少 AIML 机器人从其用户那里学习新信息的数量。
<category>
<pattern>SECRET WORD IS *</pattern>
<template>
The secret word is <star/>? Ok got it.
<learn>
<category>
<pattern>
<eval><uppercase><star/></uppercase></eval>
</pattern>
<template>
SECRET CATEGORY ACTIVATED!!!
</template>
</category>
</learn>
</template>
</category>
机器人创建的新类别将如下所示(假设您说“秘密单词是 foo”):
<category>
<pattern>FOO</pattern>
<template>SECRET CATEGORY ACTIVATED!!!</template>
</category>