06: stap 8, tweede eigen tool SLO leerdoelen met sleutel (registreren, Basic auth, Accept-header); agent koppelt materiaal aan tussendoelen

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Guido van Dijk
2026-09-20 22:33:46 +02:00
parent 825de93f79
commit 7936fee88d
34 changed files with 136 additions and 6 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 154 KiB

@@ -20,6 +20,7 @@ Bestanden in deze map:
lesbrief-ecologie.pdf fictieve lesbrief biologie 3 havo (zelfde als in handleiding 8)
stercollectie-voedselweb-hv3.pdf voorbeeld van wat de zoektool vindt (VO-content, CC BY-SA 4.0)
edurep-zoeken.openapi.json het schema van de zoektool, om te plakken bij stap 3
slo-leerdoelen.openapi.json het schema van de tweede tool (stap 8); de sleutel staat er niet in
Gepubliceerde voorbeeld-app: https://udify.app/agent/lkWKedkSW2d3nqBV
-->
@@ -28,7 +29,7 @@ Gepubliceerde voorbeeld-app: https://udify.app/agent/lkWKedkSW2d3nqBV
**Handleiding 6: lesmateriaal toegankelijk maken voor alle leerlingen**
Experimenteerruimte ICT SOML · LeX Consultancy B.V. · 20 september 2026
Je bouwt een agent die een docent helpt zijn lesmateriaal toegankelijk te maken voor leerlingen met een ondersteuningsbehoefte. De agent leest de lesbrief, vraagt welke behoeften in de klas voorkomen, beoordeelt het materiaal op zeven punten, maakt aangepaste versies voor de docent en voor leerlingen, en zoekt op Wikiwijs naar open leermateriaal dat erbij past, met licentie.
Je bouwt een agent die een docent helpt zijn lesmateriaal toegankelijk te maken voor leerlingen met een ondersteuningsbehoefte. De agent leest de lesbrief, vraagt welke behoeften in de klas voorkomen, beoordeelt het materiaal op zeven punten, maakt aangepaste versies voor de docent en voor leerlingen, zoekt op Wikiwijs naar open leermateriaal dat erbij past, met licentie, en zegt (stap 8) welke leerdoelen van SLO het materiaal dekt.
Twee dingen zijn nieuw ten opzichte van handleiding 4. Ten eerste de didactiek: de agent werkt volgens **Universal Design for Learning** (UDL), het kader dat zegt dat je niet per leerling een uitzondering maakt, maar het materiaal zo ontwerpt dat het voor iedereen werkt. Ten tweede de techniek: je maakt een **eigen tool**. Dify heeft geen tool die Wikiwijs doorzoekt, dus je beschrijft de zoekmachine van Kennisnet (Edurep) in een klein schema, en daarmee kan de agent hem aanroepen. Dat is de stap van "tools kiezen uit een lijst" naar "elke website met een API als tool".
@@ -344,6 +345,84 @@ Wie de link krijgt, kan zijn eigen lesbrief meesturen via het paperclipje en kri
---
## Stap 8. Tweede eigen tool: kerndoelen en leerdoelen van SLO
De agent zegt nu wat er in het materiaal staat en waar je meer vindt. Wat hij nog niet zegt: welke **leerdoelen** het materiaal dekt. Die staan in de curriculumdatabase van SLO (kerndoelen, tussendoelen, eindtermen, vakbegrippen), open onder CC BY, met een API. Het patroon is hetzelfde als bij Edurep, met één verschil: deze API vraagt een sleutel. Zo leer je meteen hoe je een sleutel in een tool zet.
### De sleutel aanvragen (twee minuten)
1. Ga naar **opendata.slo.nl** en klik links op **Hoe werkt de API?** → **Curriculum API**. Daar staat hoe de API werkt: JSON krijg je alleen met een Accept-header en je sleutel als "basic authentication".
![De uitleg van de Curriculum API, met de link registreren](beelden/26-slo-curriculum-api.jpg)
2. Klik op **registreren**. Vul je e-mailadres in en klik op **Registreren**. De sleutel komt binnen een minuut per mail.
![API Key registreren: alleen een e-mailadres](beelden/27-slo-api-key-registreren.jpg)
3. Maak van je e-mailadres en de sleutel één regel, gescheiden door een dubbele punt, en codeer die als base64. Dat is wat "basic authentication" is. In een terminal:
```
printf 'jouw@mailadres.nl:jouw-sleutel' | base64 -w0
```
Bewaar de uitkomst even; die gaat straks in Dify. Gebruik het mailadres waarmee je registreerde, precies zo.
> De sleutel is persoonlijk. Zet hem nergens in een document, een prompt of een chat; alleen in het veld Authorization van de tool (hieronder). Wie de tool in Dify kan bewerken, kan de sleutel gebruiken; dat is de reden dat een tool aan een workspace hangt en niet aan een app.
### De tool maken
4. Ga naar **Integraties** → **Swagger API as Tool** → **Add Swagger API as Tool**. Naam: `SLO leerdoelen`. Plak bij Schema de inhoud van `slo-leerdoelen.openapi.json` uit de map.
![Het schema van SLO leerdoelen, één actie zoekLeerdoelen](beelden/28-slo-tool-schema.jpg)
Nieuw in dit schema, vergeleken met Edurep: een parameter `Accept` met `"in": "header"` en standaardwaarde `application/json`. Zonder die header stuurt SLO een webpagina terug in plaats van gegevens; de agent leest dan HTML en vindt niets.
5. Klik onderaan bij **Authorization method** op het tandwiel. Kies **Header**, bij Auth Type **Basic**, bij Key `Authorization`, en plak bij Value de base64-regel uit punt 3. Klik op **Save**.
![Authorization method: None, Header of Query Param](beelden/29-slo-authorization.jpg)
6. Klik bij de actie **zoekLeerdoelen** op **Test**, vul bij text `voedselweb` in en bij Accept `application/json`, en klik op **Test**. Onder Test Results verschijnt een JSON-lijst: vakbegrippen (`SyllabusVakbegrip`, `LdkVakbegrip`) en doelen (`Doel`) met de letterlijke formulering.
![Het testresultaat: JSON met vakbegrippen en doelen](beelden/30-slo-test-resultaat.jpg)
7. Klik op **Save**. Er staan nu twee eigen tools.
![Edurep zoeken en SLO leerdoelen](beelden/31-twee-tools.jpg)
### Aan de agent koppelen
8. Ga naar de agent, klik bij **TOOLS** op **Add**, tabblad **Swagger API**, klik op **SLO leerdoelen** en **Add all**.
![SLO leerdoelen in de toolkiezer, met de actie zoekLeerdoelen](beelden/32-slo-tool-kiezen.jpg)
![Twee tools onder de agent](beelden/33-agent-twee-tools.jpg)
9. Voeg in de instructie (stap 4) een punt 6 toe, en maak van de afsluitende vraag punt 7:
```
6. Koppel het materiaal aan het landelijke curriculum met de tool SLO leerdoelen: zoek op twee of drie kernbegrippen (bijvoorbeeld: voedselweb, kringloop) met Accept application/json. Geef onder het kopje "Leerdoelen (SLO)" maximaal vijf doelen uit de resultaten (@type Doel of Kerndoel) die het materiaal dekt, letterlijk geciteerd, en noem één doel uit de resultaten dat het materiaal niet of nauwelijks raakt. Noem alleen doelen die in de resultaten stonden.
```
10. Test in **VOORBEELD** met één bericht dat alles tegelijk geeft:
| Bericht | Wat je intypt |
| --- | --- |
| 1 | `Bekijk mijn lesbrief ecologie voor 3 havo. In de klas: dyslexie en taalzwak of NT2.` |
Het antwoord heeft nu een extra kopje **Leerdoelen (SLO)**: vijf tussendoelen die de lesbrief dekt, letterlijk geciteerd, en één doel dat de lesbrief nauwelijks raakt (in onze test: "Je herkent dat een ecosysteem in verschillende evenwichtssituaties kan verkeren"). Dat laatste is voor een docent misschien het nuttigste zinnetje van het hele rapport.
![Na de bronnen: het kopje Leerdoelen (SLO)](beelden/34-leerdoelen-slo-begin.jpg)
![Vijf doelen die het materiaal dekt, en één dat het niet raakt](beelden/35-leerdoelen-slo.jpg)
11. Klik op **Update publiceren**.
> Deze beurt kostte ruim 500.000 tokens (de agent leest de lesbrief, schrijft drie bestanden en doet nu acht zoekopdrachten). Via een eigen sleutel is dat rond anderhalve euro. Voor een demo prima; voor dagelijks gebruik door een sectie zet je een limiet op de sleutel, of laat je de agent alleen op verzoek naar SLO kijken ("als de docent erom vraagt").
> **Zelf kiezen: wat je uit SLO haalt.** De zoekingang geeft alles wat het woord bevat: kerndoelen, tussendoelen, eindtermen en begrippen. Wil je alleen examenprogramma's (eindtermen), zet dan in punt 6 "@type SyllabusSpecifiekeEindterm". Wil je per doel het niveau en het vak, dan is er een tweede actie mogelijk op `/curriculum/2026/api/v1/uuid/{id}`; voeg die als tweede pad toe aan het schema.
---
## Controleren of het gelukt is
- Onder Integraties → Swagger API as Tool staat Edurep zoeken met één actie, en de test geeft numberOfRecords groter dan 0
@@ -351,6 +430,7 @@ Wie de link krijgt, kan zijn eigen lesbrief meesturen via het paperclipje en kri
- De agent vraagt eerst naar ondersteuningsbehoeften en beoordeelt pas daarna
- Het rapport heeft zeven punten met een score
- Er zijn twee bestanden (drie als hoogbegaafd is gekozen) en maximaal vijf bronnen met licentie
- Na stap 8: onder Integraties staan twee eigen tools, en het rapport eindigt met Leerdoelen (SLO)
- De Toegangs-URL opent een werkende chat
---
@@ -362,6 +442,8 @@ Wie de link krijgt, kan zijn eigen lesbrief meesturen via het paperclipje en kri
| Bij het plakken van het schema verschijnt geen tool onder Available Tools | Het JSON klopt niet: een komma of accolade te veel of te weinig. Plak het bestand `edurep-zoeken.openapi.json` opnieuw |
| Test geeft `Query Feature Unsupported` | Zoekwoorden zonder AND ertussen (stap 3, oranje kader) |
| Test geeft numberOfRecords 0 | Het zoekwoord komt niet voor, of `exact wikiwijsmaken` is verkeerd gespeld |
| SLO-test geeft een webpagina (`<html ...`) in plaats van JSON | De header Accept ontbreekt of staat niet op application/json (stap 8, punt 4 en 6) |
| SLO-test geeft 401 | De base64-regel klopt niet: ander mailadres dan bij de registratie, of een spatie te veel. Maak hem opnieuw (stap 8, punt 3) |
| De agent noemt bronnen die niet in de RESPONSE staan | Het model vult aan uit eigen geheugen. De regel "verzin geen bronnen" staat in de instructie; controleer de links altijd zelf |
| De agent maakt geen bestanden, alleen tekst | Het woord "sandbox" ontbreekt in punt 4 van de instructie, of het model is niet compatibel (handleiding 4, stap 2) |
| De leerlingversie laat stukken weg | De zin "Laat geen inhoud weg; vereenvoudig de vorm, niet de stof" ontbreekt |
@@ -383,7 +465,7 @@ De lesbrief is verzonnen en de zes behoeften zijn een voorbeeld. Dit hoofdstuk h
| Alleen Wikiwijs, of juist alle bronnen van Edurep | Stap 4, punt 5 (het stuk `AND meta.repository.id ...` weglaten) | makkelijk | Meer of minder zoekresultaten |
| Een score per UDL-principe in plaats van zeven losse punten | Stap 4, punt 3 | gemiddeld | Een rapport dat aansluit bij de UDL-taal van jullie school |
| Een vierde bestand: ouderbrief over de aangepaste versie | Stap 4, punt 4 | gemiddeld | Communicatie erbij, in dezelfde beurt |
| Kerndoelen en leerdoelen erbij (SLO) | Stap 3, tweede eigen tool op opendata.slo.nl (sleutel aanvragen) | gemiddeld | De agent zegt welke leerdoelen het materiaal dekt en wat ontbreekt |
| Alleen eindtermen uit SLO, of niveau en vak per doel | Stap 8, punt 6 van de prompt of een tweede pad in het schema | gemiddeld | Een rapport dat past bij bovenbouw en examenprogramma |
| De agent als stap in een workflow | Toegangspunt → Workflowtoegang; of de agent aanroepen vanuit een Chatflow | moeilijk | Een intake-formulier vooraf en een vaste opmaak achteraf |
| Koppeling met de ELO of het leerlingvolgsysteem via MCP | Stap 2, tabblad MCP, in de SOML-omgeving | moeilijk | Materiaal rechtstreeks uit en naar de plek waar het gebruikt wordt |
@@ -391,7 +473,7 @@ De lesbrief is verzonnen en de zes behoeften zijn een voorbeeld. Dit hoofdstuk h
1. **Zoek de fout.** Laat de agent jouw eigen lesbrief beoordelen en lees het rapport kritisch: welke score klopt niet? Pas de zin bij dat punt in de instructie aan tot het rapport klopt. Zo leer je dat de zeven punten van jou zijn, niet van het model.
2. **Controleer de bronnen.** Open de vijf Wikiwijs-links die de agent gaf en beoordeel ze zelf op niveau en bruikbaarheid. Hoeveel had je zelf gekozen? Schrijf in de instructie erbij wat een bron voor jou bruikbaar maakt.
3. **Maak een tweede tool.** Beschrijf een andere openbare API in een schema (de KNMI, het CBS, een woordenboek) en voeg hem toe. Laat de agent hem gebruiken en kijk bij REQUEST en RESPONSE wat er heen en weer gaat. Daarna begrijp je elke tool die je ooit tegenkomt.
3. **Maak een derde tool.** Beschrijf een andere openbare API in een schema (de KNMI, het CBS, een woordenboek) en voeg hem toe. Laat de agent hem gebruiken en kijk bij REQUEST en RESPONSE wat er heen en weer gaat. Daarna begrijp je elke tool die je ooit tegenkomt.
**Checklist voordat je eigen materiaal gebruikt**
@@ -412,6 +494,6 @@ De lesbrief is verzonnen en de zes behoeften zijn een voorbeeld. Dit hoofdstuk h
**De eigen tool.** Edurep is een openbare dienst van Kennisnet zonder sleutel. Verandert de zoekingang, dan faalt de tool; je merkt dat aan een RESPONSE met een foutmelding in plaats van XML. Het schema in `edurep-zoeken.openapi.json` is dan het enige wat je hoeft aan te passen. Meer over de zoektaal: developers.wiki.kennisnet.nl (Edurep).
**Kerndoelen erbij.** SLO stelt kerndoelen, leerdoelen en examenprogramma's open via opendata.slo.nl, met een gratis sleutel. Daarmee kan de agent bij elke lesbrief zeggen welke doelen hij dekt. Dat is de tweede eigen tool uit Maak hem van jou; het schema volgt hetzelfde patroon als dat van Edurep, met een sleutel in het veld Authorization.
**De SLO-sleutel.** De sleutel staat in de tool, niet in de agent. Vervang je hem (nieuwe registratie), dan pas je alleen het veld Authorization van de tool aan. Exporteer je de agent (DSL), dan gaat de sleutel niet mee; in het andere account maakt de eigenaar de tool opnieuw met een eigen sleutel. De data van SLO is CC BY: noem SLO als bron als je de doelen in materiaal overneemt.
**Van prototype naar de Experimenteerruimte.** Via **Export DSL** gaat de agent als bestand mee; de eigen tool moet in het andere account opnieuw aangemaakt worden (Integraties → Swagger API as Tool, hetzelfde schema).
@@ -0,0 +1,48 @@
{
"openapi": "3.0.1",
"info": {
"title": "SLO leerdoelen",
"description": "Zoekt in de curriculumdatabase van SLO (opendata.slo.nl): kerndoelen, tussendoelen, eindtermen en vakbegrippen. Vraagt een gratis sleutel aan op opendata.slo.nl; die gaat als Basic-authenticatie (e-mail:sleutel) mee in de header Authorization.",
"version": "1.0.0"
},
"servers": [
{
"url": "https://opendata.slo.nl"
}
],
"paths": {
"/curriculum/2026/api/v1/search": {
"get": {
"operationId": "zoekLeerdoelen",
"summary": "Zoek kerndoelen, tussendoelen, eindtermen en vakbegrippen bij een onderwerp",
"description": "Zoekt op tekst in de curriculumdatabase van SLO. Gebruik één of twee kernbegrippen (bijvoorbeeld: voedselweb). Het antwoord is een JSON-lijst; per item staan @type (Doel, Kerndoel, SyllabusSpecifiekeEindterm, LdkVakbegrip), title (de formulering van het doel) en bron (bijvoorbeeld Tussendoel).",
"parameters": [
{
"name": "text",
"in": "query",
"required": true,
"description": "Zoekwoord of korte zoekterm, bijvoorbeeld: voedselweb",
"schema": {
"type": "string"
}
},
{
"name": "Accept",
"in": "header",
"required": true,
"description": "Altijd application/json, anders stuurt SLO een webpagina terug",
"schema": {
"type": "string",
"default": "application/json"
}
}
],
"responses": {
"200": {
"description": "Lijst met doelen en begrippen als JSON"
}
}
}
}
}
}
+2 -2
View File
@@ -17,7 +17,7 @@ Eigenaar en contact: Guido van Dijk, guido@l-e-x.nl, guido@ai-netwerk-limburg.nl
| 03-schoolcommunicatie | Dify voor schoolcommunicatie: ouderbrief, schoolnieuws, balie | Teams communicatie | 36 pp. |
| 04-agent-console | Bouwen in de Agent Console: de Toetsweekplanner (agent met bestand, tool en sandbox) | Mentoren, Experimenteerruimte | 27 pp. |
| 05-transcriptietool | Bouwen in Dify: van opname naar verslag | Secties, teams | 31 pp. |
| 06-inclusief-lesmateriaal | Bouwen in de Agent Console: de Lesmateriaal-check (UDL, eigen zoektool voor open leermateriaal) | Docenten, ondersteuningscoördinatoren | 27 pp. |
| 06-inclusief-lesmateriaal | Bouwen in de Agent Console: de Lesmateriaal-check (UDL, eigen tools voor open leermateriaal en SLO-leerdoelen) | Docenten, ondersteuningscoördinatoren | 31 pp. |
| 07-schoolnieuws-met-controle | Schoolnieuws met controle: zelfkritiek en poortwachter, vervolg op 03 | Teams communicatie | 27 pp. |
| 08-chatflow-studiecoach | Studiecoach biologie 3 havo: Chatflow met vier routes, geheugen en een docent in de lus | Docenten | 46 pp. |
| 00-workshop | Draaiboek van de workshop AI Agents met Dify (2 uur): programma, werkvormen, valkuilen per blok | Begeleiders | 8 pp. |
@@ -41,7 +41,7 @@ Elke handleiding bouwt één app. Dit is waar ze voor bedoeld zijn en wanneer je
| Schoolnieuws (03 en 07) | Maakt van één bericht drie versies: website, ouderapp en social; in 07 met een controleur en een poortwachter die afkeurt wat niet aan de regels voldoet | Communicatiemedewerkers | Workflow | Je wilt zien hoe een app zichzelf controleert voordat iets naar buiten gaat |
| Toetsweekplanner (04) | Maakt met een leerling een studieplan voor de toetsweek en levert Excel en agendabestand | Mentoren, leerlingen (na DPIA) | Agent Console | Je wilt zien wat een agent kan dat een workflow niet kan: zelf bepalen hoe, en bestanden maken |
| Transcriptietool (05) | Zet een opname van een overleg om in een verslag met besluiten en actiepunten | Secties, teams | Workflow met tool | Je wilt een bestand als invoer en een tool (spraak naar tekst) in een workflow |
| Lesmateriaal-check (06) | Beoordeelt lesmateriaal op toegankelijkheid (UDL), maakt versies voor docent en leerling en zoekt open leermateriaal op Wikiwijs | Docenten, ondersteuningscoördinatoren | Agent Console met eigen tool | Je wilt een eigen tool maken van een website met een API |
| Lesmateriaal-check (06) | Beoordeelt lesmateriaal op toegankelijkheid (UDL), maakt versies voor docent en leerling, zoekt open leermateriaal op Wikiwijs en koppelt aan SLO-leerdoelen | Docenten, ondersteuningscoördinatoren | Agent Console met twee eigen tools | Je wilt een eigen tool maken van een website met een API, met en zonder sleutel |
| Studiecoach biologie (08) | Helpt een leerling met uitleg, hints en planning bij ecologie; stuurt persoonlijke vragen door naar de docent | Docenten, leerlingen (na DPIA) | Chatflow | Je wilt een gesprek met routes, geheugen en een mens in de lus |
De volgorde is ook een leerlijn: 01 en 02 in het eerste uur van de workshop, 03 en 07 als je een team wilt helpen, 05 en 08 als je een vak wilt bedienen, 04 en 06 als je wilt weten wat de Agent Console toevoegt.