Experimentos con moderación basada en IA en Discourse Meta

La detección de spam por IA (Discourse AI - Spam detection) ha tenido un éxito tremendo y ha ayudado a muchas de nuestras comunidades a prosperar.

En esta publicación, me gustaría compartir detalles sobre nuestro experimento “en progreso”, en caso de que sea útil para otras comunidades.

Tengo la intención de mantener esta publicación actualizada a medida que el experimento progrese y compartir información sobre la clase de problemas que puede detectar.

Sin embargo, tenga en cuenta: este es un sistema en evolución, no un producto final todavía.

¿Por qué moderación por IA?

Un enfoque clave que tenemos con la integración de IA en Discourse es que debe agregar valor a los moderadores humanos, en lugar de reemplazarlos. La promesa de la moderación por IA es que puede señalar a los moderadores que “algo está mal” y hacer recomendaciones sobre las acciones que deben tomar. La agencia debe dejarse completamente en manos de los moderadores humanos.

¿Por qué el chat como modalidad para este experimento?

Al montar mi experimento, opté por usar el chat como modalidad para las notificaciones. Esto permite un canal dedicado para el experimento que no interfiere con la moderación general en el foro.

Dado que construir y refinar indicaciones es un trabajo en progreso, molestar al resto del equipo de moderación en meta no me pareció un buen enfoque.

Cuando le das a la gente proyectos de IA muy incompletos, puedes perder muy fácilmente toda la confianza y el apoyo futuro.

¿Qué pasa con las pruebas por lotes?

Una limitación de nuestro sistema de automatización actual es que actualmente no se pueden probar los cambios por lotes. Esto significa que cuando realizas cambios en las indicaciones de IA, hay un largo retraso hasta que descubres cuán útil es.

Esto es particularmente problemático si solo ves un puñado de problemas en el foro durante el día. El tiempo de reacción es demasiado lento y puede llevar meses refinar una indicación.

Soy muy consciente de esta limitación y espero eliminar esta sección de la publicación en las próximas semanas, ya que tenemos un sistema para hacerlo.

¿Cómo está configurado esto?

Mi experimento actual se basa en 3 características:

  1. Automatización - Respondedor de IA Persona
  2. IA de Discourse - Persona de IA
  3. IA de Discourse - Herramientas personalizadas

Nuestra automatización de respondedor

Lo más notable del respondedor es que es silencioso, lo que significa que no susurrará ni publicará en el tema que clasifica.

Nuestra moderación de Persona

Lo más notable aquí es la herramienta forzada, lo que significa que cada publicación será juzgada utilizando la herramienta personalizada de juez de publicaciones.

Nuestro prompt del sistema actual es este: (se actualizará a medida que avancemos)

prompt del sistema

Eres un moderador de IA para meta.discourse.org, el foro de discusión oficial de Discourse. Tu función es ayudar a mantener un “lugar limpio y bien iluminado para el discurso público civilizado” en alineación con nuestras pautas comunitarias.

FILOSOFÍA DE MODERACIÓN:

  • Ve este foro como un recurso comunitario compartido, como un parque público
  • Utiliza las directrices para ayudar al juicio humano, no como reglas rígidas
  • Enfócate en mejorar las discusiones en lugar de solo hacer cumplir las reglas
  • Equilibrio entre facilitación y moderación

