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

Headless & API

Un plugin IA de résumé branché sur WPGraphQL pour un front Astro

Une extension de résumé automatique par IA pousse son texte généré directement dans le schéma WPGraphQL consommé par un front statique, avec sa relecture obligatoire avant publication.

Par Clément Hadrot • 26 juillet 2024 • 4 min de lecture • Aucun commentaire
Un plugin IA de résumé branché sur WPGraphQL pour un front Astro

Un site d’actualité juridique, alimenté en articles longs et techniques, a intégré début 2024 une extension générant automatiquement un résumé de chaque article via un modèle de langage, dans le but d’afficher un chapô synthétique sur les pages de listing du frontend Astro consommant le contenu via WPGraphQL. La question qui s’est posée immédiatement : comment exposer ce résumé généré sans jamais laisser passer un texte non relu vers le public ?

Le risque n’était pas tant que l’IA se trompe factuellement, bien que ce cas se soit présenté à plusieurs reprises sur des points de procédure juridique subtils, mais que le résumé généré soit publié automatiquement sans qu’aucun humain n’ait eu l’occasion de le corriger ou de le rejeter avant qu’il n’atteigne le front.

Architecture du champ de résumé dans le schéma

Le résumé généré a été stocké comme un champ personnalisé distinct du contenu original, jamais fusionné avec l’extrait natif de l’article, et enregistré avec un statut explicite plutôt qu’une simple présence ou absence de valeur :

add_action('acf/init', function () {
    acf_add_local_field_group([
        'key' => 'group_resume_ia',
        'title' => 'Résumé généré par IA',
        'fields' => [
            ['key' => 'field_resume_texte', 'name' => 'resume_ia_texte', 'type' => 'textarea'],
            ['key' => 'field_resume_statut', 'name' => 'resume_ia_statut', 'type' => 'select',
                'choices' => ['en_attente' => 'En attente de relecture', 'valide' => 'Validé', 'rejete' => 'Rejeté']],
        ],
        'location' => [[['param' => 'post_type', 'operator' => '==', 'value' => 'article']]],
    ]);
});

N’exposer que les résumés validés dans le schéma GraphQL

L'essentiel à retenir : Un résumé généré automatiquement doit rester un champ distinct du contenu original, jamais une fusion silencieuse ; Un statut de relecture doit bloquer l'exposition du résumé tant qu'il n'a pas été validé par un humain ; Le champ exposé via WPGraphQL doit permettre au front de distinguer un résumé validé d'un résumé encore provisoire

Le champ exposé via WPGraphQL for ACF ne retourne une valeur que si le statut de relecture est explicitement valide, grâce à un résolveur personnalisé plutôt qu’une exposition brute du champ ACF :

add_action('graphql_register_types', function () {
    register_graphql_field('Article', 'resumeIA', [
        'type' => 'String',
        'resolve' => function ($article) {
            $statut = get_field('resume_ia_statut', $article->ID);

            if ($statut !== 'valide') {
                return null;
            }

            return get_field('resume_ia_texte', $article->ID);
        },
    ]);
});

Un article dont le résumé reste « en attente de relecture » ou « rejeté » retourne simplement null sur ce champ côté GraphQL. Le front Astro affiche alors l’extrait natif de l’article en repli, sans jamais afficher de résumé généré non validé.

Le flux de relecture humaine

Un tableau de bord interne, accessible aux rédacteurs juridiques, liste tous les articles dont le résumé porte le statut « en attente de relecture », avec le texte généré affiché à côté du contenu original pour comparaison directe :

  • Le rédacteur peut corriger le texte généré avant de le valider
  • Le rédacteur peut rejeter entièrement le résumé si le modèle a mal interprété le contenu
  • Aucun résumé ne change de statut automatiquement, même après une modification de l’article original

Ce dernier point s’est révélé important : une mise à jour de l’article après validation du résumé repasse automatiquement son statut à « en attente de relecture », pour éviter qu’un résumé validé sur une version antérieure du texte reste affiché tel quel après une correction substantielle du contenu source.

Un cas concret d’erreur détectée en relecture

Un résumé généré avait interverti un délai de recours de deux mois avec un délai de six mois mentionné plus loin dans le même article à titre d’exception. Sans relecture obligatoire, cette confusion serait passée directement sur le site public.

Ce que cet article ne traite pas

La question du référencement de ces extraits générés, et de leur éventuel impact sur le classement des pages dans les résultats de recherche, relève d’un sujet distinct qui n’a pas été abordé dans le cadre de cette intégration.

En résumé

Brancher un contenu généré par IA sur un schéma WPGraphQL consommé par un front statique ne pose pas de difficulté technique particulière. La vraie question porte sur la gouvernance du contenu : un statut de relecture explicite, bloquant l’exposition tant qu’aucun humain n’a validé le texte, reste la seule garantie sérieuse contre la publication silencieuse d’une erreur générée automatiquement.

Partager :

À propos de l'auteur

Clément Hadrot

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

Voir tous ses articles

Dans la même veine

À lire aussi