Políticas de moderación

Tus umbrales, no los nuestros, y probados antes de que cuenten

Una sola puntuación de toxicidad para todo el mundo es la política de otro. ToxicFilter tiene un umbral por categoría, te deja mover solo los que te importan, guarda una versión de cada cambio y te deja poner una política nueva al lado de la que está activa para ver qué habría hecho antes de que decida nada.

Cómo funciona

  1. Empieza con una plantilla

    Elige para qué es la política: una comunidad, un marketplace, una app de citas, un portal de empleo, una plataforma para menores y cuatro más. Sus umbrales se copian en la política nueva y a partir de ahí los editas tú.

  2. Toca solo lo que te importa

    Una política guarda las categorías que has cambiado y nada más. El resto sigue nuestros valores, así que cuando los mejoramos, la mejora también te llega. Añade tus propias palabras: las que se rechazan, las que hay que mirar y las que nunca se marcan.

  3. Pruébala en la sombra

    Asocia una segunda política a la activa. Cada llamada se juzga con las dos, solo decide la activa y el panel te enseña en qué no coinciden con tu propio tráfico. La prueba nunca paga una segunda lectura del modelo.

  4. Cada respuesta dice qué versión

    El slug y la versión de la política vuelven en cada respuesta y se quedan en cada registro. Guardar un cambio crea una versión nueva, y nada de lo juzgado con la anterior se vuelve a servir desde la caché.

Míralo en acción

  1. 01 Un taco dentro de un elogio
  2. 02 Tres personas contra un jugador
  3. 03 Una categoría que la plantilla no toca
  4. 04 Un comentario normal

Un taco dentro de un elogio POST /v1/text

Joder, este parche es una maravilla, gracias por el arreglo.

review 8 ms
  • Contains 1 profanity. On its own this says the tone is casual, not that the content is abusive.

Con nuestros umbrales por defecto esta misma frase es un allow: un taco que no va contra nadie puntúa 0,35 en toxicidad y nuestro umbral de revisión es 0,45. La plantilla de comunidad revisa la toxicidad desde 0,30, así que aquí la mira una persona. Mismo texto, misma puntuación, otra política.

La respuesta, resumida
{
  "decision": "review",
  "flagged": [
    "toxicity"
  ],
  "scores": {
    "toxicity": 0.35
  },
  "signals": [
    {
      "category": "toxicity",
      "score": 0.35,
      "reason": "Contains 1 profanity. On its own this says the tone is casual, not that the content is abusive.",
      "evidence": [
        "joder"
      ]
    }
  ],
  "model": {
    "read": false
  },
  "took_ms": 8
}

Tres personas contra un jugador POST /v1/conversation

ana joder, tú hoy has jugado de pena

ben en serio, eres una mierda en este juego

carl tú la has cagado, joder, nos has hecho perder

block 23 ms
  • Contains 1 profanity, aimed at the reader. On its own this says the tone is casual, not that the content is abusive.
  • 3 different people in this conversation are being hostile. Each message on its own is ordinary bad temper; together they are a pile-on, and that is not visible in any one of them.

Que tres personas distintas vayan a por alguien puntúa 0,70 en acoso. Con nuestros valores por defecto eso es un review, porque el bloqueo empieza en 0,80. La plantilla de comunidad bloquea el acoso desde 0,65, así que aquí se rechaza.

La respuesta, resumida
{
  "decision": "block",
  "flagged": [
    "harassment",
    "toxicity"
  ],
  "scores": {
    "harassment": 0.7,
    "toxicity": 0.55
  },
  "signals": [
    {
      "category": "toxicity",
      "score": 0.55,
      "reason": "Contains 1 profanity, aimed at the reader. On its own this says the tone is casual, not that the content is abusive.",
      "evidence": [
        "joder"
      ]
    },
    {
      "category": "harassment",
      "score": 0.7,
      "reason": "3 different people in this conversation are being hostile. Each message on its own is ordinary bad temper; together they are a pile-on, and that is not visible in any one of them.",
      "evidence": []
    }
  ],
  "model": {
    "read": false
  },
  "took_ms": 23
}

Una categoría que la plantilla no toca POST /v1/text

