Editorial Intelligence

Een externe nieuwsengine voor Drupal die elk kandidaatartikel scoort ten opzichte van de eigen content van een site, en bezoekers alleen de artikelen toont die relevant zijn.

 

## Wat het is

Editorial Intelligence is een Drupal-module die extern nieuws voor een site curateert in plaats van een onbewerkte feed toe te voegen. Het bevraagt bronnen op kandidaatartikelen, scoort elk ervan op basis van embeddinggelijkenis met de eigen content van de site, en toont alleen de relevante: in een zijbalk, in een blok met gerelateerde berichtgeving bij een artikel, en, in combinatie met de module [Species External Entity](/nl/producten/species-ext), in een widget per soort op een soortpagina.

Het behandelt externe berichtgeving als een gecureerde nieuwsredactie, niet als een ongefilterde feed: niets verschijnt voordat het is gescoord en relevant is bevonden. Editorial Intelligence is vandaag live op [Biodiversa](/nl/projecten/biodiversa).



 

 





 

## In één oogopslag

Modules`editorial_intelligence`, de engine: opslag, embeddings en scoring; `editorial_intelligence_feeds` en `editorial_intelligence_manual`, twee uitwisselbare invoeradaptersDrupal core10 of 11VereistDe bijgedragen `external_entities`-module en `key`; `editorial_intelligence_feeds` vereist ook FeedsEmbeddingsEen zelfgehoste Ollama-server waarop `nomic-embed-text` draait, geconfigureerd via de Drupal AI-moduleWerkt met`species_ext`, voor een widget per soort en een soorten-corpus om tegen te scorenStatusWerkend. In productie op Biodiversa.

 

 





 

## Wat bezoekers en redacteuren zien

Bezoekers zien gecureerde berichtgeving waar een site ook een blok plaatst: een lijst in de zijbalk, een blok met gerelateerde berichtgeving bij een artikel, of, op een biodiversiteitssite, een widget met nieuws over de soort op de pagina.

Redacteuren werken een toetsenbordgestuurde beoordelingswachtrij af: een item dat boven een drempelwaarde scoort, wordt automatisch gepubliceerd, een item dat daaronder scoort, wordt verwijderd, en alles daartussen wacht op een persoon die het goedkeurt of afwijst.



 

 





 

## Wat het toevoegt aan een Drupal-site

### Entiteitsopslag

Elke kandidaat wordt opgeslagen als een externe entiteit (`editorial_news`), niet als een node, dus de engine voegt niets toe aan de node-tabel van Drupal.

### Corpora

Scoring werkt met benoemde corpora in plaats van één globale feed. Meegeleverde corpora zijn `news_article`, de eigen content van de site, en `species`, voor sites die `species_ext` draaien. Elke kandidaat houdt het corpus bij waartegen hij is gescoord, zodat meerdere corpora naast elkaar kunnen bestaan zonder elkaar te overschrijven, en het toevoegen van een nieuwe kost twee Drush-aanroepen, geen nieuwe code.

### Weergavecomponenten

De blokplugin `EditorialNewsRelatedBlock` is herbruikbaar per corpus. Hij wordt geleverd met drie plaatsingen volgens hetzelfde patroon:

- **Redactioneel nieuws: zijbalk**, een sitebrede lijst, geconfigureerd op tag en een resultaatslimiet
- **Redactioneel nieuws: gerelateerd**, geplaatst op een artikel, gematcht op contenttype en corpus, met een optie `include_queued` om ook niet-goedgekeurde kandidaten te tonen
- **Redactioneel nieuws: over deze soort**, geplaatst op een soortpagina, gematcht tegen het species-corpus, met eigen instellingen voor minimummatch en scoring

### Invoerbronnen

De engine weet niet waar een kandidaat vandaan komt. Elke manier waarop een kandidaat kan binnenkomen is een zuster-submodule: `editorial_intelligence_feeds` pollt RSS- en Atom-feeds via Drupal Feeds, en `editorial_intelligence_manual` laat een redacteur een URL plakken, de Open Graph-metadata ervan bekijken en deze handmatig toevoegen. Een nieuwe bron is een derde submodule van dezelfde vorm, geen wijziging aan de engine.

### Drush-commando's

Ingestie en scoring: `ei:seed-sources`, `ei:add-source`, `ei:embed-onsite`, `ei:rescore-all` (de optie `--rerank` hergebruikt opgeslagen embeddings in plaats van Ollama opnieuw aan te roepen), `ei:apply-thresholds`. Soorten en taxonomie: `ei:embed-taxa`, `ei:embed-siblings`. AI-bijschriften: `ei:generate-taglines`, `ei:explain-matches`. Diagnostiek: `ei:diag`, `ei:purge`.



 

 





 

## Databronnen en licenties

- **RSS- en Atom-feeds**: worden volgens een nachtelijk schema opgevraagd via de submodule `editorial_intelligence_feeds`
- **Wikipedia**: samenvattingen worden ingebed voor de taxonomieketen bij het scoren van het soortencorpus
- **GBIF**: levende zustersoorten van een soort, opgehaald via de GBIF-taxonsleutel, voor het soortencorpus
- **Ollama**: een zelfgehoste server die het embeddingmodel levert dat elke kandidaat scoort
- **Claude Haiku (Anthropic), optioneel**: een kort bijschrift over waarom een goedgekeurde kandidaat ertoe doet; standaard wordt een lokaal model gebruikt, Claude is een productieoptie, en een van beide wordt geconfigureerd als provider voor de Drupal AI-module in plaats van in code te worden vastgelegd

Bij herscoren worden standaard opgeslagen embeddings hergebruikt, dus het bijstellen van een drempelwaarde of het toevoegen van een corpus roept het embeddingmodel niet opnieuw aan.



 

 





 

## Ontwerpbeslissingen

- **Curatie, geen aggregatie.** Elke kandidaat wordt gescoord, gerangschikt en alleen getoond waar die relevant is, in plaats van alles te publiceren wat een bron aanlevert.
- **Eén engine, meerdere corpora.** Eén enkele embeddingstabel bedient een willekeurig aantal benoemde corpora, waarbij elke kandidaat wordt getagd met het corpus waartegen die is gescoord, dus scoren tegen een nieuw inhoudstype is grotendeels configuratie zodra een eerste corpus bestaat.
- **Een relevantiepoort per plaatsing.** Een blok kan alleen door de redactie goedgekeurde items tonen, of de score direct vertrouwen; de keuze wordt per plaatsing gemaakt, niet sitebreed.
- **Ingestie blijft gescheiden van scoring.** De engine slaat alleen op, scoort en toont; elke manier waarop een kandidaat kan binnenkomen, via polling of handmatig geplakt, is een submodule op hetzelfde niveau waar de engine niets van weet.



 

 





## Start een project.

Vertel ons wat uw site al publiceert, en waar externe berichtgeving moet verschijnen.



[Neem contact op →](/nl/contact)