Editorial Intelligence

Un moteur d’actualités externe pour Drupal qui évalue chaque article candidat par rapport au contenu propre d’un site, et ne montre aux visiteurs que ceux qui sont pertinents.

 

## Ce que c'est

Editorial Intelligence est un module Drupal qui sélectionne des actualités externes pour un site au lieu d'ajouter un flux brut. Il interroge des sources pour trouver des articles candidats, attribue une note à chacun en fonction de la similarité des embeddings avec le contenu propre du site, et n'affiche que ceux qui sont pertinents : dans une barre latérale, dans un bloc de couverture associée sur un article, et, associé au module [Species External Entity](/fr/produits/species-ext), dans un widget par espèce sur une page d'espèce.

Il traite la couverture externe comme une salle de rédaction curatoriale, et non comme un flux non filtré : rien n'apparaît tant qu'il n'a pas été évalué et jugé pertinent. Editorial Intelligence est en ligne aujourd'hui sur [Biodiversa](/fr/projets/biodiversa).



 

 





 

## En un coup d'œil

Modules`editorial_intelligence`, le moteur : stockage, embeddings et scoring ; `editorial_intelligence_feeds` et `editorial_intelligence_manual`, deux adaptateurs d'entrée interchangeablesDrupal core10 ou 11NécessiteLe module contribué `external_entities` et `key` ; `editorial_intelligence_feeds` nécessite également FeedsEmbeddingsUn serveur Ollama auto-hébergé exécutant `nomic-embed-text`, configuré via le module Drupal AIFonctionne avec`species_ext`, pour un widget par espèce et un corpus d'espèces sur lequel calculer un scoreStatutFonctionnel. En production sur Biodiversa.

 

 





 

## Ce que voient les visiteurs et les éditeurs

Les visiteurs voient une couverture éditorialisée partout où un site place un bloc : une liste dans une barre latérale, un bloc de couverture associée sur un article ou, sur un site consacré à la biodiversité, un widget d’actualités sur les espèces présentes sur la page.

Les éditeurs traitent une file d’attente de révision pilotée au clavier : un élément dont le score dépasse un seuil est publié automatiquement, un élément dont le score est inférieur est écarté, et tout ce qui se situe entre les deux attend qu’une personne l’approuve ou le rejette.



 

 





 

## Ce que cela apporte à un site Drupal

### Stockage des entités

Chaque candidat est stocké sous forme d'entité externe (`editorial_news`), et non de nœud, de sorte que le moteur n'ajoute rien à la table des nœuds de Drupal.

### Corpus

La notation s'effectue par rapport à des corpus nommés plutôt qu'à un flux global unique. Les corpus fournis sont `news_article`, le contenu propre au site, et `species`, pour les sites exécutant `species_ext`. Chaque candidat conserve le corpus par rapport auquel il a été évalué, de sorte que plusieurs corpus coexistent sans s'écraser mutuellement, et en ajouter un nouveau se fait en deux appels Drush, sans nouveau code.

### Composants d'affichage

Le plugin de bloc `EditorialNewsRelatedBlock` est réutilisable par corpus. Il est fourni avec trois placements construits sur le même modèle :

- **Editorial news : barre latérale**, une liste à l'échelle du site, configurée par étiquette et une limite de résultats
- **Editorial news : associés**, placé sur un article, mis en correspondance par type de contenu et corpus, avec une option `include_queued` pour afficher aussi les candidats non approuvés
- **Editorial news : à propos de cette espèce**, placé sur une page d'espèce, mis en correspondance avec le corpus des espèces, avec ses propres paramètres de correspondance minimale et de notation

### Sources d'entrée

Le moteur ne sait rien de la provenance d'un candidat. Chaque façon dont un candidat peut arriver est un sous-module frère : `editorial_intelligence_feeds` interroge les flux RSS et Atom via Drupal Feeds, et `editorial_intelligence_manual` permet à un éditeur de coller une URL, d'en prévisualiser les métadonnées Open Graph et de l'ajouter manuellement. Une nouvelle source est un troisième sous-module de même forme, et non une modification du moteur.

### Commandes Drush

Ingestion et notation : `ei:seed-sources`, `ei:add-source`, `ei:embed-onsite`, `ei:rescore-all` (son option `--rerank` réutilise les embeddings stockés au lieu d'appeler Ollama à nouveau), `ei:apply-thresholds`. Espèces et taxonomie : `ei:embed-taxa`, `ei:embed-siblings`. Légendes IA : `ei:generate-taglines`, `ei:explain-matches`. Diagnostics : `ei:diag`, `ei:purge`.



 

 





 

## Sources de données et licences

- **Flux RSS et Atom** : interrogés selon un calendrier nocturne via le sous-module `editorial_intelligence_feeds`
- **Wikipédia** : résumés intégrés pour la chaîne taxonomique lors de l’évaluation du corpus d’espèces
- **GBIF** : espèces sœurs vivantes d’une espèce, récupérées par sa clé de taxon GBIF, pour le corpus d’espèces
- **Ollama** : un serveur auto-hébergé fournissant le modèle d’embedding qui évalue chaque candidat
- **Claude Haiku (Anthropic), en option** : une brève légende expliquant pourquoi un candidat approuvé est important ; la valeur par défaut est un modèle local, Claude est une option de production, et l’un ou l’autre est configuré comme fournisseur du module Drupal AI plutôt que codé en dur

Le recalcul des scores réutilise les embeddings stockés par défaut, donc réajuster un seuil ou ajouter un corpus ne fait pas de nouvel appel au modèle d’embedding.



 

 





 

## Décisions de conception

- **Curation, et non agrégation.** Chaque candidat est évalué, classé et affiché uniquement là où il est pertinent, plutôt que de publier tout ce qu’une source fournit.
- **Un moteur, plusieurs corpus.** Une seule table d’embeddings sert un nombre quelconque de corpus nommés, chaque candidat étant étiqueté avec le corpus par rapport auquel il a été évalué, de sorte que l’évaluation par rapport à un nouveau type de contenu relève surtout de la configuration une fois qu’un premier corpus existe.
- **Un filtre de pertinence par emplacement.** Un bloc peut n’afficher que des éléments approuvés par l’éditeur, ou faire directement confiance au score ; le choix se fait par emplacement, et non à l’échelle du site.
- **L’ingestion reste séparée de l’évaluation.** Le moteur ne fait que stocker, évaluer et afficher ; chaque façon dont un candidat peut arriver, par polling ou collé à la main, est un sous-module frère dont le moteur ne sait rien.



 

 





## Démarrer un projet.

Dites-nous ce que votre site publie déjà, et où la couverture externe doit apparaître.



[Contactez-nous →](/fr/contact)