AIML,识别模式中的已保存变量

时间:2018-12-06 16:48:46

标签: templates design-patterns get set aiml

嘿,我只是在学习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>

到目前为止,一旦我说出这个秘密字眼,它就不会回应

也许有更好/更标准的方法可以做到这一点?还是在盟军中这不可能?

2 个答案:

答案 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>