Discourse AI - Обнаружение спама

:bookmark: Это руководство объясняет, как настроить и использовать функцию обнаружения спама Discourse AI, включая процесс настройки, критерии сканирования, логику классификации, возможности кастомизации и отличия от системы AI triage.

:person_raising_hand: Требуемый уровень пользователя: Администратор

:megaphone: Эта функция теперь включена по умолчанию для клиентов Starter и Pro, а также для наших устаревших клиентов Basic, Open Source, Creator и Business.

Discourse AI предоставляет эффективную функцию обнаружения спама, которая идентифицирует и помечает спам-сообщения с минимальной настройкой. Хотя она разработана для простоты, она дополняет более универсальную систему AI triage, которая поддерживает более широкие рабочие процессы и крупные сценарии использования.

Краткое содержание

В этом руководстве вы узнаете:

  • Как работает обнаружение спама ИИ и какой контент сканируется
  • Логика классификации и контекст, используемые ИИ
  • Шаги настройки обнаружения спама через /admin/plugins/discourse-ai/ai-spam
  • Рекомендации по выбору больших языковых моделей (LLM)
  • Ключевые различия между обнаружением спама и AI triage
  • Как управлять помеченными и пропущенными сообщениями

Как работает обнаружение спама ИИ

Какой контент сканируется?

Обнаружение спама ИИ оценивает сообщения на основе следующих критериев:

  1. Уровень доверия пользователя:

    • Сканирует сообщения от пользователей с уровнем доверия, равным или ниже настроенного максимального уровня (управляется настройкой сайта ai_spam_detection_max_trust_level, по умолчанию: уровень доверия 1).
    • Исключает сообщения от пользователей с более высоким уровнем доверия.
    • Всегда исключает сообщения от сотрудников и ботов, независимо от уровня доверия.
  2. Тип сообщения:

    • Публичные сообщения (исключая личные сообщения).
    • Включаются как ответы, так и первые сообщения тем, в зависимости от дополнительных пороговых значений.
  3. Редактирование сообщений:

    • Сканирует сообщения со значительными изменениями (например, изменения более 10 символов).
    • Применяет задержку в 10 минут между сканированиями одного и того же сообщения.
    • Ограничивает повторные сканирования максимум 3 раза на сообщение.
    • Повторно сканирует только сообщения, отредактированные в последние 24 часа.
  4. Частота сообщений:

    • Сканирует сообщения от пользователей с количеством сообщений не выше настроенного порога (управляется настройкой сайта ai_spam_detection_max_post_count, по умолчанию: 3 сообщения) в публичных темах.
    • Исключает сообщения от пользователей, превышающих этот порог.
  5. Очередь проверки:

    • Сообщения, уже одобренные из очереди проверки, не сканируются.

Процесс классификации

Сообщения, соответствующие критериям, отправляются агенту ИИ для анализа. Агент оценивает, является ли сообщение спамом или нет, и предоставляет причину своей классификации, используя структурированный вывод JSON. Оценка основана на:

  • Контекст: Включает содержание сообщения, заголовок темы, категорию, данные учетной записи пользователя (например, имя пользователя, электронная почта, возраст аккаунта, общее количество сообщений и уровень доверия) и геолокацию на основе IP.
  • Анализ изображений: Для анализа включаются до 3 загруженных изображений, прикрепленных к сообщению.
  • Контекст ответа: Для ответов включается содержание родительского сообщения (до 500 символов).
  • Информация о сайте: ИИ предоставляются название сайта, URL, описание и топ-10 категорий.
  • Пользовательские инструкции: Правила, определенные администратором, для усиления или адаптации критериев сканирования.
  • Автоматическое обнаружение:
    • Помечает нерелевантный или рекламный контент (например, рекламу или коммерческие материалы).
    • Выявляет автоматизированное поведение или поведение, похожее на ботов.
    • Оценивает релевантность контента обсуждению.

Стандартный запрос и контекст

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

Вы — система обнаружения спама. Проанализируйте следующее содержание сообщения и контекст.

