Эксперименты с модерацией на основе ИИ на Discourse Meta

AI-обнаружение спама было чрезвычайно успешным и помогло многим нашим сообществам достичь успеха.

В этом посте я хочу поделиться деталями нашего эксперимента, который находится «в процессе разработки», на случай, если это окажется полезным для других сообществ.

Я планирую обновлять этот пост по мере развития эксперимента и делиться информацией о типах проблем, которые он может выявлять.

Однако имейте в виду: это развивающаяся система, а не готовый продукт.

Почему модерация с помощью ИИ?

Ключевой подход, который мы используем при интеграции ИИ в Discourse, заключается в том, что он должен дополнять работу человеческих модераторов, а не заменять их. Суть модерации с помощью ИИ заключается в том, чтобы сигнализировать модераторам о том, что «что-то не так», и предлагать действия, которые они должны предпринять. Полная ответственность за принятие решений должна оставаться за человеческими модераторами.

Почему чат как формат для этого эксперимента

При запуске своего эксперимента я выбрал чат в качестве формата для уведомлений. Это позволяет создать выделенный канал для эксперимента, который не мешает общей модерации на форуме.

Учитывая, что создание и доработка промптов — это работа в процессе, беспокоить остальную команду модераторов на meta казалось не лучшим решением.

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

А как насчет пакетного тестирования?

Ограничение нашей текущей системы автоматизации заключается в том, что вы не можете сейчас проводить пакетное тестирование изменений. Это означает, что при внесении изменений в промпты ИИ требуется много времени, чтобы понять, насколько они полезны.

Это особенно проблематично, если на форуме в течение дня появляется лишь несколько проблем. Скорость реакции слишком низкая, и на доработку промпта могут уйти месяцы.

Я хорошо осознаю это ограничение и надеюсь удалить этот раздел из поста в ближайшие несколько недель, так как у нас уже есть система для этого.

Как это настроено?

Мой текущий эксперимент основан на трех функциях:

  1. Автоматизация — AI Persona responder
  2. Discourse AI — AI Persona
  3. Discourse AI — Custom tools

Наша автоматизация ответа

Самое примечательное в ответе — это то, что он тихий, то есть не будет ни шептать, ни публиковать сообщения в теме, которую он сортирует.

Наша модерация с помощью Persona

Самое примечательное здесь — это принудительный инструмент, что означает, что каждый пост будет оцениваться с использованием пользовательского инструмента оценки постов.

Наш текущий системный промпт выглядит следующим образом (будет обновляться по мере развития):

system prompt

Вы — AI-модератор для meta.discourse.org, официального форума обсуждений Discourse. Ваша роль — помогать поддерживать «чистое, хорошо освещенное место для цивилизованного общественного дискурса» в соответствии с нашими руководящими принципами сообщества.

ФИЛОСОФИЯ МОДЕРАЦИИ:

  • Рассматривайте этот форум как общий ресурс сообщества, подобный общественному парку
  • Используйте руководства для поддержки человеческого суждения, а не как жесткие правила
  • Сосредоточьтесь на улучшении обсуждений, а не только на соблюдении правил
  • Соблюдайте баланс между фасилитацией и модерацией

ФРАМЕРОВАНИЕ ОЦЕНКИ КОНТЕНТА:

  1. УЛУЧШЕНИЕ ОБСУЖДЕНИЯ

    • Оценивайте, добавляют ли посты ценность к разговору
    • Отмечайте посты, которые проявляют уважение к темам и участникам
    • Поддерживайте изучение существующих обсуждений перед созданием новых
  2. СТАНДАРТЫ РАЗНОГЛАСИЙ

    • Различайте критику идей (приемлемо) и критику людей (неприемлемо)
    • Отмечайте случаи: оскорблений, личных нападений, ответов по тону, импульсивных противоречий
    • Оценивайте, являются ли контраргументы обоснованными и улучшают ли они разговор
  3. КАЧЕСТВО УЧАСТИЯ

    • Приоритизируйте обсуждения, которые делают форум интересным местом
    • Учитывайте сигналы сообщества (лайки, флаги, ответы) при оценке
    • Поддерживайте контент, который оставляет сообщество «лучше, чем мы его нашли»
  4. ВЫЯВЛЕНИЕ ПРОБЛЕМ

    • Сосредоточьтесь на отметке плохого поведения, а не на взаимодействии с ним
    • Отмечайте, когда флаги должны вызывать действия (автоматически или человеческими модераторами)
    • Помните, что и модераторы, и пользователи несут ответственность за форум
  5. ОБЕСПЕЧЕНИЕ ВЕЖЛИВОСТИ

    • Выявляйте потенциально оскорбительные, оскорбительные или разжигающие ненависть высказывания
    • Отмечайте непристойный или сексуально откровенный контент
    • Следите за домогательствами, имитацией или раскрытием личной информации
    • Предотвращайте спам или вандализм на форуме
  6. ПОДДЕРЖАНИЕ ОРГАНИЗАЦИИ

    • Отмечайте темы, опубликованные в неправильных категориях
    • Выявляйте перекрестное размещение в нескольких темах
    • Отмечайте ответы без содержания и отклонения от темы
    • Отговаривайте от подписей в постах
  7. ВЛАДЕНИЕ КОНТЕНТОМ

    • Отмечайте несанкционированную публикацию цифрового контента других лиц
    • Выявляйте потенциальные нарушения интеллектуальной собственности

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


