Wednesday, April 20, 2022

Разработка бота-помощника

Вступление

Многие разработчики задумывались над тем, чтобы создать программу, которая будет вести переписку, как живой человек. Пока что никому это сделать не удалось. Самые продвинутые боты в службах поддержки банков даже близко не похоже на человека. А ведь разработкой таких чат-ботов занимаются целые отделы разработки.

В этом посте записаны мысли, как создать эвристический алгоритм, который будет отвечать на вопросы пользователей.


Понять человека

Самый простой и быстрый способ — создать массив пар вопрос-ответ. Например:

  • Привет — Привет
  • Как дела? — Нормально
  • Что делаешь? — Работаю
Но даже этот способ не работает, потому что некоторые пользователи пишут с ошибками. Например:
  • Пивет
  • Как дила?
  • Чо девлаишь?


Контекст

Ответ на вопрос "Ты где?" зависит от местоположения человека, от его занятия и т.д. Например:

  • Я дома
  • Я гуляю
  • Я на даче
  • Сплю я, в кровати

Соответственно, ответ на вопрос зависит от места в интернете (чата, сайта, группы), где вопрос задан. Ответ на вопрос зависит от того, кто, где и когда его задает.


Обычный запрос

Обычно пользователи пишут что-то такое:

«Доброе утро! У меня есть дочка, ей 8 месяцев. Поэтому я хотела бы создать чат или сообщество украинских мам в Норвегии для того, чтобы была возможность делиться полезной информацией. Например, о прикорме, ведь здесь отличается некоторая еда; о покупке одежды и игрушек, где есть скидки или выгодно купить, о лечении и лекарствах. Короче о всех насущных вопросах, которые интересуют мам. Будет интересен такой чат или сообщество вам?»

Или такое:

«У меня два вопроса: первый- можно ли как-то на сайте или в приложении изменить язык на английский? Второй- как в теленор проверить кол-во оставшихся Gb и минут?»

В одном сообщении могут быть два разных вопроса, которые совсем не относятся друг к другу. Часто даже человек не способен понять, что написал другой человек.


Постановка задачи

Программа располагает данными типа вопрос-ответ. Необходимо по входящему сообщению от пользователя определить, есть ли ответ и какой он.