AIML - 从设定值中获取未知值

时间:2014-11-10 01:42:34

标签: aiml

我正在使用<srai>标记在AIML中使用递归,如下面的代码所示:

<category><pattern>I LIKE *</pattern>
 <think><set name="name"><star/></set>
 <set name="it">
 <set name="topic"><star/>
 </set>             
 </set>    
 </think>
 <template><srai>I DIG</srai></template>
 </category>



 <category><pattern>I DIG</pattern>       
 <template>
 <random>
 <li>If you dig <get name="name"/>, plant something in it</li>
 <li>I dig <get name="name"/> too.</li>
 <li>If you dig <get name="name"/> deep enough, rabbits will live in it.</li>
 </random>
 </template>
 </category>

几天前,这段代码正在运行,但现在它的工作原理还没有设置值。 我得到了:

如果你挖掘未知,可以种植一些东西。

我也不知道。

如果你深入挖掘未知的深度,兔子就会生活在其中。

我做错了什么?

3 个答案:

答案 0 :(得分:0)

除非我正在阅读&amp;错误地执行此代码,我认为这与设置名称有关。 所以,如果你告诉它,“我挖鸟!”,然后问它你的名字是什么,它会说你的名字是鸟。

这是AIML 2.0,对吗?

答案 1 :(得分:0)

您的AIML格式不正确。 您可以在模板下放置<think><set>个标签。所以你的AIML将如下

    <category>
      <pattern>I LIKE *</pattern>
      <template>
          <think>
             <set name="name"><star/></set>
             <set name="it">
                 <set name="topic"><star/></set>             
             </set>    
          </think>
          <srai>I DIG</srai>
     </template>
  </category>

  <category>
     <pattern>I DIG</pattern>       
     <template>
        <random>
           <li>If you dig <get name="name"/>, plant something in it</li>
           <li>I dig <get name="name"/> too.</li>
          <li>If you dig <get name="name"/> deep enough, rabbits will live in it.</li>
        </random>
     </template>
 </category>

This will return like following:
___________________________________________
Input:  I like Bird
Output: If you dig Bird, plant something in it

Input:  I like Bird
Output: If you dig Bird deep enough, rabbits will live in it.

答案 2 :(得分:0)

这是因为这些变量是会话范围的。这意味着,如果为变量赋值,则可以全局访问。因此,对于Bird和User,您具有相同的变量名称,它的行为方式与您提到的相同。 你可以做的是保留两个变量:

<category>
      <pattern>I LIKE *</pattern>
      <template>
          <think>
             <set name="name"><star/></set>
             <set name="it">
                 <set name="topic"><star/></set>             
             </set>    
          </think>
          <srai>I DIG</srai>
     </template>
  </category>

并为用户名保留另一个变量,例如

  <category>
      <pattern>My name is *</pattern>
      <template>Ok <think><set name="userName"><star/></set> </think></template>
  </category>


  <category>
      <pattern>What is my name?</pattern>
      <template>My name is <get name="userName"/></template>
  </category>