Антиспам бот для телеграм группы на Gigachat2
11 марта решил сделать антиспам бота в одну из моих групп в телеграм.
Что за группа?
1. группа открытая, активность небольшая
2. каждый день подключаются новые "участники" и отправляют непрошенные рекламные сообщения
3. новые "участники" умеют проходить капчу (с другой стороны напрягать новых реальных участников капчей - ну, такое ))
Плюс еще было желание меньше уделять времени админской кухне:
больше автоматизации, меньше вовлечения и контроля
Сделано несколько итераций, постепенно отвечая на вопросы
1. может ли gigachat определять спам сообщения?
2. какие сообщения отправлять на спам-проверку?
3. как экономить токены?
4. как не побанить своих активных участников, сообщения которых не прошли спам-проверку?
К чему пришел?
Спамят, в основном, новые участники.
Поэтому алгоритм такой: при присоединении участнику даем 2 балла. при получении сообщения в группе, проверяем сообщение на спам, если это спам - отнимаем -1 балл и даем временное ограничение на 1 час на отправку сообщений в группу
Если достигли уровня 0 баллов, то отправляем участника в бан, а вот если не спам, то добавляем +1 балл. при достижении уровня 3 баллов, перестаем проверять сообщения от участника.
Сообщения админов, конечно, не подвергаем спам-проверке.
Такой алгоритм в принципе позволяет доверять сообщениям тех участников, кто уже прошел проверку сообщений пару раз, и не сразу жестко банить, выкидывая из группы, если вдруг спам-проверка была некорректная.
Вероятно, некоторые спам-участники как-то проверяют есть ли их сообщениев в группе, и при удалении ботом сообщения, снова пытаются отправить. поэтому ограничение на 1 час срезает таких повторщиков, некоторые даже сами покидают группу.
Про промпт
Использую Gigachat Lite, первая модель gigachat немного некорректно определяла спам, gigachat2 стала лучше (анонс произошел 13 марта)
Поначалу в промте прямо спрашивал типа "это спам?" с некоторыми дополнениями и уточнениями, затем пришел к промпту "ты антиспам, опиши одним словом текст".
Поскольку был интерес использовать минимальное количество токенов для классификации сообщения, то экспериментировал с длиной формулировки и длиной анализируемого сообщения.
Промпт приведен выше, а длина анализируемого сообщения в текущий момент порядка 200 символов.
В результате получаю от gigachat одно слово, обычно это прям "спам", иногда "реклама", "вакансия".
Поэтому сформирован список стоп-слов, при получении которых спам-проверка говорит, что это спам.
Экономика
В среднем, порядка 80 токенов за определение спамности сообщения. Сообщения обычно небольшие, на большинство уходит 60-70 токенов, но есть и побольше, тогда тратим порядка 200 токенов.
gigachat дает 900 тысяч токенов бесплатно в год для стандартной модели (Gigachat Lite), 5 млн токенов стоит 1000 рублей, т.е. примерно 10 тысяч сообщений можно проанализировать бесплатно, следующие 50 тысяч за 1000 рублей.
Для небольшой и не очень активной группы можно уложиться и в такие диапазоны. Но если активное сообщество, то, вероятно, будет нужна альтернатива.
Нюансы
Также отмечу, что в спам-сообщениях иногда есть формулировки, которые gigachat не анализирует, просто отвечая одной из "фраз смены разговора".
Да, в этих случаях gigachat отвечает сразу фразой, а не одним словом, как указано в промте.
При получении такой фразы, обычно, можно также отправлять в спам. пока таких фраз 3.
Какие ощущения?
В целом неплохо, сначала поэкспериментировал с промтами, потом пришел к рейтинг-системе, по пути удалив несколько корректных сообщений, и забанив 2-х уважаемых участников сообщества. но вот последние пару недель все вполне аккуратно.
Не 100% процентов, но 97% процентов спам-сообщений бот удаляет моментально.
Остальные 3% оперативно удаляют мои коллеги-админы группы, спасибо им за помощь в поддержке нашего маленького сообщества.
Ниже примерный график с соотношением количества нормальных сообщений со спамом, количество всех сообщений в группе в среднем порядка 30 в день.
Ссылку на бота и группу, где антиспам-бот работает, не буду оставлять. если кому надо, в личные сообщения, пожалуйста, по запросу.
Как-то так.
Что смущает?
1. с точки зрения использования стороннего платного сервиса:
при увеличении количества новых желающих поспамить в группе вырастет потребление токенов. т.е. напрямую расходы.
При чем это может даже целенаправленно, например, со стороны конкурентов спам-атака.
Хотя тут пока просто здравый смысл говорит, кому мол надо 50 тысяч учеток в тг на мою группу закидывать, чтобы они написали по спам-сообщению и потратили мою тысячу рублей на токены))
2. с точки зрения формулировок спам-сообщений:
все таки часть спам сообщений проходит, возможно в будущем будут более ловкие сообщения, которые не будут уже прям такими напрямую спамными. и чтобы их выявить потребуется более сложный промпт, где опять же больше будут использовано токенов.
3. с точки зрения коллег-администраторов и старых участников-молчунов:
Человек долгое время не писал сообщений, тут решил написать,
написал сообщение, оно оказалось типа спамное,
удалил бот из группы сообщение,
участник настойчиво еще раз написал теми же формулировками, и вот у него уже рейтинг 0.
администратору необходимо как-то поднять рейтинг участнику, не выходя условно из телеграма. тут пока продумать надо.
где-то как-то добавить кнопку? команду бота? разабанивать по id пользователя? его еще пойди найди. пока вариант какая-то дополнительная группа или канал для отслеживания действий бота, рассматриваю иные варианты.
Плюс еще Телеграм не позволяет выгружать список участников, так можно было бы просто всех олдов выгрузить, занести их в рейтинг и таким образом исключить из проверки на анти-спам. Но, увы..
Что дальше? Посмотрим.
------------
P.S. вообще, на самом деле вызывает некоторое недоумение такой прямой спам, т.е. новый участник присоединяется к каналу, и тут же отправляет спамное сообщение.
Пересматривал недавно с сыном несколько фильмов про Терминатора, и там же нарратив, что мы, люди, не сможем отличить машину от человека поскольку машины так ловко научатся маскироваться под человека.
А спамеры вместо того чтобы зайти, что-то спросить, сказать привет, т.е. как-то мимикрировать под нормального участника, отправляют с первого сообщения спам.
Это все еще так эффективно и выгодно, чтобы действовать в лоб? И не стоит того, чтобы притворяться человеком?
P.P.S. активность спамеров такая, что как будто они работают в офисе в графике 5х8, т.е. по большей части в рабочие дни в рабочие часы.
-------------