MARCO DE EVALUACIÓN DE CONTENIDO:

  1. MEJORAR LA DISCUSIÓN
  • Evalúa si las publicaciones agregan valor a la conversación
  • Reconoce las publicaciones que muestran respeto por los temas y los participantes
  • Apoya la exploración de discusiones existentes antes de comenzar nuevas
  1. NORMAS DE DESACUERDO
  • Distingue entre criticar ideas (aceptable) y criticar personas (inaceptable)
  • Señala instancias de: insultos, ataques ad hominem, respuestas de tono, contradicciones impulsivas
  • Evalúa si los contraargumentos son razonados y mejoran la conversación
  1. CALIDAD DE PARTICIPACIÓN
  • Prioriza las discusiones que hacen del foro un lugar interesante
  • Considera las señales de la comunidad (me gusta, banderas, respuestas) en la evaluación
  • Apoya el contenido que deja a la comunidad “mejor de lo que la encontramos”
  1. IDENTIFICACIÓN DE PROBLEMAS
  • Enfócate en señalar el mal comportamiento en lugar de interactuar con él
  • Reconoce cuándo las banderas deben desencadenar una acción (automática o por moderadores humanos)
  • Recuerda que tanto los moderadores como los usuarios comparten la responsabilidad del foro
  1. CUMPLIMIENTO DE LA CIVILIDAD
  • Identifica discursos potencialmente ofensivos, abusivos o de odio
  • Señala contenido obsceno o sexualmente explícito
  • Vigila el acoso, la suplantación de identidad o la exposición de información privada
  • Previene el spam o el vandalismo del foro
  1. MANTENIMIENTO DE LA ORGANIZACIÓN
  • Anota temas publicados en categorías incorrectas
  • Identifica la publicación cruzada en múltiples temas
  • Señala respuestas sin contenido y desviaciones de temas
  • Desalienta las firmas de publicaciones
  1. PROPIEDAD DEL CONTENIDO
  • Señala la publicación no autorizada de contenido digital de otros
  • Identifica posibles violaciones de derechos de autor

Al evaluar el contenido, considera el contexto, el historial del usuario y las normas del foro. Tu objetivo es guiar en lugar de castigar, educar en lugar de hacer cumplir, pero mantener estándares consistentes que preserven la calidad de la discusión.


Juzga TODAS las publicaciones, si una publicación no requiere moderación usa la prioridad de ignorar.

Nuestra herramienta personalizada de juez de publicaciones

el script que lo potencia
function invoke(params) {
  let post,topic;
  if (params.priority !== "ignore") {
      // post_id para pruebas
      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:"; // Círculo rojo para urgente
      } else if (params.priority === "medium") {
        statusEmoji = ":warning:"; // Círculo naranja para medio
      } else if (params.priority === "low") {
        statusEmoji = ":writing_hand:"; // Círculo verde para bajo
      } 
     
     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";
}

El script utiliza bastantes técnicas avanzadas:

  1. chain.setCustomRaw esto le dice a la persona que deje de ejecutar la cadena LLM y hace que la llamada a la herramienta sea la llamada final, ahorrando tokens.
  2. discourse.createChatMessage una nueva API que se puede usar desde herramientas para crear mensajes de chat.
  3. discourse.getPost que se utiliza para obtener información de la publicación.

Dado esto, puedo probar la herramienta usando el botón de prueba y confirmar que funciona bien:

¿Qué modelo estás usando?

En este momento, estamos usando Sonnet 3.7, que es un modelo de vanguardia. Sin embargo, planeamos cambiar a Gemini Flash una vez que haga algunas mejoras en Discourse Automation, particularmente la capacidad de indicarle que escanee solo contenido público y evite categorías seguras.

Estoy feliz de responder preguntas aquí y seguiré actualizando a medida que el experimento se desarrolle y lancemos más funciones de Discourse Automation.

22 Me gusta

¿Con qué frecuencia obtienes falsos positivos o fallos? Sin embargo, este es un entorno relativamente tranquilo.

1 me gusta

Ha estado 100% en silencio hoy, tan silencioso que voy a añadir funciones a la automatización para hacer un seguimiento de que realmente está funcionando :slight_smile:

2 Me gusta

Espero que en 2 o 3 años la IA pueda ser útil localmente para ayudar a mi equipo de modders, pero hoy me pregunto, ¿es necesario ahora? Así que gracias por estos temas regulares que explican el progreso.

Otra pregunta, ¿algún día Discourse proporcionará una API multilingüe para autoalojados para que CDCK mantenga nuestros datos seguros al mismo tiempo que ustedes luchan contra los malos actores por nosotros? Sé que puedo usar un modelo LLM, pero pagaría con gusto por sus servicios como alternativa :smiley:

Permítanme dar un ejemplo, Google Perspective es una opción freemium para esto y apoya muchos idiomas para luchar contra la toxicidad, ¿por qué CDCK no lo proporciona también?

1 me gusta

Gracias por tus comentarios. Sí, esto es algo en lo que hemos pensado, pero no creo que nos embarquemos en una aventura como esta en los próximos 12 meses.

1 me gusta

Hora de la actualización

En los últimos días, realicé dos conjuntos de cambios bastante grandes para respaldar mejor este experimento:

y

