AIML: не получаю правильного ответа

Я пытаюсь изучить AIML и не могу понять, где я ошибся:

<aiml>
    <category>
        <pattern>I LIKE * ROME</pattern>
        <template>
            I love talking about 
            <set name="topic">rome</set>
            too!
            <random>
                <li>Did you know that slaves made up 40% of the population of Ancient Rome?</li>
                <li>Did you know the Colosseum could sit 250'000 people?</li>
            </random>
        </template>
    </category>
    <topic name="rome">
        <category>
            <pattern>No *</pattern>
            <that>Did you know that slaves made up 40% of the population of Ancient Rome?</that>
            <template>So I've taught you something!</template>
        </category>
    </topic>
</aiml>

Первая часть работает нормально, если я ввожу что-то вроде: «Мне нравится история Рима», я получаю ожидаемый ответ по умолчанию и один из случайных ответов.

Но если он дает мне случайный ответ «раб», а я говорю «Нет, я этого не знал», он не дает мне ответа «Значит, я тебя чему-то научил». Он откуда-то получает ответ. else в его коде, но, учитывая, что я установил «тему» ​​и тег ‹that>, я был весьма конкретен и ожидал своего собственного ответа.


person Juicy    schedule 31.03.2013    source источник


Ответы (3)


Там есть

<pattern>No _</pattern>

где-то в ваших аймл файлах.

person ittgung    schedule 08.08.2013

Использование тега <that> - ваша уязвимая точка. Какая бы картинка ни стоила, я изменил ваш ответ в исходном шаблоне, и он сработал.

По поводу второго ответа бота. Если он используется, то категория в римской теме никогда не будет работать, потому что 40 $ в теге <that> должны быть последним ответом бота.

В ответе чат-бота может быть некоторая путаница. Раньше тему всегда меняли на «rome», но для того, чтобы шаблон в теме «rome» работал, чат-бот должен был говорить о 40% участников. Я просто объединил их, чтобы получить тот же результат.

Также обратите внимание, что вопросительный знак в теге <that> не был помещен там. Бот снимет его и сохранит оставшийся результат.

<?xml version="1.0" encoding="UTF-8"?>
<aiml>
<category>
  <pattern>I LIKE * ROME</pattern>
  <template>
    <random>
      <li>Did you know that slaves made up 40% of the population of Ancient <set name="topic">Rome</set>?</li>
      <li>Did you know the Colosseum in could sit 250'000 people?</li>
    </random>
  </template>
</category>
<topic name="rome">
  <category>
    <pattern>No *</pattern>
    <that>Did you know that slaves made up 40% of the population of Ancient Rome</that>
    <template>
      So I've taught you something!
    </template>
  </category>
</topic>
</aiml>
person insane User    schedule 03.05.2014

Вы можете использовать подстановочные знаки (*) в теге <that>, чтобы вы могли сопоставить только часть ответа бота (например, «ЗНАЕТЕ ЛИ ВЫ, ЧТО РАБЫ СОЗДАЛИСЬ»).

Также обратите внимание, что эта тема может быть установлена ​​внутри тега <think>, который не отображает его содержимое.

Я протестировал следующий код с интерпретатором Python AIML. Это работает, как ожидалось, но когда название темы и содержание тегов <that> и <pattern> были строчными, это не сработало.

<aiml>
<category>
    <pattern>I LIKE * ROME</pattern>
    <template>
        I love talking about Rome too!
        <think><set name="topic">ROME</set></think>
        <random>
            <li>Did you know that slaves made up 40 of the population of Ancient Rome?</li>
            <li>Did you know the Colosseum could sit 250'000 people?</li>
        </random>
    </template>
</category>
<topic name="ROME">
    <category>
        <pattern>NO</pattern>
        <that>* DID YOU KNOW THAT SLAVES MADE UP *</that>
        <template>So I've taught you something!</template>
    </category>
</topic>
</aiml>
person trivelt    schedule 16.01.2018