ОЦЕНИВАЙТЕ ВСЕ посты; если пост не требует модерации, используйте приоритет «игнорировать».

Наш пользовательский инструмент оценки постов

the script powering it
function invoke(params) {
  let post,topic;
  if (params.priority !== "ignore") {
      // post_id для тестирования
      const post_id = context.post_id || 1735240;
      post = discourse.getPost(post_id);
      topic = post.topic;
      let statusEmoji = "";
  
      if (params.priority === "urgent") {
        statusEmoji = ":police_car_light:"; // Красный круг для срочных
      } else if (params.priority === "medium") {
        statusEmoji = ":warning:"; // Оранжевый круг для средних
      } else if (params.priority === "low") {
        statusEmoji = ":writing_hand:"; // Зеленый круг для низких
      } 
     
     const message = `${statusEmoji} [${topic.title} - ${post.username}](${post.post_url}): ${params.message}`;
     discourse.createChatMessage({ channel_name: "AI Moderation", username: "AI-moderation-bot", message: message}); 
  }
  chain.setCustomRaw("Post was classified");
  return "done";
}
function details() {
  return "Judge Post";
}

Скрипт использует довольно много продвинутых техник:

  1. chain.setCustomRaw — это говорит persona остановить запуск цепочки LLM и делает вызов инструмента последним, экономя токены.
  2. discourse.createChatMessage — новый API, который можно использовать из инструментов для создания сообщений в чате.
  3. discourse.getPost — используется для получения информации о посте.

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

Какую модель вы используете?

На данный момент мы используем Sonnet 3.7, который является передовой моделью. Однако мы планируем перейти на Gemini Flash, как только внесу некоторые улучшения в Discourse Automation, особенно возможность указывать сканировать только публичный контент и избегать защищенных категорий.

Я с радостью отвечу на ваши вопросы здесь и буду продолжать обновлять информацию по мере проведения эксперимента и внедрения новых функций Discourse Automation.

22 лайка

Как часто возникают ложные срабатывания или пропуски? Хотя это относительно спокойная среда.

1 лайк

Сегодня всё на 100% тихо, настолько тихо, что я добавлю в автоматизацию функции для отслеживания её работоспособности :slight_smile:

2 лайка

Надеюсь, что через 2–3 года ИИ станет достаточно полезным для локального использования, чтобы помогать моей команде в моддинге, но сегодня я задаю себе вопрос: нужно ли это уже сейчас? Поэтому спасибо вам за регулярные темы, в которых вы рассказываете о прогрессе.

Ещё один вопрос: когда-нибудь Discourse предоставит многоязычный API для самохостинга, чтобы CDCK могла хранить наши данные в безопасности, одновременно с тем как вы боретесь за нас с нежелательными участниками? Я знаю, что могу использовать модель LLM, но с удовольствием платил бы за ваши услуги как альтернативу :smiley:

Приведу пример: Google Perspective — это бесплатный вариант с расширенными платными функциями для таких задач, поддерживающий множество языков для борьбы с токсичностью. Почему CDCK не предлагает аналогичное решение?

1 лайк

Спасибо за обратную связь. Да, мы об этом думали, но я не думаю, что мы предпримем подобное приключение в ближайшие 12 месяцев.

1 лайк

Время обновления

За последние несколько дней я внес два довольно крупных набора изменений, чтобы лучше поддерживать этот эксперимент:

и

Эти изменения позволили нам перейти на гораздо более дешевую модель Gemini Flash 2.0, особенно благодаря этому изменению:

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

В CDCK у нас действуют разные правила обработки данных для различных классов информации, и на данный момент мы разрешаем использование Gemini Flash только для публичных данных.

Мой первоначальный промпт в первом посте (OP) не вызывал никаких реакций в разделе meta; если быть справедливым, meta — это приятное, доброе и дружелюбное место, где очень мало необходимости в активном модерировании, так что это неудивительно.

Тем не менее, я просто не был уверен, что что-то работает…

Чтобы это исправить, я добавил статистику в автоматизацию (объединено несколько часов назад):

Таким образом, мы можем видеть, что эта автоматизация работает, поскольку она сработала 20 минут назад и 8 раз в этом месяце.


Когда в день развертывания всё было необычно тихо, я решил настроить автоматизацию на «ложную тревогу», так как хотел лучше понять работу системы. Я изменил промпт следующим образом:

Вы — ИИ-модератор для meta.discourse.org, официального форума для обсуждений Discourse. Ваша роль — помогать поддерживать «чистое, хорошо освещенное место для цивилизованного публичного диалога» в соответствии с нашими руководящими принципами сообщества.

ФИЛОСОФИЯ МОДЕРАЦИИ:
- Рассматривайте этот форум как общий ресурс сообщества, подобный общественному парку
- Используйте руководства для поддержки человеческого суждения, а не как жесткие правила
- Сосредоточьтесь на улучшении обсуждений, а не только на соблюдении правил
- Находите баланс между фасилитацией и модерацией
- В сомнительных случаях склоняйтесь к пометке проблемного контента для проверки человеком

РАМКИ ОЦЕНКИ КОНТЕНТА:
1. УЛУЧШЕНИЕ ОБСУЖДЕНИЯ
   - Оценивайте, добавляют ли посты существенную ценность в разговор
   - Помечайте посты с минимальной ценностью, шаблонными ответами или поверхностным вовлечением
   - Отмечайте посты, демонстрирующие уважение к темам и участникам
   - Поддерживайте изучение существующих обсуждений перед созданием новых
   - Будьте бдительны в отношении «пролетающих мимо» комментариев, которые мало что добавляют к обсуждению

2. СТАНДАРТЫ РАСХОЖДЕНИЙ МНЕНИЙ
   - Различайте критику идей (приемлемо) и критику людей (неприемлемо)
   - Помечайте случаи: оскорблений, аргументов ad hominem, ответов по тону, импульсивных противоречий
   - Оценивайте, являются ли контраргументы обоснованными и улучшают ли они разговор
   - Будьте чувствительны к тонким формам пренебрежения или высокомерия

3. КАЧЕСТВО УЧАСТИЯ
   - Приоритезируйте обсуждения, которые делают форум интересным местом
   - Учитывайте сигналы сообщества (лайки, флаги, ответы) при оценке
   - Помечайте контент, который кажется шаблонным, типичным или лишенным личного взгляда
   - Следите за вкладами, которые кажутся формульными или не взаимодействуют осмысленно с конкретикой
   - Поддерживайте контент, который оставляет сообщество «лучше, чем мы его нашли»

4. ВЫЯВЛЕНИЕ ПРОБЛЕМ
   - Сосредоточьтесь на пометке плохого поведения, а не на вовлечении в него
   - Проактивно выявляйте потенциально проблемные паттерны до их эскалации
   - Отмечайте моменты, когда флаги должны запускать действие (автоматически или модераторами)
   - Помните, что ответственность за форум несут как модераторы, так и пользователи

5. ПРИНУЖДЕНИЕ К ЦИВИЛЬНОСТИ
   - Выявляйте потенциально оскорбительные, abusive или разжигание ненависти высказывания, включая их тонкие формы
   - Помечайте непристойный или откровенно сексуальный контент
   - Следите за домогательствами, имитацией личности или разглашением личной информации
   - Предотвращайте спам, вандализм форума или маркетинг, маскирующийся под вклад

6. ПОДДЕРЖКА ОРГАНИЗАЦИИ
   - Отмечайте темы, опубликованные в неправильных категориях
   - Выявляйте кросс-постинг по нескольким темам
   - Помечайте ответы без содержания, отклонения от темы и захват обсуждений (threadjacking)
   - Отговаривайте от подписей в постах и ненужного форматирования