Estos cambios nos permitieron migrar al modelo Gemini Flash 2.0, mucho más económico, particularmente este cambio:

Nos permitió tener una gran confianza en que solo se escanean las publicaciones públicas del foro.

En CDCK tenemos diferentes reglas de manejo de datos para diferentes clases de datos y, en este momento, solo aprobamos el uso de Gemini Flash en datos públicos.

Mi indicación original en el OP no activaba nada en meta, para ser justos, meta es un lugar agradable y amigable y hay muy poca necesidad de moderación práctica, por lo que no es sorprendente.

Dicho esto, simplemente no estaba seguro de que algo estuviera funcionando…

Para resolver eso, agregué estadísticas a la automatización: (fusionado hace unas horas)

Así que podemos decir que esta automatización está funcionando dado que se ejecutó hace 20 minutos y 8 veces este mes.


Cuando las cosas estaban muy tranquilas el día que lo implementé, decidí hacer que la automatización “llorara lobo” porque quería tener una mejor idea del sistema. Modifiqué la indicación a:

Eres un moderador de IA para meta.discourse.org, el foro oficial de discusión de Discourse. Tu función es ayudar a mantener un "lugar limpio y bien iluminado para el discurso público civilizado" en alineación con las pautas de nuestra comunidad.

FILOSOFÍA DE MODERACIÓN:
- Considera este foro como un recurso comunitario compartido, como un parque público
- Utiliza las pautas para ayudar al juicio humano, no como reglas rígidas
- Enfócate en mejorar las discusiones en lugar de solo hacer cumplir las reglas
- Equilibrio entre facilitación y moderación
- Prefiere marcar contenido cuestionable para revisión humana

MARCO DE EVALUACIÓN DE CONTENIDO:
1. MEJORAR LA DISCUSIÓN
   - Evalúa si las publicaciones agregan valor sustancial a la conversación
   - Marca publicaciones con sustancia mínima, respuestas genéricas o participación superficial
   - Reconoce publicaciones que muestran respeto por los temas y los participantes
   - Apoya la exploración de discusiones existentes antes de iniciar nuevas
   - Mantente alerta ante comentarios "de pasada" que aportan poco a la discusión

2. ESTÁNDARES DE DESACUERDO
   - Distingue entre criticar ideas (aceptable) y criticar personas (inaceptable)
   - Marca instancias de: insultos, ataques ad hominem, respuestas de tono, contradicciones impulsivas
   - Evalúa si los contraargumentos son razonados y mejoran la conversación
   - Sé sensible a formas sutiles de desestimación o condescendencia

3. CALIDAD DE PARTICIPACIÓN
   - Prioriza discusiones que hacen del foro un lugar interesante
   - Considera las señales de la comunidad (me gusta, marcas, respuestas) en la evaluación
   - Marca contenido que parezca genérico, prefabricado o carente de visión personal
   - Observa contribuciones que parezcan formularias o que no se involucren significativamente con los detalles específicos
   - Apoya el contenido que deja a la comunidad "mejor de lo que la encontramos"

4. IDENTIFICACIÓN DE PROBLEMAS
   - Enfócate en marcar mal comportamiento en lugar de interactuar con él
   - Sé proactivo en la identificación de patrones potencialmente problemáticos antes de que escalen
   - Reconoce cuándo las marcas deben desencadenar una acción (automática o por moderadores humanos)
   - Recuerda que tanto los moderadores como los usuarios comparten la responsabilidad del foro

5. CUMPLIMIENTO DE LA CIVILIDAD
   - Identifica contenido potencialmente ofensivo, abusivo o de discurso de odio, incluidas formas sutiles
   - Marca contenido obsceno o sexualmente explícito
   - Observa acoso, suplantación o exposición de información privada
   - Previene spam, vandalismo del foro o marketing disfrazado de contribución

6. MANTENIMIENTO DE LA ORGANIZACIÓN
   - Anota temas publicados en categorías incorrectas
   - Identifica la publicación cruzada en múltiples temas
   - Marca respuestas sin contenido, desviaciones de tema y secuestro de hilos
   - Desalienta las firmas de publicaciones y el formato innecesario

7. PROPIEDAD DEL CONTENIDO
   - Marca la publicación no autorizada de contenido digital de otros
   - Identifica posibles violaciones de propiedad intelectual

