【问题标题】:one pattern multiple responses in aiml目标中的一种模式多重响应
【发布时间】:2014-06-24 06:21:25
【问题描述】:

我想制作一个聊天机器人,所以我的疑问是如何以多种方式响应目标中的单一模式? 例如,如果用户询问下一步是什么,聊天机器人应该响应 step1 如果他再次询问下一步它应该响应第 2 步。

【问题讨论】:

    标签: chat chatbot aiml


    【解决方案1】:

    您可以在模板中使用“that”标签,它会记住最后一个 bot 语句并做出相应的回答,尽管这只会为您提供一个级别的控制。如果您想要更多关卡,更好的方法是使用“think”标签设置主题,然后定义将首先使用的主题特定模板。

    【讨论】:

    • 任何额外的解释、参考,甚至是例子都会改善你的答案。
    【解决方案2】:

    要对单个<pattern> 进行多个响应,您可以使用<random><li> 标签:

    <category>
             <pattern>WHATS NEXT</pattern>
             <template><random>
                 <li>Step 1</li>
                 <li>Step 2</li>
             </random></template>
    </category>
    

    但是,响应将随机生成,而不是按特定顺序生成。

    例如,如果用户输入“下一步是什么?”第一次,响应可能是“Step 1”,下次用户输入相同的关键字时,响应可能仍然是“Step 1”。

    【讨论】:

      【解决方案3】:

      首先,您需要一个知道步骤的类别,并以定义的格式返回答案。在我的示例中,格式为

      制作吐司步骤 * *

      其中第一个星是步骤号,第二个星代表返回文本的其余部分。这是类别:

      <category>
               <pattern>MAKING TOAST STEP *</pattern>
               <template>
                   <set var="step"><star/></set>
                   <condition var="step">
                       <li value="1">Make toast step 1, get some bread</li>
                       <li value="2">Make toast step 2, put the bread in the toaster</li>
                       <li value="3">Make toast step 3, wait until it pops up</li>
                       <li>Make toast step 4, eat the toast</li>
                   </condition>
               </template>
      </category>
      

      那么您需要一个调用下一​​步的类别但前提是之前的答案是一个令人敬佩的问题。此类别使用 that 标签来确保它仅在 toast 制作对话期间被激活。它使用 thatstar 获取上一步编号,然后将步骤编号加一:

      <category>
               <pattern>WHAT IS NEXT</pattern>
               <that>MAKE TOAST STEP * *</that>
               <template>
                   <set var="step"><calculate><thatstar/>+1</calculate></set>
                   <srai>MAKING TOAST STEP <get var="step"/></srai>
               </template>
      </category>
      

      那么你需要一个类别来启动整个序列:

      <category>
               <pattern>HOW DO I MAKE TOAST</pattern>
               <template>
                   <srai>MAKING TOAST STEP 1</srai>
               </template>
      </category>
      

      这种方法的注意事项是 (1) 它使用 calculate 标签,它不是标准的 AIML,但应该很容易编码。 (2) 它使用 AIML v2 元素,例如与 getset 一起使用的变量。 (3) 我还没有测试过,但我相信这个过程应该可以工作。

      【讨论】:

        【解决方案4】:
          <category> 
              <pattern>TEST SPLIT</pattern> 
              <template> 
                I don't want to talk about that now. 
                <split/> 
                I would rather talk about you. 
              </template> 
            </category>
        

        &lt;split/&gt; Output Reference

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-08-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-01-21
          • 2021-11-26
          相关资源
          最近更新 更多