Seguidores baratos ya en http://bit.ly/x1 http://bit.ly/x2 http://bit.ly/x3 mejor precio pincha aquí

review 7 ms
  • 3 links in about 20 words: mostly links, barely a message.
  • Uses a link shortener, which hides where the link goes.

La plantilla de comunidad no dice nada del spam, así que el spam sigue nuestros umbrales igual que si no hubiera política: 0,75 supera el de revisión y no llega al de bloqueo.

La respuesta, resumida
{
  "decision": "review",
  "flagged": [
    "spam"
  ],
  "scores": {
    "spam": 0.75
  },
  "signals": [
    {
      "category": "spam",
      "score": 0.75,
      "reason": "3 links in about 20 words: mostly links, barely a message.",
      "evidence": [
        "http://bit.ly/x1",
        "http://bit.ly/x2",
        "http://bit.ly/x3"
      ]
    },
    {
      "category": "spam",
      "score": 0.7,
      "reason": "Uses a link shortener, which hides where the link goes.",
      "evidence": [
        "http://bit.ly/x1",
        "http://bit.ly/x2",
        "http://bit.ly/x3"
      ]
    }
  ],
  "model": {
    "read": false
  },
  "took_ms": 7
}

Un comentario normal POST /v1/text

Buena guía, el segundo paso me ha ahorrado una hora.

allow 1 ms

Casi todos los comentarios son así con cualquier política, y las comprobaciones gratuitas los resuelven en un milisegundo, más o menos.

La respuesta, resumida
{
  "decision": "allow",
  "flagged": [],
  "signals": [],
  "model": {
    "read": false
  },
  "took_ms": 1
}

Míralo en acción

Un taco dentro de un elogio POST /v1/text

Joder, este parche es una maravilla, gracias por el arreglo.

review 8 ms
  • Contains 1 profanity. On its own this says the tone is casual, not that the content is abusive.

Con nuestros umbrales por defecto esta misma frase es un allow: un taco que no va contra nadie puntúa 0,35 en toxicidad y nuestro umbral de revisión es 0,45. La plantilla de comunidad revisa la toxicidad desde 0,30, así que aquí la mira una persona. Mismo texto, misma puntuación, otra política.

La respuesta, resumida
{
  "decision": "review",
  "flagged": [
    "toxicity"
  ],
  "scores": {
    "toxicity": 0.35
  },
  "signals": [
    {
      "category": "toxicity",
      "score": 0.35,
      "reason": "Contains 1 profanity. On its own this says the tone is casual, not that the content is abusive.",
      "evidence": [
        "joder"
      ]
    }
  ],
  "model": {
    "read": false
  },
  "took_ms": 8
}

Tres personas contra un jugador POST /v1/conversation

ana joder, tú hoy has jugado de pena

ben en serio, eres una mierda en este juego

carl tú la has cagado, joder, nos has hecho perder

block 23 ms
  • Contains 1 profanity, aimed at the reader. On its own this says the tone is casual, not that the content is abusive.
  • 3 different people in this conversation are being hostile. Each message on its own is ordinary bad temper; together they are a pile-on, and that is not visible in any one of them.

Que tres personas distintas vayan a por alguien puntúa 0,70 en acoso. Con nuestros valores por defecto eso es un review, porque el bloqueo empieza en 0,80. La plantilla de comunidad bloquea el acoso desde 0,65, así que aquí se rechaza.

La respuesta, resumida
{
  "decision": "block",
  "flagged": [
    "harassment",
    "toxicity"
  ],
  "scores": {
    "harassment": 0.7,
    "toxicity": 0.55
  },
  "signals": [
    {
      "category": "toxicity",
      "score": 0.55,
      "reason": "Contains 1 profanity, aimed at the reader. On its own this says the tone is casual, not that the content is abusive.",
      "evidence": [
        "joder"
      ]
    },
    {
      "category": "harassment",
      "score": 0.7,
      "reason": "3 different people in this conversation are being hostile. Each message on its own is ordinary bad temper; together they are a pile-on, and that is not visible in any one of them.",
      "evidence": []
    }
  ],
  "model": {
    "read": false
  },
  "took_ms": 23
}

Una categoría que la plantilla no toca POST /v1/text

