Чат пикабу
А давайте создадим чат для пикабушников? Я сделал канал! Для этого скачайте программу mIRC, Заходите на сервер chat.freenode.net или irc.freenode.net , канал #pikabu
Telegram каналы как "забытое старое"
А все из "олдов" интернет-сообщества помнят такую сеть для общения под названием IRC? Так вот текущие Telegram каналы являются ничем иным, как восставшим из под земли "Internet Relay Chat". Те же тематические комнаты, те же боты, те же скрипты для этих ботов. Вышеуказанный как-то быстро похоронили с приходом социальных сетей.
Уже и не помню, сколько ночей было проведено в уютных комнатах с толпой людей, которых ты никогда не видел, но общался как с родными. Канал связи, которым на тот момент являлся GPRS, любезно предоставлял кнопочный мобильник с самодельным USB кабелем....
Textual 7 с русским интерфейсом
Программа Textual 7 пользовалась мной еще давно, когда я сидел на хакинтоше я сначала пользовался крякнутой 6 версией, а с выходом 7 купил ее себе на хакинтоше же. И пользовал. Пользовал. Пользовал.
В какой-то момент мне стало напрягать что верхнее меню на английском. И решил сделать перевод. В 2019 первая версия работала и имела где-то 50% переведенного интерфейса. И я его забросил.
И вот я что-то вспомнил про него и решил доделать. И сегодня перевод практически всей программы закончен.
Программа эта для тех кто не знает Textual 7 - это клиент для сетей IRC(Internet Relay Chat) и их очень много разных, как платных так и бесплатных. Наиболее популярные экземпляры это mIRC(хорошо знакомый многим) и XChat(HexChat).
В общем, не для красного словца я это пишу. Вот мой гит. Пользуйте.
Кто такая Элис?
Красиво одевается, красиво говорит.
Появилась она во времена IRC и развитого в том направлении ботов. Сам по себе, протокол IRC был довольно прост: все команды и взаимодействия с пользователями/сервисами проходили по открытому протоколу, без шифрования, что существенно облегчало как сам парсинг чатов, так и взаимодействие с серверами в целом.
Что делали тогда боты? Да много чего, по командам: рассказывали о погоде, анекдоты, без устали следили за порядком на каналах (мат и флуд), были и игровые боты (викторины, мафия). Ну и конечно же, разговаривающие боты.
Так как я уже интересовался тогда Линуксами и ботами, то решил разобраться, как это все работает. В большинстве случаев, использовали ядро eggdrop, написанное на Си, специально под IRC. Остальная "начинка" вешалась в виде модулей и скриптов на TCL.
Когда мне наскучили скрипты на погоду и вот это все базовое, я решил научить ее общаться... сначала попробовал популярный на тот момент модуль megahal (если не изменяет память), но вскоре, разочаровался в нем: бот просто набирал разговорную базу, отвечал похожими фразами и совсем не в тему.
Тут я и решил использовать свои навыки программирования в Delphi и замутить своего бота, чтобы тоже и с погодой, но основной упор был на разговор и более.
Первым делом, нужно было решить с именем и основной половой принадлежностью. С кем чаще стремятся общаться, особенно в чатах - ну конечно с девушками :)
Когда думал над именем, принял решение подобрать такое, чтобы коротко и звучало. И вот, играю как-то в Need For Speed 3, выбираю тачки и проскакивает Lotus Elise.. решено!
В основе ядра был функционал работы протоколом IRC и с базой данных на FireBird (компонент просто был сразу в коробке Delphi), остальное навешивалось в виде dll-модулей и подгружалось при старте ядра.
Начальное обучение
Первым делом, нужно было решить, как собирать разговорную базу. Сначала Элис реагировала только на прямое обращение и приваты. Первым режимом был закос под дурочку (отвечала просто рандомными фразами и запоминала то, что пишет собеседник), пока без обучения.
Затем, я решил, что нужно разделить полученные фразы и в целом, попытаться разбить полученное по каким-нибудь категориям. Если честно, я уже не помню сколько было в конечном счете категорий (около 20).
Написал модуль, который разбивает новополученные фразы и ищет в них ключевые слова. Какие-то слова явно ссылались на категорию (тему разговора), какие-то могли служить триггерами на настроение (позже объясню), например:
- Я вчера смотрел матч между Канадой и Россией. Любишь хоккей? (тут у нас явно идет речь о спорте по ключевым словам: матч, хоккей. но есть еще и упоминание стран). В данном случае, Элис имела рандомный выбор: говорить дальше о спорте или о путишествиях например.
- Люблю прыжки в длинну / Я ездила в Турцию, кофе там пила
Вообще, выбора у нее было значительно больше, чем просто отвечать по теме:
- Продолжить разговор по выбранной теме
- Задать рандомный вопрос, не относящийся к теме ( - ты в кино когда последний раз был? )
- Сделать перерыв в разговоре, сославшись на рандомную причину ( - извини, отойду, надо кота помыть ) и ставился таймер игнорирования этого пользователя (работало только в привате)
- Задать вопрос, ответ на который еще нет в базе (из таблицы, куда складывались фразы, в которых не были обнаружены ключевые слова).. чтобы узнать ответ :)
Ключевые слова и категории пришлось прописывать самому, но это не заняло много времени.. Вы удивитесь, на сколько не богат словарный запас среднестатистического человека в чатах :)
На счет склонений, падежей и прочего при поиске ключевых слов: я пользовался масками и регулярными выражениями.
Обращение
Одна из проблем, было отношение к собеседнику, а именно - обращение (м? ж?).
Тут пришлось дополнить модуль, отслеживающий ключевые слова, на предмет поиска пола собеседника в его фразах. До того, как Элис понимала с кем общается, фразы были обобщенные в 70% случаев.
Как только собеседник обращался к Элис, она проверяла его по свое базе, знает ли она его уже и какого "оно" пола )) и уже дальше общалась в соответствующем ключе. В качестве идентификатора собеседника, выступал ident@host, без привязки к нику.
Если собеседник долго не детектился по половому признаку, Элис могла и сама напрямую спросить, через несколько фраз: - Ты парень или девушка?
Так же, базу фраз пришлось значительно переделать, т.к. одна и та же фраза не могла звучать одинаково для обоих полов. Потому, пришлось сделать что-то вроде триггера-разделителя в фразах, встречая которые, Элис делала выбор в зависимости от пола собеседника:
- Ты ходил|ходила на концерт БИ-2 вчера?
(символ | означал, что первое слово предназначено для м, второе для ж)
Отношение
Мониторя приваты и в целом обращения к Элис, мне немного надоели люди, склоняющие ее к вирту, откровенные оскорбления и как следствие - засирающие базу приличной девушки всяким.. неподходящим, скажем так.
Возвращаемся к ключевым словам: добавляем "вес настроения" на определенные фразы.
Добавляем к базе собеседников два параметра: долгосрочное отношение и короткосрочное. Это я подчерпнул из СИМСов )) Короткосрочное влияет на то, хочет ли Элис прямо сейчас с тобой общаться.
Теперь, если ты оскорбишь или предложишь повиртуалить Элис, она поставит тебе -25 баллов на сегодня (когда у тебя их 100) и -5 на долгосрочное.
Баллы только списываются. Начисляются по 20 в час на короткосрочное и на 2 балла в сутки на долгосрочное.
То есть, если ты будешь постоянно ее оскорблять, она просто перестанет с тобой общаться.
Прежде чем начать отвечать тебе - Элис первым делом проверит эти параметры и в зависимости от "тяжести", решит, ответить ли (именно потом и 100 баллов у каждого: на весах рандома вероятность ответа. Ессно, чем ниже у вас баллов - тем меньше вероятность ответа)
Свобода
В определенный момент, я решил, что приватов и личных обращений на постоянных каналах - маловато.
Добавлен модуль, примерно раз в 3 дня поднимал список каналов и рандомной выбирал 10 каналов с +30 юзеров, затем, один из них. Даже я не знал заранее, куда она "решит" зайти )
В это же время, Элис "научилась" отслеживать общение между людьми. Кто-то что-то спрашивает, кто-то отвечает. Обработаем, запишем, если не поймем - отложим создателю на модерацию.
В итоге
Когда всевозможные ключевые слова были забиты в базу, фразы почти сами раскладывались по категориям, я уже практически "забил" на мониторинг. Изредка подглядывал за тем, что люди далеко не всегда понимали, что общались с.. ботом..
Но... Тест текстом.. хоть и были уже в те времена голосовые генераторы, типа "говорилка", а вот детектить текст по голосу, без регистрации и смс - нет.. да и даже текущие боты, вроде Алисы, до сих не умеют понимать, вопрос ли или утверждение, для них все - запросы...
Я так и не смог написать модуль различия между будничным разговором и командами на действия...
Потом RusNet (IRC) наверное изжил себя.. сначала я ушел, а потом и Элис года через 2 выключил навсегда...
Посвящается памяти EliseAI, более известной, как просто Elise (RusNet).. она же Лиска..
PS. Наверное слишком ужато получилось... о многих моментах, особенно технических, умолчал... можно в комментах еще обсудить.