Le WordPress d'aujourd'hui, décodé pour les développeurs

IA & MCP

Un plugin de modération IA relié à Sentry pour traquer ses faux positifs

Cas d'une extension de modération automatique instrumentée pour journaliser dans Sentry chaque décision contestée, afin d'ajuster son seuil de confiance au fil du temps.

Par WordPress Développement • 14 juillet 2023 • 4 min de lecture • Aucun commentaire
Un plugin de modération IA relié à Sentry pour traquer ses faux positifs

Combien de commentaires légitimes un filtre de modération par IA bloque-t-il à tort ? Sur ce site communautaire consacré au jardinage, la question est restée sans réponse pendant deux mois, faute d’un moyen simple de tracer les décisions contestées par les utilisateurs. Le correctif est venu d’un outil déjà en place pour tout autre chose : Sentry.

Ce cas ne traite pas la configuration initiale de Sentry sur le site, déjà en place pour le suivi des erreurs PHP classiques. Il décrit uniquement comment son usage a été détourné pour instrumenter les décisions de modération automatique.

Le point de départ : des blocages sans trace

Le plugin de modération, construit autour d’un appel à un LLM à chaque nouveau commentaire via le hook pre_comment_approved, renvoyait une classification en trois catégories : approuvé, en attente, ou rejeté. Le problème est apparu quand plusieurs membres réguliers du forum ont signalé des commentaires bloqués sans raison apparente, portant sur des sujets aussi anodins que la taille des rosiers.

Sans journalisation détaillée, impossible de savoir combien de commentaires étaient concernés, ni si le phénomène s’aggravait. Les seuls indices disponibles étaient les réclamations manuelles, forcément partielles.

L’instrumentation avec Sentry

L'essentiel à retenir : Chaque décision contestée est journalisée avec son score de confiance ; Sentry sert de tableau de bord plutôt que d'outil de crash ; Le seuil de blocage a été ajusté deux fois en un mois

Plutôt que de construire un tableau de bord dédié, l’équipe a choisi de journaliser chaque décision de modération contestée comme un événement Sentry personnalisé, avec le score de confiance du modèle en contexte associé :

add_filter( 'pre_comment_approved', function( $approved, $commentdata ) {
    $resultat = classifier_commentaire_llm( $commentdata['comment_content'] );

    if ( $resultat['decision'] === 'rejete' && $resultat['confiance'] < 0.75 ) {
        \Sentry\withScope( function ( $scope ) use ( $resultat, $commentdata ) {
            $scope->setContext( 'moderation_ia', array(
                'confiance' => $resultat['confiance'],
                'motif'     => $resultat['motif'],
                'extrait'   => mb_substr( $commentdata['comment_content'], 0, 100 ),
            ) );
            \Sentry\captureMessage( 'Rejet IA à confiance basse', \Sentry\Severity::warning() );
        } );
    }

    return $resultat['decision'] === 'rejete' ? 0 : $approved;
}, 10, 2 );

Le seuil de 0,75 n’a rien d’arbitraire : c’est la valeur en dessous de laquelle l’équipe a décidé qu’un rejet méritait d’être journalisé pour examen, plutôt que de faire confiance aveuglément au modèle.

Ce que Sentry a révélé

En trois semaines, 214 événements de ce type ont été capturés. Le tri manuel de cet échantillon a montré que 6,2 % des rejets à confiance basse correspondaient en réalité à des commentaires légitimes, souvent des messages contenant un vocabulaire technique de jardinage confondu avec un langage promotionnel par le modèle — les mots « traitement » et « produit » revenaient dans la majorité des faux positifs.

  • Les faux positifs concernaient majoritairement des messages mentionnant des produits phytosanitaires légitimes.
  • Les vrais positifs (spam réel) représentaient l’essentiel du reste, confirmant que le filtre restait globalement utile.
  • Aucun faux négatif significatif n’a été détecté sur la même période.

L’ajustement du seuil

Le seuil de rejet automatique est passé de 0,75 à 0,85, avec mise en file d’attente manuelle pour tout score compris entre 0,60 et 0,85 plutôt qu’un rejet direct. Cet ajustement a réduit de moitié le taux de faux positifs mesuré sur les quatre semaines suivantes, au prix d’une légère augmentation de la charge de modération manuelle.

Un filtre de modération sans journalisation détaillée n’est pas un filtre fiable : c’est un filtre dont on ignore simplement le taux d’erreur.

Pour aller plus loin

L’usage de Sentry comme tableau de bord de décisions IA, détourné de son rôle initial de suivi d’erreurs, s’est révélé plus rapide à mettre en place qu’un outil de journalisation dédié. La leçon principale reste néanmoins indépendante de l’outil choisi : sans traçabilité par décision individuelle, aucun ajustement de seuil ne peut être fondé sur autre chose que des impressions.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Partager :

À propos de l'auteur

WordPress Développement

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi