Антиспам бот для телеграм группы на 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 пользователя? его еще пойди найди. пока вариант какая-то дополнительная группа или канал для отслеживания действий бота, рассматриваю иные варианты.

Что дальше? Посмотрим.

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


ссылка на оригинал статьи https://habr.com/ru/articles/901684/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *