AI & MCP

Moderazione automatica dei commenti: regole, modello e appello

La moderazione automatica dei commenti è una catena di regole, modello e coda umana: ogni decisione porta il motivo e un appello, altrimenti non è contestabile.

In sintesi

  • Le regole deterministiche girano dentro la richiesta e spiegano la decisione; il modello decide solo la fascia di dubbio.
  • obscenity 0.4.6 pesa 152.763 byte con 0 dipendenze; bad-words 4.1.5 pesa 39.308 byte con 1 dipendenza, letti il 1 novembre 2026.
  • Ogni decisione salva motivo e versione del modello: senza quei campi un ricorso non si ricostruisce.

La moderazione automatica dei commenti è una catena di tre filtri: regole deterministiche, un modello per il contesto e una coda umana per i casi dubbi. Ogni decisione va registrata con il motivo, altrimenti non è contestabile.

Tre livelli

  • Regole: link, maiuscole, caratteri ripetuti, elenco di parole. Costo quasi nullo e decisione spiegabile.
  • Modello: legge la frase intera e distingue un insulto da una citazione; decide solo nella fascia di dubbio.
  • Coda umana: i casi dubbi vanno a una persona, con il testo e i motivi allegati.

Le regole, in codice

const RULES = [
  { name: 'links', test: (t) => (t.match(/https?:\/\//g) || []).length > 1 },
  { name: 'caps', test: (t) => t.length > 40 && t === t.toUpperCase() },
  { name: 'repeat', test: (t) => /(.)\1{6,}/.test(t) },
];

export function screen(text) {
  const hit = RULES.find((rule) => rule.test(text));
  return hit
    ? { action: 'review', reason: hit.name }
    : { action: 'allow', reason: 'rules' };
}

La funzione è sincrona e non chiama la rete: gira dentro la richiesta che salva il commento. Se una regola scatta, il commento non viene pubblicato subito ma finisce in revisione; nessuna regola cancella. Il file si prova con node --test moderation.test.js.

Il modello decide solo il dubbio

Al modello si chiede una cosa sola: «questo commento attacca una persona o un gruppo?». La risposta è un valore con una confidenza, e la soglia si sceglie sui tuoi dati. Sotto la soglia bassa si pubblica, sopra quella alta si nasconde, in mezzo decide una persona.

Cosa registrare

  • Testo e autore, con la data, per poter ricostruire il caso.
  • Motivo: nome della regola o etichetta del modello, non «spam».
  • Versione: nome e versione del modello, così una regressione si spiega.
  • Esito: pubblicato, nascosto o in coda, con chi ha deciso.

L'appello

Chi scrive deve poter chiedere una revisione senza aprire un ticket a parte: un link nella notifica basta. La persona che rivede vede il testo, il motivo e la decisione precedente, e può annullarla. Un sistema senza appello sposta il danno dallo spam all'errore.

La limitazione

Le regole non leggono il contesto: un elenco di parole colpisce la citazione e l'insulto con lo stesso peso, e l'offuscamento con caratteri sostituiti passa. Il modello aggiunge costo e latenza a ogni commento e va rivalutato quando cambia versione. Nessuno dei due capisce il sarcasmo meglio di una persona.

Dove continuare

Le regole di sanificazione dell'input sono in sanitizzare l'input, l'obbligo di controllo lato server in validazione lato server, il limite di richieste in rate limit design. Per la coda di revisione servono una tabella con stato o una data table di progetto, dentro componenti tabella e 111.985 componenti.

Domande frequenti

Meglio una blocklist o un modello?

Entrambi, in quest'ordine: la blocklist decide i casi ovvi senza costo e senza rete, il modello guarda quelli che restano. Da sola la blocklist sbaglia sulle citazioni; da solo il modello costa su ogni commento e non spiega la decisione.

Quanto tempo aggiunge la moderazione?

Le regole girano nella stessa richiesta e non aggiungono un salto di rete. Il modello ne aggiunge uno: misura il p95 prima di attivarlo e metti un timeout che, allo scadere, manda il commento in revisione invece di bloccare la pubblicazione.

Posso cancellare i commenti senza avvisare?

Puoi nasconderli, ma conserva testo, motivo e decisione: senza traccia un ricorso non si ricostruisce. La cancellazione silenziosa sposta il problema dallo spam all'errore non correggibile.

Come gestisco i falsi positivi?

Con due soglie e un appello: la fascia bassa pubblica, quella alta nasconde, la zona di mezzo va in coda. Ogni falso positivo confermato diventa un caso di test per la regola o per il prompt.

Che dati conservo?

Il minimo per ricostruire la decisione: testo, autore, data, motivo, versione del modello ed esito. Definisci un periodo di conservazione e cancellalo alla scadenza; conservare tutto per sempre è un rischio, non una precauzione.