Seguidores baratos ya en http://bit.ly/x1 http://bit.ly/x2 http://bit.ly/x3 mejor precio pincha aquí

review 7 ms
  • 3 links in about 20 words: mostly links, barely a message.
  • Uses a link shortener, which hides where the link goes.

La plantilla de comunidad no dice nada del spam, así que el spam sigue nuestros umbrales igual que si no hubiera política: 0,75 supera el de revisión y no llega al de bloqueo.

La respuesta, resumida
{
  "decision": "review",
  "flagged": [
    "spam"
  ],
  "scores": {
    "spam": 0.75
  },
  "signals": [
    {
      "category": "spam",
      "score": 0.75,
      "reason": "3 links in about 20 words: mostly links, barely a message.",
      "evidence": [
        "http://bit.ly/x1",
        "http://bit.ly/x2",
        "http://bit.ly/x3"
      ]
    },
    {
      "category": "spam",
      "score": 0.7,
      "reason": "Uses a link shortener, which hides where the link goes.",
      "evidence": [
        "http://bit.ly/x1",
        "http://bit.ly/x2",
        "http://bit.ly/x3"
      ]
    }
  ],
  "model": {
    "read": false
  },
  "took_ms": 7
}

Un comentario normal POST /v1/text

Buena guía, el segundo paso me ha ahorrado una hora.

allow 1 ms

Casi todos los comentarios son así con cualquier política, y las comprobaciones gratuitas los resuelven en un milisegundo, más o menos.

La respuesta, resumida
{
  "decision": "allow",
  "flagged": [],
  "signals": [],
  "model": {
    "read": false
  },
  "took_ms": 1
}

Las políticas de moderación, explicadas

Qué guarda una política, en qué se diferencian las reglas en la llamada y cómo probar un cambio antes de que decida.

Por qué no basta con una puntuación de toxicidad

Un foro de videojuegos y una plataforma para menores no deberían rechazar las mismas frases. Un solo número con un solo corte impone la tolerancia de una web a todas las demás. ToxicFilter puntúa quince categorías por separado, más los temas (apuestas, criptomonedas, falsificaciones) y los tipos de contacto en sus propios ejes, y cada una actúa solo en el umbral que le da la política. Los dos ejemplos de arriba que cambian de decisión son el mismo texto con la misma puntuación: lo único que se ha movido son los umbrales.

Cómo funciona una política de moderación

Una política guarda lo que has cambiado y nada más. Las categorías que no has tocado siguen nuestros valores, así que cuando estos mejoran, el cambio también te llega. Desactivar una categoría es ponerle un umbral por encima de 1: sigue puntuando y saliendo en la respuesta, pero nunca actúa. Junto a los umbrales están tus listas de palabras: las que se rechazan, las que hay que mirar y las que nunca se marcan, que se borran del texto antes de que busque nuestra propia lista. Una descripción de a qué se dedica tu negocio ayuda al modelo a juzgar qué está fuera de tema para ti. Los umbrales también pueden cambiar según la superficie, de modo que un perfil y un comentario tengan valores distintos con la misma política.

Plantillas según el tipo de negocio

Al crear una política eliges para qué es: una comunidad o un juego, un marketplace, un formulario de contacto, una app de citas, anuncios clasificados, un portal de empleo, reseñas, un producto de IA o una plataforma para menores. Los umbrales de la plantilla se copian en ese momento y a partir de ahí son reglas como cualquier otra. No se vuelve a consultar nada después, así que si cambiamos una plantilla, tu política sigue igual.

Modo sombra: probar una política con tráfico real

Antes de mover un umbral, la pregunta es qué habría hecho con lo de la semana pasada. Asigna una segunda política como sombra de la activa. Cada llamada se juzga con las dos, solo decide la activa y el registro guarda ambas decisiones, así que el panel te enseña en qué no coinciden durante el periodo que elijas de tu propio tráfico. Lo que encontró el modelo se reutiliza tal cual y solo se repiten las comprobaciones gratuitas, así que la prueba no duplica la factura. Las imágenes no se vuelven a juzgar, y nada más cambia: misma respuesta, mismo cobro, ningún webhook de más.

Versiones, registros y reglas en la llamada

