Структура 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