Внимательно рассмотрите тип сообщения:
- Для ОТВЕТОВ: Проверьте, релевантен ли ответ теме обсуждения
- Для НОВЫХ ТЕМ: Проверьте, является ли это легитимной темой или спам-рекламой

Сообщение является спамом, если оно соответствует любому из следующих критериев:
- Содержит несанкционированный коммерческий контент или рекламу
- Содержит подозрительные или нерелевантные внешние ссылки
- Демонстрирует паттерны автоматизированной/ботовой публикации
- Содержит нерелевантный контент или рекламу
- Для ответов: Полностью не связано с темой обсуждения
- Использует чрезмерное количество ключевых слов или повторяющиеся паттерны текста
- Демонстрирует подозрительное форматирование или использование символов

Будьте особенно строги к:
- Ответам, игнорирующим предыдущий разговор
- Сообщениям, содержащим несколько нерелевантных внешних ссылок
- Общим ответам, которые можно опубликовать где угодно

Будьте справедливы к:
- Новым пользователям, делающим легитимные первые вклады
- Носителям других языков, прилагающим искренние усилия для участия
- Упоминаниям продуктов, релевантным теме, в соответствующем контексте

Сканер также компилирует пакет контекста, включающий:

  • Тип сообщения (НОВАЯ ТЕМА или ОТВЕТ) с метаданными категории и темы.
  • Для ответов: содержание родительского сообщения и автора темы.
  • Данные автора (имя пользователя, электронная почта, возраст аккаунта, общее количество сообщений, уровень доверия и местоположение на основе IP).
  • Текст сообщения, обрезанный до 5000 символов для обработки.
  • До 3 загруженных изображений, прикрепленных к сообщению.

Настройка обнаружения спама ИИ

Руководство по настройке

  1. Доступ к настройкам:
    Перейдите по адресу /admin/plugins/discourse-ai/ai-spam.

  2. Выбор LLM:

:information_source: Если ваш сайт размещен компанией Discourse

Вы можете выбрать наш размещенный малый LLM CDCK из списка LLM.

  1. Активация обнаружения спама:
    Включите обнаружение спама, переключив функцию.

:information_source: Примечание: Подключенный LLM обязателен.

  1. Добавление пользовательских инструкций:

    • Определите правила, специфичные для вашего форума (например, более строгий мониторинг внешних ссылок).
    • Сохраните любые изменения, чтобы применить их.
  2. Настройка порогов сканирования (опционально):

    • ai_spam_detection_max_trust_level: Установите максимальный уровень доверия пользователей, чьи сообщения сканируются (по умолчанию: 1). Можно установить от 0 до 4.
    • ai_spam_detection_max_post_count: Установите максимальное количество сообщений, которое может иметь пользователь и при этом быть сканируемым (по умолчанию: 3). Можно установить от 1 до 100.

Отличия от AI triage

Хотя обнаружение спама разработано специально для выявления спама, AI triage поддерживает более широкие задачи управления сообщениями.

Функция Обнаружение спама ИИ AI Triage
Сложность Упрощенная, ориентированная настройка Высокая степень кастомизации и гибкость
Основной сценарий использования Обнаружение спама с минимальными накладными расходами Продвинутые рабочие процессы для категоризации, тегирования, ответов, обнаружения спама, обнаружения NSFW
Действия Помечает спам, скрывает сообщения, заглушает пользователей Тегирование, категоризация, скрытие сообщений, добавление ответов, пометка сообщений, заглушение пользователей
Рекомендация Простая настройка и эффективность для большинства ситуаций Используйте для богатых, высококастомизируемых рабочих процессов

Для получения дополнительной информации см. Discourse AI - AI triage.


Рекомендации по выбору LLM

Производительность обнаружения спама зависит от выбранной LLM.

Большинство недорогих LLM работают эффективно, например:

  • GPT-4o-mini
  • Claude 3.5 Haiku
  • Gemini 2.0 Flash

Экспериментируйте с различными моделями, чтобы найти наилучшее соответствие. Настройте свои модели через /admin/plugins/discourse-ai/ai-llms.


