Структура AIML документа, основные тэги языка.

AIML (Artificial Intelligence Markup Language) — язык разметки для искусственного интеллекта. AIML — подмножество XML, он предназначается для создания виртуальных собеседников.

Основой AIML (мозга бота) являются категории (category), содержащие ключевые слова (pattern) и ответные реплики (template).
Рассмотрим простой пример:

<?xml version="1.0" encoding="UTF-8"?>
<aiml>
<category>
<pattern>ПРИВЕТ</pattern>
<template>
<random>
<li>приветик ...</li>
<li>Здравствуйте!</li>
</random>
</template>
</category>
</aiml>

 

Обладая таким мозгом, бот сможет отвечать на слово "Привет" (независимо от регистра), произвольно выбирая в качестве варианта ответа либо "приветик ...", либо "Здравствуйте!".
Обратим внимание, что значение в теге <pattern> всегда указывается только в верхнем регистре!
Также обратим внимание на то, что на реплику "Привет, бот!" наш бот уже не ответит, так как в нашем примере паттерн определен только для слова "Привет".
Для того, чтобы бот реагировал на любую реплику, которая начинается со слова "Привет", дополним наш пример следующей конструкцией

<?xml version="1.0" encoding="UTF-8"?>
<aiml>
<category>
<pattern>ПРИВЕТ</pattern>
<template>
<random>
<li>приветик ...</li>
<li>Здравствуйте!</li>
</random>
</template>
</category>

<category>
<pattern>ПРИВЕТ *</pattern>
<template><srai>ПРИВЕТ</srai></template>
</category
>

</aiml>

Вторая категория (<pattern>ПРИВЕТ *</pattern>) соответствует любой строке, которая начинается со слова "привет" и отправляет бота к категории "ПРИВЕТ" с помощью конструкции <srai>ПРИВЕТ</srai>.
Таким образом, теперь, на реплику "Привет, бот!" наш бот ответит либо "приветик ...", либо "Здравствуйте!".

Передразнивание. Тег <star/>.

Допустим, собеседник предлагает боту неизвестную тему для разговора: "Поговорим о ФКН". Тем для разговора может быть много, знать их все боту нереально трудно, поэтому мы создаем лишь иллюзию того, что бот понимает о чем речь и принимает тему, отвечая: "Ок, о ФКН так о ФКН ...". Создать такую ответную реплику нам удается с помощью тега <star/>.

<category>
<pattern>ПОГОВОРИМ О *</pattern>
<template>Ок, о <star/>, так о <star/></template>
</category
>

 

<star/> - это та самая звездочка, которая стоит в паттерне. Таким образом то, что находится после "Поговорим о" будет вставлено в ответную реплику.

Человек: Поговорим о ФКН?
Бот: Ок, о ФКН, так о ФКН
Человек: Поговорим о РГФ?
Бот: Ок, о РГФ, так о РГФ

Тег <sr/>

 

Что же такое <sr/>?

<sr/> это сокращенная запись <srai><star/></srai>, то есть ссылка на звездочку.
рассмотрим следующий блок AIML-кода и диалог с его использованием

<category>
<pattern>Я ДУМАЮ *</pattern>
<template><sr/></template>
</category>

<category>
<pattern>ТЫ *</pattern>
<template>Я <star/>?</template>
</category>

<category>
<pattern>ДА</pattern>
<template>Не буду спорить.</template>

 

Пример разговора:

Человек: Я думаю, ты хороший бот.
Бот: Я хороший бот?
Человек: Да.
Бот: Не буду спорить

Ключевой символ «_»

Этот символ отбрасывает все слова, которые были написаны до искомого слова и обрабатывает только слово, которое должно быть после данного символа.

 

Примечание: в случае если искомое слово было написано слитно с «_», то искомое слово как отдельное не найдётся.

<category>
<pattern>
_ FRIENDS
</pattern>
<template>
<random>
<li>
It is good!
</li>
<li>
Well, when there are friends
</li>
</random>
</template>
</category>

 

Пример общения:

 

We're true friends

It is good!

You're my friend

Well, when there are friends