Guardar una política crea una versión nueva. El slug y la versión vuelven en cada respuesta y se copian en cada registro, y la versión forma parte de la clave de la caché, así que un veredicto alcanzado con las reglas anteriores no se vuelve a servir. Un nombre que no existe es un 422, nunca una sustitución silenciosa. Si prefieres no configurar nada antes, rules en la petición lleva los umbrales solo para esa llamada; se registra como inline, y por eso una decisión que tengas que justificar más adelante debe salir de una política con nombre.

La reputación, con la correa corta

Una política puede dejar que el historial de una persona en el mismo proyecto mueva un poco los umbrales: como mucho 0,10, solo a partir de 20 veredictos, nunca entre cuentas distintas y siempre indicando el ajuste. Nunca activa ni desactiva un umbral, y un buen historial nunca relaja la protección de menores, las autolesiones, la violencia ni el odio, porque ganarse la confianza primero es justo el patrón que esas categorías existen para detectar.

Cómo se reparte el trabajo

Las comprobaciones instantáneas resuelven los casos claros en torno a un milisegundo, el modelo lee lo que depende del contexto, y tus reglas y tu equipo tienen la última palabra.

  • Deciden tus reglas

    Una política decide dónde actúa cada hallazgo, categoría a categoría, tema a tema y tipo de contacto a tipo de contacto. Lo que no tocas sigue nuestros umbrales, así que nuestras mejoras te siguen llegando.

  • Pruébala antes de que decida

    El modo sombra juzga tu tráfico real con una segunda política desde que empieza la prueba, reutilizando lo que encontró el modelo, así que ves lo que haría un cambio antes de que haga nada.

  • Cada decisión se puede justificar

    Cada versión guardada se conserva y se copia en cada registro, así que un veredicto se puede explicar meses después con las reglas vigentes ese día. Las reglas que mandas en la llamada se registran como inline, para cuando prefieres no configurar nada antes.

Preguntas frecuentes

¿Cómo pongo umbrales de moderación distintos por categoría?

Cada una de las quince categorías tiene dos umbrales, revisión y bloqueo, y una política solo cambia los que le añades. En el panel una regla se lee como una línea, por ejemplo bloquear spam en 0,80; por la API eliges la política con `policy` en cualquier llamada. Para desactivar una categoría se le pone un umbral por encima de 1: sigue puntuando y saliendo en la respuesta, pero nunca actúa.

¿Puedo probar una política de moderación antes de activarla?

Sí. Asigna otra política como sombra de la activa. Cada llamada se juzga con las dos, decide la activa y el registro guarda al lado la decisión de la sombra, de modo que el panel te enseña en cuántas llamadas no han coincidido. Se reutiliza lo que encontró el modelo, así que la prueba no cuesta una segunda lectura.

¿Puedo mandar las reglas con la petición en vez de configurar una política?

Sí, con `rules` en cualquier endpoint: umbrales, palabras, temas, tipos de contacto, umbrales por superficie y la descripción del negocio para esa llamada. Solas son exclusivas: una categoría que no mencionas no decide nada. Si van junto a una política, se aplican encima: cambian solo los umbrales que nombras, tus palabras se suman a las de la política y la respuesta dice `overridden: true`.

¿Qué pasa si nombro una política que no existe?

La llamada se rechaza con un 422 `unknown_policy`. Nunca se usa la política por defecto en su lugar, porque una errata acabaría moderando toda una web con reglas que nadie ha elegido.

¿El historial de un usuario cambia el veredicto?

Solo si la política activa la reputación. En ese caso mueve los umbrales como mucho 0,10 en un sentido u otro, a partir de 20 veredictos registrados y dentro del mismo proyecto. Un buen historial nunca relaja la protección de menores, las autolesiones, la violencia ni el odio, y la respuesta siempre indica el ajuste.

¿Puede tener cada web o app su propia política?

Una política o la comparten todos los proyectos de la organización o es de un solo proyecto. Cada proyecto puede tener su política por defecto, y una llamada puede nombrar otra. Las palabras que permites se borran del texto antes de que busque nuestra lista, así que un foro médico no se queda sin su propio vocabulario.

Pruébalo con tu tráfico real

2.000 créditos al mes en el plan gratuito, sin tarjeta. Suficiente para pasarle una semana de tu propio contenido y ver qué opina de él.