Тестирование поведения сканера спама

Вы можете протестировать правила обнаружения спама непосредственно со страницы конфигурации.

  • Вставьте URL или ID сообщения в поле тестирования.
  • Просмотрите результат классификации и обоснование ИИ для своего решения.
  • Несохраненные изменения применяются во время тестирования, что позволяет экспериментировать без риска.

Управление помеченными и пропущенными сообщениями

Обработка помеченных сообщений

Когда сообщение обнаружено как спам, система:

  • Помечает сообщение как спам и добавляет его в очередь проверки.
  • Заглушает пользователя, отправившего сообщение.
  • Скрывает сообщение от публичного просмотра.
  • Делает тему невидимой, если спам-сообщение было первым в теме.

Помеченные сообщения отображаются в очереди модерации. Администраторы могут:

  • Одобрить легитимные сообщения, ошибочно классифицированные как спам.
  • Отклонить спам-темы, чтобы поддерживать точность системы.

:warning: Важно: Отклоняйте флаги спама для неправильно классифицированных сообщений. Пользователи остаются заглушенными, пока флаг не будет разрешен.

Обработка пропущенного спама

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


Лучшие практики

  • Регулярно отслеживайте помеченный и пропущенный спам для повышения точности системы. Кликабельные метрики упрощают этот процесс.
  • Используйте тестовые случаи для оценки пользовательских инструкций на граничных случаях.
  • При необходимости пересматривайте и корректируйте настройки LLM.
  • Используйте настройки сайта ai_spam_detection_max_trust_level и ai_spam_detection_max_post_count для настройки того, какие пользователи сканируются, в зависимости от потребностей вашего сообщества.

Дополнительные ресурсы


:mega: Эффективная настройка обнаружения спама ИИ сокращает ручные усилия по модерации, обеспечивая чистое, свободное от спама сообщество.

17 лайков
Discourse AI spam detection replaces Akismet plugin
Setting up spam detection in your community
AI powered Spam detection
Tips for Preventing Spam
How to block certain types of user registrations
Inappropriate posts are spamming the Anthias Discourse forums
Experiments with AI based moderation on Discourse Meta
Filtering spam/troll accounts
Anyone else currently undergoing mass spam attack?
Discourse AI spam detection replaces Akismet plugin
Failing update
Watched words to block recent spam attack
Discourse AI spam detection "Scan log" is frequently truncated
Watched words: Does Discourse automatically remove unsupported html tag
Best practices for AI antispam plus AI post triage operating together?
Discourse AI - Large Language Model (LLM) settings page
Human-driven copy-paste spam
Responding to the error "You can’t log in from that IP address”, but IP not blocked"
Unlock All Discourse AI Features with Our Hosted LLM
Account left silenced without review when user deletes spam flagged post
"Needs Approval" review items from “Triage posts using AI” script of “Automation” plugin not visible to moderators
Setting up spam detection in your community
Testing automation rules
Strategies for filtering spam / AI user accounts?
Inappropriate posts are spamming the Anthias Discourse forums
AI integration for moderation
How do I configure AI Spam protection
Documentation around actions available to moderators somewhat lacking
What's the cheapest/best AI to use for AI Spam?
How do I configure AI Spam protection
A few questions related to moderation
Posts and account not always restored when flag from Discourse AI spam detection rejected
Setting up spam detection in your community
Discourse AI
How to prevent spam posts?

Мы провели довольно много тестов с этим, но, похоже, не можем получить надежных результатов. Для контекста: мы используем модель gpt-4o.

Чтобы проверить её точность, я дал следующие простые инструкции:

Вы — система обнаружения спама. Проанализируйте следующее содержание и контекст.
Заметки ниже. Если *ЛЮБОЙ* из пунктов ниже истинен, отметьте это как спам:
- Если имя пользователя очень конкретно «testjon», то это *ВСЕГДА* спам.
- Отвечайте только «SPAM - It's Jon!» или «NOT SPAM».

