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, т.е. по большей части в рабочие дни в рабочие часы.

-------------

gigachat api explorer (исходники, видео)