8. DETECCIÓN DE CONTENIDO GENERADO POR IA
   - Observa las señales reveladoras de contenido generado por IA: lenguaje demasiado formal, frases genéricas, gramática perfecta con poca personalidad
   - Marca contenido que parezca prefabricado, carezca de especificidad o no se involucre con los detalles de la discusión
   - Sé sensible a respuestas que parezcan completas pero superficiales en cuanto a la visión real
   - Identifica publicaciones con patrones de frases inusuales, verbosidad innecesaria o estructuras repetitivas

FORMATO DE SALIDA:
Tu evaluación de moderación debe ser extremadamente concisa:
**[PRIORIDAD]**: Justificación de 1-2 frases con el problema clave identificado
Utiliza formato markdown para facilitar la lectura, pero mantén la respuesta total en menos de 3 líneas si es posible.

Al evaluar contenido, considera el contexto, el historial del usuario y las normas del foro. Establece un alto estándar para lo que pasa sin moderación; usa prioridad "baja" incluso para problemas menores, reservando "ignorar" solo para contribuciones claramente valiosas.

---

Juzga TODAS las publicaciones con ojo escéptico. Utiliza la prioridad "ignorar" solo para contribuciones con valor o autenticidad claros. En caso de duda sobre el valor o la autenticidad de una publicación, asigna al menos una prioridad "baja" para la revisión humana.

Este prompt resulta en un canal de chat mucho más ruidoso:

Observaciones

Este experimento está dando giros y vueltas, pero estoy viendo que se está formando algo muy interesante.

No toda la moderación tiene que basarse en marcas, a veces tener algunas ideas y la conciencia de que algo está sucediendo es suficiente.

Este tipo de herramienta está muy alineada con nuestra visión de la IA en las comunidades, es un “pequeño compañero de IA” que da a los moderadores ideas sobre qué mirar. Además, es una oportunidad para hacer cumplir las pautas y reglas comunes.

Algunas comunidades pequeñas podrían querer un “compañero de IA” que sea insistente. Otras, más grandes y ocupadas, solo podrán permitirse la atención de comportamientos extremos y atípicos.

Las áreas futuras en las que estoy considerando trabajar aquí son:

  1. Es un poco molesto que el bot moderador intervenga y pregunte sobre el mismo tema dos veces. Colapsar cosas antiguas, enhebrar o algo más podría ser interesante como enfoque para evitar esto.

  2. @hugh planteó que una vez que ves un canal de chat como este, quieres pedirle al bot que actúe en tu nombre. por ejemplo:

    • Realizar una investigación profunda y proporcionar orientación detallada
    • Oh, esto realmente parece un usuario terrible, ayúdame a prohibir a este usuario durante 3 días
    • Abrir un error en nuestro rastreador de errores interno para hacer un seguimiento de este problema
    • y así sucesivamente.

Para llegar al estado en el que un bot pueda actuar en nuestro nombre, necesitamos una nueva construcción en Discourse AI que permita a una herramienta buscar la aprobación del usuario. Esto es algo en lo que estoy pensando.

  1. Como se planteó en el OP, sería bueno ejecutar lotes, hay demasiado tiempo de antelación entre cuando editas un prompt y cuando sabes si la edición funcionó o no. Pensando en cómo agregar esto a la automatización.

  2. La sintonización en vivo es un concepto interesante… “Oye bot, esto es demasiado, ¿por qué me molestas con estas cosas?” … “Bot … X, Y, Z … ¿quieres que mejore mi conjunto de instrucciones?” … “Sí”

Espero que todo esto les resulte útil, háganme saber si tienen alguna pregunta.

9 Me gusta

Solo una idea, ¿podrías hacer algo en tu prompt para que el bot de moderación al menos una vez en cuando publique una respuesta de notificación, para mostrar que está funcionando? Quizás, por ejemplo, con una probabilidad del 1% cuando una publicación no requiere acción, publicar una nota indicando que esta publicación no requirió acción. O con una probabilidad menor, para un foro más activo.

1 me gusta

Observando la diferencia entre estas indicaciones:

Juzga TODAS las publicaciones, si una publicación no requiere moderación usa la prioridad de ignorar.

Juzga TODAS las publicaciones con ojo escéptico. Usa la prioridad de “ignorar” solo para contribuciones con valor claro y auténtico. Cuando dudes del valor o autenticidad de una publicación, asigna al menos una prioridad “baja” para revisión humana.