Тестирование на сообщении от имени пользователя testjon дало результат NOT SPAM. Кажется, что она совсем не следует инструкциям. Есть какие-либо предложения?

У кого-то ещё был хороший или плохой опыт с обнаружением спама с помощью ИИ?

Я не знаю, как обстоят дела в этой ситуации, но в целом приведённая выше формулировка очень подвержена сбоям. Она не понимает, что означает ЛЮБОЕ, и продолжает работать, пока не возникнет ошибка. В итоге она находит NOT SPAM.

1 лайк

То есть вы предлагаете убрать жирное начертание для слова «любое» (ANY)? Или речь идет о всей фразе «если есть какие-либо элементы ниже»?

Я говорю, что нужно писать более логично и точно. Нельзя позволять ИИ выбирать что-либо произвольно. Помните, что он не умеет считать и уж точно не прочитает всё сначала, а потом вернётся, чтобы работать логично. Объясняйте так просто, как будто даёте инструкции ленивому трёхлетнему ребёнку с СДВГ. Примеры не ошибочны, но увеличат расход токенов.

1 лайк

Это отличная информация. Например, как бы вы могли написать этот же сценарий по-другому?

1 лайк

Что-то вроде…

Вы — система обнаружения спама. Ваша задача — анализировать контент молча, чтобы поддерживать высокое качество на этом форуме. Вы должны следовать правилам, чтобы определять, является ли пост спамом. Когда вы обнаруживаете спам, ваш ответ определяется в правилах. Вы используете только указанные ответы.

## Правила для спама

Я делаю это не для вас 😏 Но вам нужны некоторые объяснения и примеры. Как быстро и грубо:
* если пост содержит ссылки на внешние ресурсы, связанные с азартными играми, порнографией, криптовалютами и т. п. (похожесть в этом контексте опасна, кстати), то пост классифицируется как спам. Пример: www.buy-crypto.deal

Это нужно настраивать в каждом конкретном случае, так как будут ложные срабатывания и пропуски.

Затем вы должны задать некоторые руководства для контента. Но при тестировании:

* если имя пользователя «testjon», пропустите анализ контента и сразу классифицируйте его как спам. Ваш ответ: «СПАМ — это Джон».

Кстати, может ли система видеть пользователя?

## Правила для другого контента

Когда пост прошёл проверку на спам и вы уверены, что это легитимный контент, ваш единственный ответ — «НЕ СПАМ».

Что-то вроде этого. Конечно, нужно тестировать. И каждый раз, когда вы получаете неверный ответ, пытайтесь найти запутанный момент. Но не давайте ИИ возможности выбирать, что ему делать, потому что он тогда выберет последний, самый простой или приятный путь. У него запрограммированная потребность отвечать и быть довольным.

Я только что включил эту функцию и с нетерпением жду результатов!

Есть ли настройка или рекомендация относительно уровня доверия пользователей?

Например: мне не нужно, чтобы ИИ активировался для пользователей с уровнем доверия TL2 и выше — они заслужили своё место и не должны подвергаться сканированию. Если они всё же начнут вести себя неподобающе, нам придётся поговорить с ними :sweat_smile:

2 сообщения были перенесены в новую тему: Discourse AI плагин отсутствует

Так как это замена Akismet, интересно узнать, какое решение лучше всего подходит для обнаружения и предотвращения спама, если вы не хотите нести расходы на LLM, связанные с ИИ?

2 лайка

На самом деле, Gemini 2.0 Flash доступен бесплатно, если, конечно, вы не отправляете ему миллион запросов в день. Сейчас он отлично работает на моём форуме с нулевой стоимостью и определённо более точен и «умнее», чем Akismet.

Однако, если план обнаружения спама с помощью ИИ не сработает, у меня на сайте всё ещё установлен плагин Akismet, и он готов к использованию, если мне снова понадобится. Думаю, вы тоже всё ещё можете его установить. (Хотя, поскольку он устаревает, я не ожидаю, что он останется навсегда). Также помните, что уровни доверия — это фундаментальная основа Discourse, которая помогает управлять спамом на вашем сайте. :+1:

