Виртуальный робот, реагирующий на всевозможные внешние раздражители эмоционально, информационно
и физически.
Внешние раздражители:
- голос
- перемещение в пространстве
- обращение в чате
- запрос через Web
- и так далее
В конечном итоге, все внешние раздражители сводятся к текстовой строке определенного формата. Эта
строка разбирается. В результате разбора определяется, какого рода это раздражитель, какова его
"эмоциональная окраска" и какому из имеющихся модулей надо этот раздражитель передать. Раздражитель
(строка) передается выбранному модулю и от него получается результат (строка) плюс возможные действия во
внешнем мире. Собственно, этот разбор, а также универсальный интерфейс для модулей, и есть функции
VirBot-а. За основу при разработке интерфейса модулей можно взять реализацию
InfoBot на Perl. Главное - там
есть готовый механизм подключения новых модулей, которые получают сказанное или иначе введенное
пользователем в виде текста и выполняют какое-нибудь действие (выдают текст, например, но можно и любое
другое - лампочками, скажем, помигать через соответствующий специальный файл устройства...).
Есть и работа с поисковиками.
VirBot реализуется первоначально на Perl, затем - на PHP и на языке C (для встраивания в среду рабочего стола
в виде отдельного апплета).
Нам необходим метаязык, описывающий, какие модули подключены к VirBot-у, как определять
эмоциональную окраску и какому модулю (модулям) передавать данные, в зависимости от эмоциональной
окраски и других характеристик входной строки. Кроме того, VirBot будет принимать результаты от модулей,
возможно, снова определять их эмоциональную окраску и возвращать результат, в общем случае, в виде
текстовой строки. При этом модули могут по ходу обработки полученных строк вызывать изменения во
внешнем мире - двигать головами, светить лампочками и т.д.
Метаязык строится на основе XML. Предполагается расширить язык AIML знаменитой программы Alice,
примерно по следующим направлениям. Создаем набор правил обработки информации (они и составляют
личность) вида:
- шаблон, например, X is Y, как в InfoBot, где X и Y - слова из фразы пользователя (на которые можно ссылаться
в ответе отдельно, а не просто _ *, как в ALICE)
- действие (ответ), включающее один или несколько из следующих компонентов:
- фразу-ответ, в том числе, ссылающуюся на фрагменты исходной фразы или случайная, из списка, как в
AIML
- эмоцию (наше состояние) - мы ее как-то будем потом выражать, это наш атрибут.
- оценку собеседника (мудак, злобный педик, душка, потенциальный клиент). Эту оценку можно затем
использовать в разговоре. Это тоже наш атрибут.
- собственно действие (какая-нибудь перловая функция с параметрами, в том числе, взятыми из
введенной фразы). Этих перловых функций мы потом напишем (позаимствуем) кучу, например, для
поиска в Google или мигания лампочками.
- отдельно - запоминание утверждения собеседника. У нас будет общая база шаблонов (фактоидов в терминах
infobot), которая строится ботмастером или пополняется знаниями других ботов, и личная база, построенная
автоматически из сказанного собеседником. Искать можно начинать с той или другой - это будет свойство
создаваемой личности - учитывает она сказанное собеседником или имеет его ввиду.
Фраза или команда предварительно классифицируется по принципу "вопрос", "ответ", "сигнал извне" и т.д.
Получается несколько "пространств" шаблонов.
Имеем правила вида:
-
шаблон -> ответ [эмоция] [оценка] [действие]
сводящиеся к
-
шаблон -> действие
если дать достаточно богатый набор действий.
Можно правила разбить на категории:
- информация о собеседнике
- утверждения собеседника
- факты
- действия
- реакция на раздражители
- информация из Internet
- ...
и просматривать правила из разных категорий в определенной последовательности. Вот этот набор правил и
стратегия их применения и есть наша виртуальная личность. Для описания свойств этой личности надо
придумать язык на базе XML. Шаблоны задаются на основе regexp, но с возможностью пометки фрагментов...
Короче, типичная продукционная система. Потом мы к ней еще простые правила вывода привесим, как в
Прологе или..., стратегии поиска по шаблонам, и будет не только fake, но и real AI.
Базу таких правил мы сможем строить сами, экспортировать из AIML-файлов, из catty, а в будущем - и выдавать
в виде AIML-файлов для обмена с другими ботами... Вобщем, пишется еще куча конвертеров в наш и из нашего
формата, когда для этого появится время и желание, и когда (если) мы задоминируем в мировом масштабе...
На втором этапе (и это самое главное!) мы делаем модуль ALICE/AIML на Perl - безобразие, но кажется, что
такого нет! Кстати, не удается мне найти в явном виде и Program C (AIML-парсер на С, его можно было бы
взять за основу). Тем самым, мы в дальнейшем интегрируем все возможности ALICE...
И тем же путем, в виде модулей, добавляем прочие возможности типа бота catty,
выбирающего информацию из Internet, всяких там Марковских рядов и т.д. Получаем интегрирующую
платформу для разных бот-технологий на базе Perl.
Пока вот здесь
можно посмотреть пример реализации VirBot на Perl с минимальным определением эмоциональной окраски,
подключением Chatbot-Eliza,
и реакцией во внешнем мире в виде строки текста и картинки, соответствующей
эмоциональному состоянию VirBot-а.
Ближайшие задачи:
- Подключить к имеющейся реализации test2.cgi модули, принимающие данные от внешних, физических
сенсоров и управляющие внешними, физическим объектами через параллельный порт
(работа для Поморова)
- Создать универсальный модуль VirBot на языке Perl с продуманной технологией подключения внешних Perl-
модулей (VirBor::Eliza, VirBot::ALICE, VirBot::Google и так далее), взяв, например, за основу реализацию
InfoBot.
- Продумать XML-схему для представления виртуальной личности
- Продумать технологию работы Web-модуля VirBot с другими модулями так, чтобы эти модули могли
запоминать информацию, полученную в ходе сеанса, и использовать ее в другом сеансе (как обеспечить работу
модуля между обращениями по CGI; запуск "серверных" процессов, их контроль и взаимодействие с ними)
Долгосрочные задачи:
- Написать (найти) программы анализа и синтеза AIML и XML-схем в целом на языках Perl, PHP и С
- Продумать, какие еще боты и модули надо включить. Для всех этих модулей сделать реализации или обертки в
виде VirBot::модуль на языке Perl
- Реализовать на языке Perl работу VirBot по XML-схеме виртуальной личности
- Создать набор виртуальных личностей с различными характерами и для различных целей
- Встроить виртуальные личности на свои сайты