Drupal AI
Pour évaluer l'écosystème Drupal AI en conditions réelles, j'ai mis en place une sandbox sous Drupal 11. L'objectif était de tester l'intégration des grands modèles de langage (LLM) à travers trois cas d'usage précis, tout en conservant une configuration industrialisable, exportable dans Git et sans secrets commités.
L'écosystème
Le module de contribution AI s'impose comme le standard de facto en proposant un cœur qui abstrait les opérations (chat, vision, embeddings, traduction) et des providers interchangeables sous forme de plugins (Gemini, Anthropic, Ollama). Basculer sur un modèle Ollama auto-hébergé pour un client aux données sensibles devient une simple modification de configuration, sans réécriture de code.
La stack technique de la sandbox repose sur Drupal 11, PHP 8.4, MariaDB 12 et le thème d'administration Gin. Les clés d'API (Gemini, Langfuse) sont injectées par des variables d'environnement via le module Key. Toute la configuration est exportée dans config/sync/ : chaque réglage est un fichier YAML versionné et revuable en Pull Request.
L’IA qui assiste, remplit, répond
- L'IA qui assiste : Les sous-modules (ai_ckeditor, ai_translate) ajoutent des fonctionnalités de reformulation, de résumé et de traduction au sein de l'interface de saisie. La génération d'alt-text par vision automatise l'accessibilité des images. Les prompts ont été durcis pour imposer du HTML sémantique au lieu du Markdown brut renvoyé par défaut.
- L'IA qui remplit : Le module ai_automators permet d'associer des actions IA aux champs. À l'upload d'une image, la vision Gemini génère automatiquement des tags taxonomiques, une description éditoriale et suggère un renommage de fichier optimisé pour le SEO.
- L'IA qui répond : Pour faire répondre un chatbot sur un corpus interne, la sandbox implémente une architecture RAG (Retrieval-Augmented Generation). Le texte est découpé en morceaux (chunks de 500 tokens), vectorisé via Gemini (gemini-embedding-001) et stocké. La particularité réside dans l'absence d'infrastructure vectorielle ajoutée en plus : MariaDB (version ≥ 11.7) gère nativement le type VECTOR.
Séquence d’indexation du RAG
Séquence “question” visiteur
Validation et observabilité
Le RAG a été soumis à un corpus de test composé de 25 politiques RH fictives. IpsoBot s'est révélé particulièrement précis face à des formulations naturelles :
- Pertinence : Sur une question concernant une absence maladie, il extrait la procédure exacte (prévenir avant 10h) et cite sa source. Idem pour les frais professionnels où il isole correctement le plafond de remboursement.
- Multilinguisme : Face à une question en anglais, il répond nativement dans cette langue en s'appuyant sur les documents anglophones du corpus.
- Sécurité : Interrogé sur un sujet hors périmètre (les résultats de la Ligue 1), il applique une phrase de repli stricte et refuse poliment d'inventer.
Pour auditer ces interactions en production, la sandbox intègre le module Langfuse. Chaque question devient une trace visuelle dans Langfuse Cloud, permettant de mesurer précisément la latence, le nombre de tokens consommés et le coût réel, avec la possibilité de basculer sur une instance auto-hébergée si nécessaire.
Les limites
Le développement a mis en évidence des limites liées à la jeunesse de l'écosystème :
- Drupal AI reste jeune : modules en constante évolution (beaucoup de modules moyen / non fonctionnel)
- Garde-fous indispensables : prompt restrictif, sources citées, repli « je ne sais pas »
- Free tier Gemini limité : 15 req/min, génération d'images exclue
- Tuning obligatoire par corpus : cadrage important pour chunking, seuils, prompts
- Données envoyées au provider cloud : attention aux données sensibles
Conclusion
L'approche tient la route et simplifie considérablement l'architecture grâce à l'intégration vectorielle native de MariaDB. À ce stade, le coût des modèles reste anecdotique face au temps nécessaire pour ajuster la tuyauterie (prompts, chunking et seuils de distance).
Le code source et la configuration complète sont disponibles sur le dépôt GitHub : sandbox-drupal-ai.