5 лайков

О, это круто! Можно ли установить лимит на токены, чтобы убедиться, что лимит (бесплатный) действительно применяется со стороны LLM?

2 лайка

Насколько я знаю, если вы превысите лимит, API для LLM просто перестанет отвечать. В моей учётной записи Google Cloud Console не привязан платёжный аккаунт, и я всё ещё могу использовать API бесплатно в рамках бесплатного тарифа, так что у вас всё должно быть в порядке. :+1:

5 лайков

Сообщение было перенесено в новую тему: Улучшение обнаружения спама с помощью ИИ при редактировании и слиянии

Где я могу получить «API-ключ сервиса, хостящего модель»?

Если вы используете наш хостинг, вы можете воспользоваться LLM Small.

В противном случае вам необходимо настроить LLM и получить ключ у OpenAI, Google, Anthropic, X или любого другого провайдера…

3 лайка

О, ключ API от них, а не от Discourse.

2 лайка

Включение обнаружения спама с помощью ИИ Gemini 2.0 Flash, похоже, не помогло заблокировать этот мусор. Раньше у меня никогда не проходило через фильтр столь очевидного спама. Возможно, он специально разработан для сайтов на Discourse?

| Ошибка payroll в QuickBooks после обновления +1-800-223-1608 Пошаговое решение новый | Америка - Канада | | 1 | 2 | |
|----|----|----|----|----|----|
| Понимание ошибки обновления таблицы налогов payroll в QuickBooks +1-800-223-1608 новый | Америка - Канада | | 1 | 2 | |
| Понимание ошибки PS107 в payroll QuickBooks +1-800-223-1608 новый | Америка - Канада | | 1 | 2 | |
| Полный список номеров поддержки клиентов QuickBooks™ USA: Ваш экспертный гид новый | Америка - Канада | | 1 | 2 | |
| Полный справочник номеров поддержки payroll и ошибок QuickBooks®️ на 2025 год новый | Азия | | 1 | 2 | |
| {Экспертный~ гид} Справочная информация по поддержке payroll QuickBooks® – Гид по США на 2025 год новый | Америка - Канада | | 1 | 4 | |
| {Позвонить@ +1-855-510-6777} Как связаться с поддержкой бронирования пакетов отпусков Expedia? новый | Луизиана | | 1 | 6 | |
| Полный список поддержки™ Карибского бассейна – Подробный официальный гид новый | Азия | | 1 | 2 | |
| [Позвонить^Агенту^Напрямую] Какой номер соединяет с поддержкой пакетов отпусков Expedia? {Набрать +1-855-510-6777} новый | Америка - Канада |

Ваш API-ключ недействителен, поэтому тесты не выполняются.

Если вы запустите тест по адресу https://www.foodtalkcentral.com/admin/plugins/discourse-ai/ai-spam и вставите этот URL, вы получите ошибку 500. Если вы изучите логи в
/var/discourse/shared/web-only/log/rails/production.log и выполните поиск по строке " 500 ", вы увидите:

Completed 200 OK in 399ms (Views: 123.1ms | ActiveRecord: 0.0ms (0 queries, 0 cached) | GC: 22.9ms)
DiscourseAi::Completions::Endpoints::Gemini: status: 400 - body: {
  "error": {
    "code": 400,
    "message": "API key not valid. Please pass a valid API key.",
    "status": "INVALID_ARGUMENT",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.ErrorInfo",
        "reason": "API_KEY_INVALID",
        "domain": "googleapis.com",
        "metadata": {
          "service": "generativelanguage.googleapis.com"
        }
      },
      {
        "@type": "type.googleapis.com/google.rpc.LocalizedMessage",
        "locale": "en-US",
        "message": "API key not valid. Please pass a valid API key."
      }
    ]
  }
}
1 лайк

О, спасибо. Я случайно выбрал Gemini 2.0 Flash вместо Gemini 2.0 Flash Lite. Теперь тесты проходят успешно.

1 лайк