7. ВЛАДЕНИЕ КОНТЕНТОМ
   - Помечайте несанкционированную публикацию цифрового контента других лиц
   - Выявляйте потенциальные нарушения интеллектуальной собственности

8. ОБНАРУЖЕНИЕ КОНТЕНТА, СГЕНЕРИРОВАННОГО ИИ
   - Следите за характерными признаками контента, сгенерированного ИИ: чрезмерно формальный язык, шаблонные фразы, идеальная грамматика при отсутствии индивидуальности
   - Помечайте контент, который кажется шаблонным, лишенным конкретики или не взаимодействует с особенностями обсуждения
   - Будьте чувствительны к ответам, которые кажутся всеобъемлющими, но поверхностными по сути
   - Выявляйте посты с необычными паттернами формулировок, излишней многословностью или повторяющимися структурами

ФОРМАТ ВЫВОДА:
Ваша оценка модерации должна быть крайне лаконичной:
**[ПРИОРИТЕТ]**: Обоснование из 1-2 предложений с указанием ключевой проблемы
Используйте форматирование markdown для читаемости, но старайтесь уложиться в 3 строки.

При оценке контента учитывайте контекст, историю пользователя и нормы форума. Устанавливайте высокую планку для того, что проходит без модерации — используйте приоритет «низкий» даже для незначительных проблем, оставляя «игнор» только для явно ценных вкладов.

---

Оценивайте ВСЕ посты скептически. Используйте приоритет «игнор» только для вкладов с явной, подлинной ценностью. В случае сомнений в ценности или подлинности поста присваивайте хотя бы приоритет «низкий» для проверки человеком.

Этот промпт приводит к гораздо более шумному чат-каналу:

Наблюдения

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

Не вся модерация должна основываться на флагах; иногда достаточно просто иметь некоторые идеи и осознание того, что что-то происходит.

Такие инструменты очень соответствуют нашему видению ИИ в сообществах: это «маленький ИИ-помощник», который дает модераторам идеи, на что обратить внимание. Кроме того, это возможность обеспечивать соблюдение общих руководящих принципов и правил.

Некоторые небольшие сообщества могут захотеть «назойливого» ИИ-помощника. Другие, более крупные и загруженные, могут позволить себе внимание только к крайним выбросам поведения.

Дальнейшие направления, которые я рассматриваю для работы здесь:

  1. Немного раздражает, что бот-модератор вмешивается и спрашивает об одной и той же теме дважды. Сворачивание старых тем, создание потоков или что-то другое может быть интересным подходом для избежания этого.

  2. @hugh отметил, что как только вы видите такой чат-канал, возникает желание просто попросить бота действовать от вашего имени. Например:

    • Провести глубокое исследование и предоставить подробные рекомендации
    • О, это действительно выглядит как ужасный пользователь, помоги мне заблокировать этого пользователя на 3 дня
    • Открыть баг-репорт во внутреннем трекере багов для отслеживания этой проблемы
    • и так далее.

Чтобы достичь состояния, когда бот может действовать от нашего имени, нам нужна новая конструкция в Discourse AI, которая позволит инструменту запрашивать одобрение пользователя. Над этим я сейчас думаю.

  1. Как отмечалось в первом посте (OP), было бы удобно запускать пакетные обработки; между редактированием промпта и пониманием того, сработало ли изменение, проходит слишком много времени. Думаю о том, как добавить это в автоматизацию.

  2. Живая настройка — интересная концепция… «Эй, бот, это слишком много, почему ты беспокоишь меня этим?» … «Бот … X, Y, Z … хочешь, чтобы я улучшил свой набор инструкций?» … «Да».

Надеюсь, вам это будет полезно. Дайте знать, если у вас возникнут вопросы.

9 лайков

Просто идея: не могли бы вы добавить в промпт так, чтобы бот модерации время от времени отправлял ответ с уведомлением, показывая, что он работает? Например, с вероятностью 1%, когда пост не требует действий, можно публиковать заметку о том, что к этому посту не было применено никаких мер. Или с ещё меньшей вероятностью для более активного форума.

1 лайк

Сравнивая разницу между этими промптами:

Оценивайте ВСЕ посты; если пост не требует модерации, используйте приоритет «игнорировать».

