Бот, которому запретили оправдываться

На восьмой день работы бот перестал отвечать примерно половине чата. Это не было сбоем, зависанием или отключением сервиса: он продолжал получать сообщения, формировал ответы, но затем сам же отклонял их и оставлял пользователей без реакции.
В журнале для каждого такого случая появлялась одна и та же запись: «ответ забракован (английские слова: Alex)». Причиной стал фильтр, который запрещал использовать в ответах английские слова. Его добавили после того, как бот однажды поприветствовал чат фразой «Good morning».
Проблема быстро вышла за рамки очевидных англоязычных фраз. Имя участника Alex, написанное латиницей, проверка также сочла нарушением. В результате бот не только не мог обратиться к пользователю по имени, но и фактически перестал взаимодействовать с людьми, чьи имена были указаны латинскими буквами.
Фильтр не различал контекст
Затем аналогичная ситуация повторилась с названием соревнований IronSakh. Участница рассказала, что выступала на этом соревновании. Бот дважды пытался составить ответ, в котором использовалось слово IronSakh, и дважды отправлял его на проверку. Оба варианта были забракованы, после чего бот снова промолчал.
Позже правило изменили: латинские слова, которые пользователи сами употребили в разговоре, больше не должны считаться причиной для отказа. Однако сам случай показал, насколько легко формальная проверка может заблокировать нормальный ответ, если не учитывает контекст сообщения.
Научить бота отвечать можно за один вечер. Гораздо сложнее настроить его так, чтобы он понимал, когда нужно ответить, когда действительно следует промолчать и как не раздражать этим десятки или сотни людей. Слишком строгие ограничения могут сделать систему безопаснее на бумаге, но одновременно лишить её главной функции — поддерживать разговор.


