0

我正在使用<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>

几天前,这段代码可以工作,但现在它可以工作,因为尚未设置值。我越来越:

如果您挖掘未知,请在其中种植一些东西。

我也挖未知数。

如果你把未知挖得足够深,兔子就会住在里面。

我究竟做错了什么?

4

3 回答 3

0

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

这是 AIML 2.0,对吗?

于 2015-07-18T14:03:36.650 回答
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.
于 2016-09-07T09:15:19.653 回答
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>
于 2017-06-07T06:44:38.867 回答