Один шаблон несколько ответов в прицеле

Я хочу создать чат-бота, поэтому я сомневаюсь, как я могу ответить несколькими способами за один шаблон в aiml? например, если пользователь спрашивает, что дальше, бот-чат должен ответить на шаг 1, если снова он спрашивает, что дальше, он должен ответить на шаг 2.

3 ответа

Вы можете использовать теги "that" в шаблоне, которые запоминают последнее утверждение бота и отвечают соответственно, хотя это дает вам только один уровень контроля. Если вам нужно больше уровней, лучше выбрать темы с помощью тегов "продумать", а затем определить шаблоны для конкретных тем, которые будут использоваться первыми.

  <category> 
      <pattern>TEST SPLIT</pattern> 
      <template> 
        I don't want to talk about that now. 
        <split/> 
        I would rather talk about you. 
      </template> 
    </category>

Делать <split/> Выходная ссылка

Сначала вам нужна категория, которая знает шаги и возвращает ответ в определенном формате. В моем примере формат

СДЕЛАЙТЕ ТОСТ ШАГ * *

где первая звезда - номер шага, а вторая звезда - остаток возвращаемого текста. Вот категория:

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

Тогда вам нужна категория, которая вызывает следующий шаг, но только в том случае, если предыдущий ответ был тостовым вопросом. Эта категория использует этот тег, чтобы обеспечить его активацию только во время разговора за тост. Он использует эту звезду, чтобы получить предыдущий номер шага, а затем добавляет один к номеру шага:

<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) он использует тег вычисления, который не является стандартным AIML, но должен быть довольно легко закодирован. (2) Он использует элементы AIML v2, такие как переменные, используемые с get и set. (3) Я не проверял это, но я уверен, что процесс должен работать.

Иметь несколько ответов для одного <pattern>, вы можете использовать <random> а также <li> теги:

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

Однако ответы будут генерироваться случайным образом, а не в определенном порядке.

Например, если пользователь вводит "Что дальше?" в первый раз ответом может быть "Шаг 1", а в следующий раз, когда пользователь введет то же ключевое слово, ответом может быть "Шаг 1".

Другие вопросы по тегам