Sorry, you need to enable JavaScript to visit this website.

Générer du contenu automatiquement avec Drupal 11 et modules IA (Intégralement généré par IA)

Soumis par dpalicepeio le

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

  1. Créer un modèle ECA “Génération IA – Article”.
  2. Événement: “Entity insert or update” sur “node” du bundle “article”.
  3. Passerelle de conditions:
    • field_ai_generate = TRUE
    • body vide OU longueur < N caractères
    • titre non vide
  4. Action: Construire un prompt (variable) à partir des tokens (titre, outline, taxonomie souhaitée, ton éditorial).
  5. Action (AI): Appeler le plugin “Génération de texte” du module AI avec le modèle par défaut configuré.
  6. Action: Nettoyer/sécuriser la sortie (longueur max, formats HTML autorisés).
  7. 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)
  8. Action: Définir l’état éditorial “Needs Review” (si Content Moderation est actif).
  9. Action: Journaliser une entrée (log) et, si nécessaire, notifier le rôle “Rédaction”.
  10. 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

  1. Ajouter une seconde action AI avec un prompt demandant 3–5 mots-clés au format JSON (liste de chaînes).
  2. 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

  1. Créer un Article avec titre et field_outline renseignés.
  2. Cocher field_ai_generate, enregistrer en “Brouillon”.
  3. Vérifier le corps, le chapo et la meta description, puis passer en revue éditoriale.