Files
dify-handleidingen/07-schoolnieuws-met-controle/video-script.md
T
Guido van Dijk f134e29625 feat: uitlegvideo bij elke handleiding (schermafbeeldingen, Nederlandse stem, ondertitels)
- video-script.md, video-*.mp4 en .srt in de acht mappen
- README-sectie Video's en CHANGELOG

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-21 17:31:45 +02:00

9.1 KiB

titel: Schoolnieuws met controle

ondertitel: Handleiding 7 · zelfkritiek en een poortwachter, vervolg op handleiding 3

stem: nl-NL-FennaNeural

tempo: -5%

uitvoer: video-schoolnieuws-met-controle

reeks: Reeks AI Agents met Dify voor school

bron: git.lexconsultancy.nl/guido/dify-handleidingen

[titel] Welkom bij de zevende handleiding van de reeks AI Agents met Dify voor school. In handleiding 3 bouwde je Schoolnieuws: één kernboodschap wordt een bericht voor website, ouderapp en sociale media. De teksten waren goed, maar ze gingen ongecontroleerd naar buiten.

Deze handleiding voegt twee dingen toe. Een Controleur, een taalmodel dat het ouderappbericht nog eens naleest tegen de schrijfwijzer. En een Poortwachter: een stukje code dat harde regels controleert, woordaantal, verboden woorden, hashtag, ontbrekende informatie. Klopt alles, dan naar buiten. Anders naar de communicatiemedewerker, mét de redenen.

[kaart: Voorbereiding | De workflow Schoolnieuws uit handleiding 3 staat op je account en werkt | Je weet wat een LLM-blok en een Output-blok zijn | Je hoeft niet te kunnen programmeren: de code plak je, wat hij doet staat ernaast | Vier delen: A Controleur, B Poortwachter, C de poort met twee uitgangen, D testen] Je hoeft niet te kunnen programmeren. De code plak je; wat hij doet, leg ik uit. Dit zijn patroon 4 en 5 uit de bijlage Ontwerppatronen: zelfkritiek en poortwachter.

[beeld: 01-uitgangspunt.jpg | Uitgangspunt] Zo ziet Schoolnieuws eruit voordat je begint: User Input, Knowledge Retrieval, drie LLM-blokken en Output.

[beeld: 27-hele-keten.jpg | Het doel] En zo ziet de staart eruit als je klaar bent: na Social komen Controleur, Poortwachter, IF ELSE, en twee uitgangen: Goedgekeurd, en Naar de communicatiemedewerker.

[beeld: 03-disconnect-menu.jpg | Deel A, stap 1. Output loskoppelen] De nieuwe blokken komen tussen Social en Output. Open Schoolnieuws, klik op het blok Social en scroll naar Next Step. Klik op de drie puntjes achter Output en kies Disconnect. Niet Delete: het blok mag blijven, alleen de lijn gaat weg.

[beeld: 07-controleur-prompt.jpg | Deel A, stap 2. De Controleur] Klik bij Next Step op Select next step en kies LLM. Model gpt-5-mini, Context Knowledge Retrieval result, dus de schrijfwijzer. Plak de prompt: je bent de controleur van Het Voorbeeldcollege, beoordeel dit conceptbericht voor de ouderapp op de punten uit de schrijfwijzer: maximaal 80 woorden, u-vorm, één boodschap, één datum, één actie, geen afkortingen, geen namen van leerlingen, taalniveau B1.

Werk in twee stappen: noem eerst wat niet klopt, geef dan de verbeterde versie. Maar geef als antwoord alleen de verbeterde tekst. Dat is geen tegenstrijdigheid maar een truc: het model beoordeelt eerst, en dat verbetert het resultaat, maar je krijgt schone tekst terug. Onderaan koppel je de schrijfwijzer als Context en het conceptbericht als Ouderapp text.

[beeld: 08-controleur-klaar.jpg | Deel A, stap 2. De Controleur klaar] Hernoem het blok naar Controleur. Kijk nog even naar twee zinnen in de prompt: haal geen feiten, data of tijden weg die in het concept staan, en verander cijfers niet in woorden.

Die staan er om een reden. In onze eerste test deed de Controleur precies wat we vroegen, en dat was te veel: één datum las hij als haal de aanmelddatum weg, en klas 2 werd klas twee. Zelfkritiek verbetert de vorm; wat er inhoudelijk mag veranderen, moet jij begrenzen.

[beeld: 10-code-ingevuld.jpg | Deel B, stap 3. De Poortwachter: een Code-blok] Deel B. Bij Controleur: Select next step, en onder Transform: Code. Klik in de editor, selecteer alles en plak de code uit de handleiding.

Wat de code doet, in gewone taal. Er is een lijst verboden woorden: middels, omtrent, z.s.m., gelieve; de lijst uit de schrijfwijzer, hier hard gemaakt. Er zijn drie teksten met hun maximum in woorden. Voor elke tekst: is hij te lang, noteer een reden. Staat er INVULLEN in, noteer een reden, want een bericht met een gat gaat nooit naar buiten. Staat er een verboden woord in, noteer een reden. En het socialbericht moet de schoolhashtag hebben.

De code geeft twee dingen terug: ok, 1 is goed en 0 is fout, en redenen, de lijst, of Alle regels in orde.

Let op de inspringing: in Python telt elke spatie aan het begin van een regel. Plakken gaat goed. Overtypen gaat bijna altijd mis; doe dat niet.