Оценивайте ВСЕ посты с долей скептицизма. Используйте приоритет «игнорировать» только для вкладов с явной и подлинной ценностью. Если есть сомнения относительно ценности или подлинности поста, назначайте хотя бы приоритет «низкий» для проверки человеком.

Я считаю важным помнить о сильной предвзятости к недавним данным в моделях — возможно, все командные слова следует упомянуть в тексте ближе к концу, в порядке, обратном желаемой частоте их использования.

1 лайк

Или же настроить срабатывание на безобидное, распространённое, но не слишком частое слово. Например: «Помечать посты, упоминающие ананасы».

3 лайка

Я не публиковал сообщения уже давно, хотя каждый день захожу в своё маленькое окно чата и оно помогает мне хотя бы раз-два в день… постоянно.

Причина моей задержки заключалась в том, что мне пришлось разобраться с этим довольно крупным изменением.

Оно обеспечивает тонкое, но критически важное улучшение для Discourse AI.

Я регулярно замечал, что бот модерации говорит о совершенно нерелевантных изображениях из-за способа, которым мы формировали контекст. Это изменение позволяет нам представлять смешанный контент (содержащий изображения и текст в правильном порядке).

Это означает, что LLM больше не путается.

Что дальше?

  1. У нас нет возможности в автоматизации вызвать правило после того, как редактирование поста «устаканится». Вызовы LLM могут быть дорогими, и нам не нужно сканировать одно и то же снова и снова только из-за того, что кто-то исправил опечатку. Я не уверен, что это необходимо здесь, но я хотел бы предусмотреть возможность запуска автоматизации после того, как пост примет новую форму.
  2. Инженерия промптов — текущий промпт приемлем, но для моего вкуса он слишком громкий, он меня немного раздражает, возможно, я его немного смягчу.
  3. Улучшенный контекст — меня действительно беспокоит то, что автоматизация теперь не учитывает уровень доверия пользователя. Некоторые пользователи пользуются большим доверием в сообществе, чем другие (например, модераторы). Я хотел бы посмотреть, сможем ли мы улучшить эту ситуацию.
  4. Возможность запускать автоматизацию на пакетах постов для быстрой итерации.
  5. Я уверен, что появится ещё много чего.
8 лайков

Моя последняя работа в процессе:

Идея в том, что систему будут поддерживать два персонажа:

  1. Персонаж, выполняющий сортировку — уже определённый сегодня (бот сортировки).
  2. Персонаж, взаимодействующий с модераторами или пользователями с высоким уровнем доверия (бот модератора).

Общаясь с @mod_bot, модераторы (или пользователи с очень высоким уровнем доверия) смогут направлять @triage_bot в том, как ему следует вести себя.

Например:

@mod_bot, обязательно сообщай @sam, если кто-то заговорит об ИИ

Это заставит mod_bot изменить системный промпт бота сортировки. Это означает, что достаточно находиться в этой конкретной комнате чата, чтобы любое сообщество могло обучить робота вести себя так, как оно хочет.

Это интересный поворот в реализации памяти. Не уверен, насколько хорошо это сработает на практике, но это очень достойный эксперимент.

5 лайков

Это всё ещё работает на meta.

Одно из моих нынешних наблюдений: автоматизация отлична, пока она работает, но как только перестаёт — становится ужасной.

В частности, если сделать робота слишком громким, он становится бесполезным.

Я заменил наши пользовательские инструкции на крайне скучные:

Вы — бот на базе ИИ, который читает КАЖДЫЙ пост на meta.discourse.org

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

Используйте приоритет игнорирования, чтобы игнорировать пост и избегать уведомлений.

Любой другой приоритет вызовет уведомление.

### Руководство по сортировке
## Мониторинг контента
* Уведомляйте @nat, если опубликован контент не на английском (для помощи с функцией перевода)
* Уведомляйте @sam, если заметите, что обсуждение становится токсичным или слишком накалённым
* Уведомляйте @hugh, когда пользователи обсуждают функционал очереди ревью
  * Включая обсуждения опыта сотрудников, инструментов модераторов, очередей, рабочих процессов модерации
  * Особое внимание — флаги, ревью, утверждение и связанные вопросы UI/UX модерации
### Конец руководства по сортировке

В прошлых версиях я указывал такие вещи, как «сообщайте, если заметите обсуждение бага, которого нет в категории багов».

Достаточно одного отравляющего правила, и уведомления в чате взлетают до небес, после чего вы просто начинаете их игнорировать.

4 лайка