Чатбот позволяет вести беседы примерно такого вида:
Для запуска бота в Телеграме нужно зарегистрировать его у @botfather и получить токен.
Затем запускаем сервис в докере такой командой:
docker run -it chatbot bash -c "/chatbot/scripts/tg_bot.sh"
После старта появится приглашение ввода токена и выбора профиля бота.
Используемая база знаний (в текущей реализации - plain text файл с фактами) указывается в профиле, который загружается при старте экземпляра бота. В скрипте console_bot.sh можно увидеть указание на тестовый профиль profile_1.json, позволяющий боту отвечать на несколько простых вопросов. В этом профиле в качестве базы знаний указан файл profile_facts_1.dat. Формат этого файла описан в шапке файла.
Среди разных фактов там можно увидеть запись:
меня зовут $name_nomn
Конструкция $name_nomn означает, что в строку при загрузке чатбота будет подставлена константа с именем name_nomn, определенная в файле profile_1.json в разделе constants:
"constants": {
"gender": "ЖЕН",
"name_nomn": "Вика"
}
Так как имя бота может встречаться в нескольких местах, то удобнее задать имя в одном файле профиля.
Когда чатбот обрабатывает вопрос "Как тебя зовут?", он определяет, что этот факт наиболее релевантен для ответа на заданный вопрос, и далее запускает процедуру построения ответа. Само имя "Вика" нигде не "зашито" в языковых моделях. Поэтому для его смены не нужно переобучать нейросетки, а достаточно отредактировать данную запись.
Вторая константа с именем "gender" определяет грамматический род для бота, в данном случае женский. В том же файле фактов можно найти такую запись:
Я $chooseAdjByGender(нужен, нужна), чтобы отвечать на вопросы посетителей чата
Конструкция $chooseAdjByGender(нужен, нужна) позволяет выбрать одно из перечисленных слов, фильтруя их по константе грамматического рода. Таким образом, реплики бота становятся более релевантными "биологической" природе бота.
В состав пайплайна входят модели:
-
интерпретатор на базе ruGPT для восстановления полного текста реплики в контексте диалога - см. карточку модели на huggingface.
-
retriever - sentence transformer модель для подбора релевантных фактов в базе знаний и переписывания истории диалога, см. карточку модели на huggingface.
-
chitchat & reasoner на базе ruGPT для формирования текста ответа по найденному в базе знаний факту и заданному вопросу - см. карточку модели на huggingface.
-
детектор перефразировок на базе rubert-tiny для определения синонимичности двух предложений - см карточку модели на huggingface.