[beeld: 13-invoer-gekoppeld.jpg | Deel B, stap 4. Invoer koppelen] Hernoem bij Input Variables arg1 naar website en arg2 naar ouderapp, en voeg een derde toe: social. De namen moeten precies gelijk zijn aan die in de eerste regel van de code. Koppel ze: website aan Website text, ouderapp aan Controleur text, dus de verbeterde versie, en social aan Social text.

[beeld: 15-poortwachter-klaar.jpg | Deel B, stap 4. Uitvoer] Bij Output Variables: hernoem result naar ok en zet het type op Number. Voeg redenen toe, type String. Hernoem het blok naar Poortwachter.

De uitvoernamen moeten letterlijk overeenkomen met de namen in de return-regel van de code. Eén letter anders en de workflow stopt met een foutmelding.

Alles wat je met zekerheid kunt controleren, hoort hier en niet in een prompt. Vraag je communicatiemedewerker: welke fout mag nooit meer voorkomen? Dat is je eerste regel.

[beeld: 18-conditie.jpg | Deel C, stap 5. IF ELSE] Deel C. Bij Poortwachter: Select next step, onder Logic: IF ELSE. Klik bij IF op Add Condition, kies Poortwachter ok, laat de vergelijking op is-gelijk staan en typ 1.

[beeld: 20-goedgekeurd.jpg | Deel C, stap 6. Uitgang 1: Goedgekeurd] Onder IF: Select next step, Output. Drie uitvoervariabelen: website, ouderapp vanuit Controleur, en social. Hernoem het blok naar Goedgekeurd.

[beeld: 22-naar-medewerker.jpg | Deel C, stap 7. Uitgang 2: naar de medewerker] Klik op IF ELSE; onder ELSE kies je ook Output. Vier variabelen, met de redenen bovenaan zodat de medewerker meteen ziet wat er mis is: afgekeurd omdat, uit Poortwachter redenen, en dan concept website, concept ouderapp en concept social. Hernoem naar Naar de communicatiemedewerker.

Let op: twee Output-blokken mogen geen gelijknamige variabelen hebben. Noem je ze in beide website, dan zet Dify een oranje Dubbele variabele in de checklist en kun je niet publiceren. Vandaar concept onderstreepje in de tweede uitgang.

[beeld: 24-oude-output.jpg | Deel C, stap 8. De oude Output opruimen] Klik rechtsboven op het checklist-icoon naast Test Run. De oude Output is nergens meer aan verbonden; klik erop in de checklist, hij staat verstopt achter Controleur. Drie puntjes, Delete. Controleer dat de checklist leeg is.

[beeld: 26-nieuwe-staart.jpg | Deel C. De nieuwe staart] De nieuwe staart van de workflow: Social, Controleur, Poortwachter, IF ELSE, en de twee uitgangen.

[beeld: 28-test1-resultaat.jpg | Deel D, stap 9. Test 1: een compleet bericht] Een poortwachter test je altijd twee kanten op. Alleen de goede kant testen bewijst niets. Test Run met de complete boodschap uit handleiding 3: ouderavond op 8 oktober, aanmelden tot 5 oktober. Na ongeveer een minuut kleurt het pad via IF naar Goedgekeurd groen.

[beeld: 31-poortwachter-ok.jpg | Deel D, stap 9. Tracing] Klik op Tracing en klap Poortwachter open. Onder Output staat wat de code teruggaf: ok 1, Alle regels in orde.

Tracing is je vriend. Bij elke vraag waarom kwam dit eruit, open je hier het blok en zie je precies wat erin ging en wat eruit kwam. Dat is ook het scherm waarop we zagen dat de Controleur de aanmelddatum had weggehaald.

[beeld: 34-test2-afgekeurd.jpg | Deel D, stap 10. Test 2: een bericht met gaten] Test Run opnieuw, nu met een boodschap zonder datum, zonder tijd en met een afkorting: binnenkort is er weer een ouderavond voor de brugklassen, ouders moeten zich z.s.m. aanmelden.

Nu loopt het pad via ELSE naar Naar de communicatiemedewerker, en bovenaan staan vier redenen. Alle drie de teksten bevatten INVULLEN: de modellen wisten de datum niet en hebben hem netjes niet verzonnen. En in het socialbericht staat z.s.m.

Dat laatste is leerzaam. De prompt van Social vroeg om de schrijfwijzer te volgen, en toch glipte de afkorting uit de kernboodschap erdoorheen. Een prompt vraagt; de poortwachter dwingt af.

[beeld: 36-webapp-afgekeurd.jpg | Deel D, stap 11. Publiceren] Publish, Publish Update. Dify maakt versie 2 van de app, en via het klokje rechtsboven kun je altijd terug naar versie 1. Open de webapp en herhaal test 2: de collega ziet de redenen bovenaan en daaronder de concepten om aan te vullen. De link is dezelfde gebleven.

[kaart: Controleren of het gelukt is | De staart heeft Controleur, Poortwachter, IF ELSE en twee uitgangen | De checklist is leeg: geen losse Output, geen dubbele variabelen | Test 1 loopt naar Goedgekeurd, met ok 1 in Tracing | Test 2 loopt naar de communicatiemedewerker, met de redenen bovenaan | De Controleur haalt geen data weg en verandert geen cijfers in woorden | Gepubliceerd als versie 2] De controlelijst: staat de hele staart erin? Is de checklist leeg? Gaat test 1 naar Goedgekeurd en test 2 naar de medewerker? Laat de Controleur de feiten met rust? En is versie 2 gepubliceerd?

[slot: Een prompt vraagt. Code dwingt af.] De handleiding, de code en de beelden staan in de repository; de app staat live op udify punt app. In de laatste video bouwen we de Studiecoach: een Chatflow met vier routes, geheugen, en een docent in de lus. Tot dan.