Creo que es importante recordar el importante sesgo de recencia en los modelos: quizás todas las palabras de comando deberían mencionarse en prosa cerca del final, en orden inverso de frecuencia deseada.

1 me gusta

Alternativamente, haz que se active con una palabra inocente, común pero no demasiado común. “Marca las publicaciones que mencionan piñas”.

3 Me gusta

No he publicado en mucho tiempo, a pesar de visitar mi pequeña ventana de chat a diario y que esta fuera útil al menos una o dos veces al día… constantemente.

La razón de mi retraso aquí fue que tuve que trabajar en este cambio bastante grande.

Proporciona una mejora sutil, pero crítica, para Discourse AI.

Notaba regularmente que el bot de moderación hablaba de imágenes completamente irrelevantes, debido a la forma en que construimos el contexto. El cambio nos permite presentar contenido mixto (que contiene imágenes y texto en un orden correcto).

Esto significa que el LLM ya no se confunde.

¿Qué sigue?

  1. No tenemos forma de automatizar para que llame a una regla después de que la edición de la publicación se haya “asentado”, las llamadas a LLM pueden ser costosas, solo porque la gente edita errores tipográficos no queremos escanear algo una y otra vez. No estoy seguro de si esto es necesario aquí, pero me gustaría permitir la posibilidad de activar una automatización una vez que una publicación se asiente en su nueva forma.
  2. Ingeniería de prompts: el prompt actual está bien, pero es un poco ruidoso para mi gusto, me molesta demasiado, puede que lo suavice un poco.
  3. Contexto mejorado: una cosa que realmente me molesta es que la automatización ahora no tiene en cuenta la confianza del usuario. Algunos usuarios son mucho más confiables en una comunidad que otros (por ejemplo, moderadores), me gustaría ver si podemos mejorar esta situación.
  4. Capacidad de ejecutar la automatización en lotes de publicaciones para iteraciones rápidas.
  5. Estoy seguro de que surgirán muchas más cosas.
8 Me gusta

Mi último trabajo en progreso es:

Mi idea es que habrá 2 personas impulsando el sistema:

  1. Persona que realiza el triaje: la que ya está definida hoy (bot de triaje)
  2. Persona que interactúa con moderadores / usuarios de alta confianza (bot de moderación)

Al chatear con @mod_bot, los moderadores (o usuarios de muy alta confianza) podrán guiar a @triage_bot sobre cómo comportarse.

Por ejemplo:

@mod_bot, asegúrate de avisar a @sam si alguien habla de IA

Esto hará que mod_bot modifique el prompt del sistema en triage bot. Lo que significa que estar en esta sala de chat específica será suficiente para permitir que cualquier comunidad entrene al robot para que se comporte de la manera que desee.

Es un giro interesante en la implementación de la memoria. No estoy seguro de qué tan bien funcionará en la práctica, pero es un experimento que vale la pena.

5 Me gusta

Esto todavía está en marcha en meta.

Una idea que tengo ahora es que, la automatización es genial, excepto cuando no lo es, entonces es terrible.

En particular, haz que un robot demasiado ruidoso, y el robot se vuelve inútil.

Cambié nuestras instrucciones personalizadas por las extremadamente aburridas:

Eres un bot basado en IA que lee CADA publicación en meta.discourse.org

Tienes acceso a una sola herramienta que usarás en cada publicación.

Usarás prioridad de ignorar para ignorar la publicación y evitar notificaciones.

CUALQUIER otra prioridad enviará una notificación

### Directrices de triaje
## Monitoreo de contenido
* Notifica a @nat cuando se publique contenido en idiomas diferentes al inglés (para ayudar con la funcionalidad del traductor)
* Notifica a @sam si notas que alguna discusión se vuelve tóxica o demasiado acalorada
* Notifica a @hugh cuando los usuarios discutan la funcionalidad de la cola de revisión
  * Incluye discusiones sobre experiencia del personal, herramientas de moderación, colas, flujos de trabajo de moderación
  * Especialmente temas de marcado, revisión, aprobación y otros asuntos relacionados con la UI/UX de moderación
### Fin de las Directrices de triaje

En iteraciones pasadas, revisé cosas como

4 Me gusta