AIML, распознавание сохраненной переменной в шаблоне - PullRequest
0 голосов
/ 06 декабря 2018

Эй, я только изучаю 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>

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

возможно, есть лучший / более стандартный способ сделать это?Или это невозможно в цель?

1 Ответ

0 голосов
/ 14 февраля 2019

То, что вы хотите, возможно, используя другой подход.Основная проблема в том, что вы не можете использовать <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, который использует подэлемент value, и этоусловно писать шаблоны в верхнем регистре.

...