ASW
ASW (Associative System Window), то есть Ассоциативная Система ("Ассист") - это программа, выстраивающая ассоциации в зависимости от входных и ожидаемых выходных параметров. На нынешнем этапе развития, то есть на середину февраля 19-го, Ассист представляет собой довольно невразумительного чат-бота; даже некоторые его предшественники, создаваемые для сугубо развлекательных целей, намного способнее, чего уж говорить про Алису и Сири, не так ли?
На самом деле интересно то, что вышеуказанные голосовые ассистенты уже обучены на взаимодействие с пользователем, в то время как Ассист поставляется "голым". В версии от сентября 18-го мы называли его Джеффом и в одном из справочных окон особо акцентировали внимание на том, что, в общем-то, у вас в результате обучения может получиться и не Джефф вовсе:
По большей мере, суть приложения постепенно теряется, как только мы начинаем работать над интерфейсом. Нас это очень огорчает, поскольку самих функций нет, а мы ходим вокруг да около. Мда, это действительно сложно - создать какого-то чат-бота там. Я не знаю даже. Вот вам p-bot.ru, и то умнее) А теперь перейдём к реализации и к тому, почему мы считаем, что Ассист - хорошая вещь или, по крайней мере, задумка.
Хорош тот бот, который легко обучается, буквально схватывая всё на лету. В обработке естественного языка Ассист, может быть, и не преуспел, зато как только вы спросили у него что-то, и он не может на это ответить, он сам внезапно решает спросить, а как бы вы сами ответили?
На первый вопрос я бы и не прочь ответить, но, извольте, на второй пусть он думает ответ. Хотя... научить его этому будет посложнее, чем просто отвечать на какие-то там бессмысленные вопросики.
Так мы и подходим в ограничение: чего-то нам не хватает. Чего-то умного. Например, он не может выполнить ни одного действия, а Алиса даже будильник поставит или музыку включит. Не то чтобы я намекал на идейное сходство ассоциативной системы и голосового ассистента, но вот уж если строить ассоциации, то и подходить с другой стороны вопроса.
Итак, скрипты. Куча скриптов на Python'е. Не обыкновенная классика запрограммированных действий, а всё, что только пользователь пожелает. И всё это - за пару секунд.
Примечательно, что если пользователь в состоянии написать такой скрипт, зачем ему тогда Ассист? Не легче ль сделать пару кликов мышью, чем изводить ресурс ударов по клавиатуре? Даже скачать легко... С этого момента мы и начинаем дифференциацию пользователя и администратора, и заключаться будет она в применении.
Углубимся в работу системы. Есть один объект/класс - кусок кода, короче, - который выполняет поиск выражений по базам данных SQLite 3. Все выражения ввода - активаторы, которые вызывают ассоциирующиеся с ними реагенты. Всё просто: если в базе есть активатор, то у него обнаруживается такая характеристика, как список ссылок на реагенты. Причём реагент тоже может выступать в качестве активатора: сможет ли бот общаться сам с собой?
Вместо списка ссылок на реагенты внезапно может обнаружиться путь к другому контейнеру (другой таблице в этой же базе данных)/другой базе данных или вообще к внешней программе или к скрипту Python. Скрипт запускается нативно из кода, причём в него передаётся выражение и из него принимается выражение-реагент.
Что ещё хлеще этого?
Предустановленные шаблоны. Никаких скриптов Python, если ты хочешь узнать информацию из Википедии:
Шаблон времени, даты, добавления новых выражений, Википедии, поиска в Интернете... и сохранения ввода. Последний (вкупе с некоторыми особенностями) рассмотрим поподробнее, поскольку всё остальное более-менее ясно: встретился реагент с шаблоном времени - Ассист выведет время в UTC и пр.
Зачем нужно сохранение ввода?
Представьте, что вы - работодатель. Или собираете отзывы. Или опрос проводите. Вам нужен некоторый бланк с вопросами-ответами, то есть кто-то должен задавать вопрос, получать ответ и его записывать. Для Ассиста это не что иное как сценарий действий. Сценарий - это отдельный контейнер, который может притягивать к себе - пока весь сценарий не будет пройден или досрочно прекращён, ни одно из выражений других контейнеров не попадёт на экран: поиск будет производиться только в этом сценарии. Действительно, разговаривая с другом о чёрных дырах, вы бы сразу поняли, что имеет в виду друг, если он бы сказал: "Она хороша"? Да едрить, кто она? Чёрная дыра или та красотка из Мака? Вот и вы бы сначала спросили, а Ассист тем пуще спросит.
Вход в сценарий лёгок: в него ведёт активатор из другого контейнера: "Хочу пройти собеседование." Как только это выражение получено, оно укажет на реагент, содержащий первый вопрос и... шаблон сохранения ввода (с указанным файлом). Пользователь ответит на вопрос - ввод его сразу запишется в файл. А ещё этот ввод можно и в скрипт передать - ваша фантазия.
Зачем ещё пригодится Python?
Да-да, наши любимые... нейронные сети.
И для взаимодействия с голосовыми ассистентами:
Ну, и для взаимодействия с реальным миром, к примеру, засунуть Ассиста в робота, через нейронную сеть обучить его распознаванию объектов, на раздражители установить скрипты, которые будут управлять движениями.
Круто?
Только в теории.
На самом деле нам нужна помощь. Ведь это довольно сложный проект...
Нет, не так. Это наихудшая попытка сделать закос под искусственный интеллект. И, тем не менее, она выгорит!