Modèle de workflow ECA pour générer du contenu avec Drupal 11 et modules IA
Objectif
Générer automatiquement le corps, l’extrait et les métadonnées d’un contenu éditorial à partir du titre et d’un bref angle éditorial, en s’appuyant sur ECA et le module AI.
Prérequis
- Drupal 11
- Modules: ECA, Token, AI (drupal.org/project/ai Content Moderation (optionnel)
- Un fournisseur IA configuré dans AI (ex.: OpenAI, Azure OpenAI, Anthropic, etc.)
Champs conseillés sur le type de contenu (ex.: Article)
- field_ai_generate (Boolean) — déclencheur de génération
- field_outline (Text long) — angle/brief pour guider l’IA
- body (Text long avec format Basic HTML) — corps généré
- field_summary (Text) — résumé/chapo généré
- field_seo_description (Text) — meta description SEO
Étapes de conception du workflow ECA
- Créer un modèle ECA “Génération IA – Article”.
- Événement: “Entity insert or update” sur “node” du bundle “article”.
- Passerelle de conditions:
- field_ai_generate = TRUE
- body vide OU longueur < N caractères
- titre non vide
- Action: Construire un prompt (variable) à partir des tokens (titre, outline, taxonomie souhaitée, ton éditorial).
- Action (AI): Appeler le plugin “Génération de texte” du module AI avec le modèle par défaut configuré.
- Action: Nettoyer/sécuriser la sortie (longueur max, formats HTML autorisés).
- Action: Renseigner les champs:
- body = contenu généré (format Basic HTML)
- field_summary = résumé extrait par l’IA
- field_seo_description = meta description (150–160 caractères)
- Action: Définir l’état éditorial “Needs Review” (si Content Moderation est actif).
- Action: Journaliser une entrée (log) et, si nécessaire, notifier le rôle “Rédaction”.
- Action d’échec (branche alternative): si l’IA échoue, conserver l’état “Brouillon” et ajouter un message système.
Exemple de prompt (variable ECA “prompt_body”)
Rôle: Rédacteur web senior.
Contexte du site: [site:name].
Date: [current-date:custom:Y-m-d].
Tâche:
- Rédiger un article complet en français sur: “[node:title]”.
- S’inspirer de l’angle/brief ci-dessous.
- Production attendue en HTML sémantique basique (<p>, <h2>, <h3>, <ul>, <ol>, <li>, <blockquote>, <code> si nécessaire).
- Ton: informatif, clair, concis, orienté valeur.
- Longueur cible: 600–900 mots.
- Inclure un chapo (1–2 phrases) et des intertitres.
- Éviter le langage promotionnel excessif, fournir des informations vérifiables.
Brief/outline:
[node:field_outline]
Format de sortie (JSON):
{
"summary": "Chapo (max 280 caractères)",
"seo_description": "Meta description (150-160 caractères)",
"body_html": "<p>...</p>"
}
Contraintes:
- Aucun lien externe non nécessaire.
- Pas d’images.
- HTML propre et accessible.
Actions ECA typiques (pseudo-configuration)
id: eca_ai_generate_article
label: "Génération IA — Article"
events:
- id: eca_event_entity_insert_update
entity_type: node
bundles: [article]
conditions:
- id: eca_condition_field_value
field: node.field_ai_generate
operator: =
value: true
- id: eca_condition_body_empty
field: node.body
operator: is_empty
conjunction: OR
- id: eca_condition_title_not_empty
field: node.title
operator: is_not_empty
actions:
- id: eca_action_build_text
result_var: prompt_body
text: "(utiliser le prompt ci-dessus avec tokens)"
- id: eca_action_ai_generate_text
provider: ai.default_text_model
input_var: prompt_body
output_var: ai_json
expect: json
- id: eca_action_json_extract
source_var: ai_json
path: $.summary
target_var: ai_summary
- id: eca_action_json_extract
source_var: ai_json
path: $.seo_description
target_var: ai_seo
- id: eca_action_json_extract
source_var: ai_json
path: $.body_html
target_var: ai_body
- id: eca_action_sanitize_html
input_var: ai_body
allowed_tags: [p,h2,h3,ul,ol,li,blockquote,code,strong,em,a]
output_var: ai_body_clean
- id: eca_action_set_field
entity: node
field: body
value_var: ai_body_clean
format: basic_html
- id: eca_action_set_field
entity: node
field: field_summary
value_var: ai_summary
- id: eca_action_set_field
entity: node
field: field_seo_description
value_var: ai_seo
- id: eca_action_set_moderation_state
entity: node
state: needs_review
- id: eca_action_log
level: notice
message: "Contenu généré par IA pour le n°[node:nid]"
fail_actions:
- id: eca_action_log
level: error
message: "Échec de génération IA pour le n°[node:nid]"
- id: eca_action_set_moderation_state
entity: node
state: draft
Variante: enrichissement taxonomique
- Ajouter une seconde action AI avec un prompt demandant 3–5 mots-clés au format JSON (liste de chaînes).
- Analyser le JSON, vérifier l’existence des termes, créer les termes manquants (si politique éditoriale OK), puis renseigner field_tags.
Bonnes pratiques
- Limiter la longueur de sortie et normaliser le HTML autorisé.
- Stocker le JSON brut retourné par l’IA dans un champ de debug non exposé (facilite l’audit).
- Imposer un passage en “Needs Review” pour validation humaine avant publication.
- Journaliser les prompts et tokens utilisés pour reproductibilité.
- Prévoir des garde-fous: délais, tentatives, messages d’erreur clairs.
Test rapide
- Créer un Article avec titre et field_outline renseignés.
- Cocher field_ai_generate, enregistrer en “Brouillon”.
- Vérifier le corps, le chapo et la meta description, puis passer en revue éditoriale.
- Se connecter ou s'inscrire pour publier un commentaire