嘿,我只是在学习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>
到目前为止,一旦我说出这个秘密字眼,它就不会回应
也许有更好/更标准的方法可以做到这一点?还是在盟军中这不可能?
答案 0 :(得分:1)
使用其他方法可以实现您想要的。基本问题是您不能在<get name="secretWord"/>
元素中使用<pattern>
,因此需要使用纯文本和星号(*)的其他模式。因此,您可以编辑第二个类别来提出问题,如下所示:
<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>
会导致如果客户输入的密码错误,则会显示“抱歉...”文本。
此外,请注意,这依赖于使用值子元素的AIML v2,并且通常以大写形式编写模式。
答案 1 :(得分:0)
您可以使用AIML中的Learn标记执行此操作。它允许机器人设置一个新类别。这就是多少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>