Moderación de conversaciones

Hay problemas que solo se ven en el hilo

Un acoso en grupo son varias personas que escriben, cada una, una frase borde pero corriente. Un acercamiento a un menor es una charla inocente que se convierte en otra cosa. Una estafa llega por entregas. ToxicFilter lee el último mensaje con la conversación detrás, y no se queda con nada.

Cómo funciona

  1. Envías el hilo

    Hasta cincuenta mensajes, del más antiguo al más reciente, cada uno con su autor como un identificador tuyo. El último es el que se juzga; todo lo anterior es contexto.

  2. Los filtros gratuitos leen quién dijo qué

    Cuántas personas distintas se están poniendo hostiles, quién ha dicho su edad y quién no, y qué ha ido diciendo el autor del último mensaje a lo largo de toda la conversación.

  3. El modelo lee cuando aporta algo

    Cuando entra, ve los mensajes anteriores con sus autores, acotados como datos. En un hilo largo lee cuando los filtros gratuitos han encontrado algo, cuando un tipo de contacto está a medias o uno de cada cinco mensajes.

  4. Un veredicto, nada guardado

    El último mensaje pasa además por todo lo que pasaría un comentario suelto, al mismo precio. Se archiva el veredicto sobre ese mensaje; la conversación no se guarda nunca.

Míralo en acción

  1. 01 Acoso en grupo
  2. 02 Un acercamiento a una menor
  3. 03 Una estafa romántica por entregas
  4. 04 La respuesta que dice que no

Acoso en grupo POST /v1/conversation

runner Aquí va mi primer speedrun del nivel del pantano, ¿algún consejo?

ana Tu ruta es una mierda, en serio.

ben Joder, eres lentísimo.

cat Tu timing da pena, macho, qué mierda.

dan Déjalo ya, tu partida es una mierda.

block 17 ms
  • Contains 1 profanity, aimed at the reader. On its own this says the tone is casual, not that the content is abusive.
  • 4 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.

Solo, el último mensaje es una palabrota de andar por casa y se quedaría en revisión. Cuatro personas distintas soltándosela al mismo jugador es acoso en grupo, y la plantilla de comunidad lo rechaza.

La respuesta, resumida
{
  "decision": "block",
  "flagged": [
    "harassment",
    "toxicity"
  ],
  "scores": {
    "harassment": 0.73,
    "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": [
        "mierda"
      ]
    },
    {
      "category": "harassment",
      "score": 0.73,
      "reason": "4 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": 17
}

Un acercamiento a una menor POST /v1/conversation

peque ¡hola! tengo 13 años y voy a primero de la ESO, me encanta dibujar

user_4417 qué guay, dibujas muy bien. ¿estás sola ahora?

peque sí, mis padres están trabajando

user_4417 no les digas a tus padres que hablamos. pásame tu snap, es nuestro secreto

block 12 ms
  • Somebody in this conversation has said they are 13. The other participant asked for it to be kept secret, asked to move to another app, asked whether they are alone. This needs a person now.

La otra participante dijo que tiene 13 años, y este autor pidió secreto, pasar a otra aplicación y saber si estaba sola. El motivo nombra esos hechos; nunca dice lo que es nadie.

La respuesta, resumida
{
  "decision": "block",
  "flagged": [
    "minor_safety"
  ],
  "scores": {
    "minor_safety": 0.9
  },
  "signals": [
    {
      "category": "minor_safety",
      "score": 0.9,
      "reason": "Somebody in this conversation has said they are 13. The other participant asked for it to be kept secret, asked to move to another app, asked whether they are alone. This needs a person now.",
      "evidence": []
    }
  ],
  "model": {
    "read": false
  },
  "took_ms": 12
}

Una estafa romántica por entregas POST /v1/conversation

ana ¡Buenos días! ¿Qué tal el trabajo?

marcos Mucho frío aquí en la plataforma petrolífera, mi amor. Te echo de menos cada día.

ana Yo también a ti

marcos Mi amor, mi cuenta está bloqueada. Por favor, envíame dinero para el billete de vuelta.

block 8 ms
  • Reads like a romance scam: affection, a request for money and a story nobody can check, from the same person.

El cariño y la plataforma petrolífera llegaron dos mensajes antes; el dinero, al final. Leída como una sola persona a lo largo del hilo, la forma está completa.

La respuesta, resumida
{
  "decision": "block",
  "flagged": [
    "scam"
  ],
  "scores": {
    "scam": 0.9
  },
  "signals": [
    {
      "category": "scam",
      "score": 0.9,
      "reason": "Reads like a romance scam: affection, a request for money and a story nobody can check, from the same person.",
      "evidence": [
        "mi amor",
        "enviame dinero",
        "mi cuenta esta bloqueada",
        "plataforma petrolifera"
      ]
    }
  ],
  "model": {
    "read": false
  },
  "took_ms": 8
}

La respuesta que dice que no POST /v1/conversation

marcos Mi amor, envíame dinero para el billete. Estoy en una plataforma petrolífera y mi cuenta está bloqueada.

ana No. No le mando dinero a alguien a quien no conozco, y voy a denunciarlo.

allow 7 ms

La misma estafa está en el hilo, pero lo que se juzga es la respuesta. A cada autor se le lee por lo que escribe él, así que rechazar la oferta nunca se confunde con hacerla.

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

Míralo en acción

Acoso en grupo POST /v1/conversation

runner Aquí va mi primer speedrun del nivel del pantano, ¿algún consejo?

ana Tu ruta es una mierda, en serio.

ben Joder, eres lentísimo.

cat Tu timing da pena, macho, qué mierda.

dan Déjalo ya, tu partida es una mierda.

block 17 ms
  • Contains 1 profanity, aimed at the reader. On its own this says the tone is casual, not that the content is abusive.
  • 4 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.

Solo, el último mensaje es una palabrota de andar por casa y se quedaría en revisión. Cuatro personas distintas soltándosela al mismo jugador es acoso en grupo, y la plantilla de comunidad lo rechaza.

La respuesta, resumida
{
  "decision": "block",
  "flagged": [
    "harassment",
    "toxicity"
  ],
  "scores": {
    "harassment": 0.73,
    "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": [
        "mierda"
      ]
    },
    {
      "category": "harassment",
      "score": 0.73,
      "reason": "4 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": 17
}

Un acercamiento a una menor POST /v1/conversation

peque ¡hola! tengo 13 años y voy a primero de la ESO, me encanta dibujar

user_4417 qué guay, dibujas muy bien. ¿estás sola ahora?

peque sí, mis padres están trabajando

user_4417 no les digas a tus padres que hablamos. pásame tu snap, es nuestro secreto

block 12 ms
  • Somebody in this conversation has said they are 13. The other participant asked for it to be kept secret, asked to move to another app, asked whether they are alone. This needs a person now.

La otra participante dijo que tiene 13 años, y este autor pidió secreto, pasar a otra aplicación y saber si estaba sola. El motivo nombra esos hechos; nunca dice lo que es nadie.

La respuesta, resumida
{
  "decision": "block",
  "flagged": [
    "minor_safety"
  ],
  "scores": {
    "minor_safety": 0.9
  },
  "signals": [
    {
      "category": "minor_safety",
      "score": 0.9,
      "reason": "Somebody in this conversation has said they are 13. The other participant asked for it to be kept secret, asked to move to another app, asked whether they are alone. This needs a person now.",
      "evidence": []
    }
  ],
  "model": {
    "read": false
  },
  "took_ms": 12
}

Una estafa romántica por entregas POST /v1/conversation

ana ¡Buenos días! ¿Qué tal el trabajo?

marcos Mucho frío aquí en la plataforma petrolífera, mi amor. Te echo de menos cada día.

ana Yo también a ti

marcos Mi amor, mi cuenta está bloqueada. Por favor, envíame dinero para el billete de vuelta.

block 8 ms
  • Reads like a romance scam: affection, a request for money and a story nobody can check, from the same person.

El cariño y la plataforma petrolífera llegaron dos mensajes antes; el dinero, al final. Leída como una sola persona a lo largo del hilo, la forma está completa.

La respuesta, resumida
{
  "decision": "block",
  "flagged": [
    "scam"
  ],
  "scores": {
    "scam": 0.9
  },
  "signals": [
    {
      "category": "scam",
      "score": 0.9,
      "reason": "Reads like a romance scam: affection, a request for money and a story nobody can check, from the same person.",
      "evidence": [
        "mi amor",
        "enviame dinero",
        "mi cuenta esta bloqueada",
        "plataforma petrolifera"
      ]
    }
  ],
  "model": {
    "read": false
  },
  "took_ms": 8
}

La respuesta que dice que no POST /v1/conversation

marcos Mi amor, envíame dinero para el billete. Estoy en una plataforma petrolífera y mi cuenta está bloqueada.

ana No. No le mando dinero a alguien a quien no conozco, y voy a denunciarlo.

allow 7 ms

La misma estafa está en el hilo, pero lo que se juzga es la respuesta. A cada autor se le lee por lo que escribe él, así que rechazar la oferta nunca se confunde con hacerla.

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

La moderación de conversaciones, explicada

Lo que un hilo enseña y un mensaje suelto no, y cómo se lee cada parte.

Cómo moderar un chat entero y no solo un mensaje

Llama a POST /v1/conversation con los mensajes en orden y un autor en cada uno, con tus propios identificadores. Se juzga el último, que pasa por todo lo que pasaría un comentario. Los anteriores son lo que cambia la respuesta: la misma frase después de otra conversación es otra pregunta, y por eso el hilo forma parte de la clave de la caché.

Cómo detectar el acoso en grupo

Mensaje a mensaje no se ve: cada respuesta es mal humor corriente. Lo que lo delata es el número de personas. ToxicFilter cuenta los autores distintos que escriben un insulto, una amenaza o una palabrota en segunda persona y, a partir de tres, lo marca como acoso, con un motivo que dice cuántas personas eran. Tres personas en un hilo corto dan alrededor de 0,64, que queda en revisión tanto con las líneas por defecto como con la plantilla de comunidad; a partir de cuatro, la plantilla de comunidad lo rechaza donde las líneas por defecto todavía lo dejarían en revisión.

Detectar acercamientos a menores, con las reglas que lleva dentro

Las reglas están metidas en lo que el filtro puede ver. Sin conversación no hay hallazgo, porque un mensaje suelto no muestra un acercamiento. Un niño que dice su edad es un niño usando tu web: se devuelve como un dato, nunca como un hallazgo, y solo cuentan contra el autor las edades que han dicho los demás. El motivo describe lo que ha pasado en las palabras, nunca lo que es nadie. Un acercamiento junto a una edad de menor es un bloqueo, y algo que debe mirar una persona en ese momento.

Estafas y ofertas que llegan por entregas

Una estafa romántica, un piso que no existe, un trabajo que te cobra por empezar, una cuenta alquilada o un trato que se va fuera de tu plataforma casi nunca llegan en una frase. Estos filtros leen al autor del último mensaje a lo largo de todo el hilo, así que el cariño, la historia y la petición de dinero se suman aunque estén separados por días. Solo se lee a ese autor: quien responde "¿esto es una estafa?" se juzga por sus propias palabras.

Tipos de contacto en una conversación

En un formulario de contacto o un buzón comercial, esa misma lectura de un autor a lo largo del hilo puntúa quién te escribe: trabajo gratis a cambio de participaciones, sin presupuesto, un alcance que no para de crecer, una venta en frío, alguien buscando empleo y más. Cada tipo tiene su puntuación junto a las categorías, y solo actúa donde tu política le da una línea.

Cuándo lee el modelo y qué se guarda

En un hilo cada mensaje nuevo es una llamada nueva, así que el modelo lee cuando los filtros gratuitos han encontrado algo, cuando un tipo de contacto está a medias o uno de cada cinco mensajes, y la respuesta lo dice cuando no ha leído. Del hilo no se guarda nada: el registro es el veredicto sobre el último mensaje.

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.

  • El hilo es la prueba

    El acoso en grupo, los acercamientos y las estafas por entregas se leen en los mensajes que envías, hasta cincuenta, con quién dijo qué. Un mensaje suelto nunca basta para un hallazgo de conversación.

  • El contexto lo lee el modelo

    Las comprobaciones instantáneas resuelven las formas claras en torno a un milisegundo, en ocho idiomas. Lo que depende del contexto lo lee el modelo, que ve los mensajes anteriores con sus autores y entra cuando aporta algo; la respuesta dice cuándo no lo ha hecho.

  • No se guarda nada

    Del hilo no se guarda nada entre llamadas. Se archiva el veredicto sobre el último mensaje, con un hash de su contenido, así que la conversación privada de nadie sale de ahí.

Preguntas frecuentes

¿Qué diferencia hay entre moderar un mensaje y una conversación?

Un mensaje se juzga por sus propias palabras. Con la conversación, el veredicto sobre el último mensaje tiene en cuenta quién dijo qué antes: cuántas personas distintas se están poniendo hostiles, si alguien ha dicho una edad de menor y adónde ha ido llevando la charla el mismo autor a lo largo de varios mensajes.

¿Cómo se detecta el acoso en grupo?

Contando autores distintos, no mensajes. Un mensaje cuenta como hostil cuando lleva un insulto, una amenaza o una palabrota dirigida a quien lo lee. Tres o más personas distintas haciéndolo en el mismo hilo se marca como acoso, y la puntuación sube con cuántas son y con qué parte del hilo ocupan. Una sola persona que escribe quince mensajes enfadada es una discusión, y no cuenta como acoso en grupo.

¿ToxicFilter detecta el grooming?

Detecta formas de acercamiento: pedir secreto, pasar a otra aplicación, pedir fotos, ofrecer regalos y preguntar si el menor está solo. Junto a una edad que ha dicho la otra persona, cualquiera de ellas es un bloqueo. Sin edad declarada, dos o más se quedan justo por debajo de la línea por defecto, para que una plataforma con menores la baje y empiece a verlas. Una edad declarada, por sí sola, se devuelve como un dato y nunca como un hallazgo.

¿El modelo lee toda la conversación?

Cuando entra, recibe los mensajes anteriores con sus autores, empezando por los más recientes, hasta unos 8.000 caracteres, acotados para que nada de lo que dicen se tome como una instrucción. Las categorías se puntúan sobre el último mensaje; el hilo es el contexto en el que se lee.

¿Cuánto cuesta comprobar una conversación?

Lo mismo que un texto: un crédito, más los tokens del modelo cuando lee. En un hilo el modelo solo lee cuando aporta algo, así que una conversación larga y tranquila sale casi entera a un crédito por mensaje.

¿Se guarda la conversación?

No. Se archiva el veredicto sobre el último mensaje, con un hash de su contenido. El hilo es la conversación privada de alguien y no va a ninguna parte más allá del veredicto.

Sigue leyendo

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.