Uitleg

Hoe werkt de assistent?

De assistent verzint geen kennis: elk antwoord wordt opgebouwd uit de artikels van de beschikbare bronnen. Deze pagina toont schematisch hoe een vraag verwerkt wordt en hoe de prompt naar het AI-model eruitziet. Alles wat hieronder gemarkeerd is, kan je aanpassen via Instellingen.

Van vraag naar antwoord

💬 De zorgverlener stelt een vraag
Is het een meta-vraag over de bronnen zelf? Herkend via triggerwoorden zoals "welke onderwerpen" of "hoeveel artikels".
ja →
📚 De catalogus (alle titels per categorie, met aantallen) gaat als context naar het AI-model, dat er bv. onderwerpen uit opsomt of artikels telt.
nee ↓
🔎 Zoeken in de fragmentindex ( fragmenten): BM25-score per fragment, met extra gewicht voor titelwoorden en herkenning van woordverbuigingen. Levert een vervolgvraag ("en bij het zorgtraject?") niets op, dan wordt automatisch opnieuw gezocht met de vorige vraag erbij.
Scoort minstens één fragment boven de drempel? Drempel: · maximaal fragmenten gaan mee.
nee →
🛑 Weigering zonder AI: de vaste weigertekst wordt teruggegeven, samen met de dichtstbijzijnde artikels en een doorverwijzing naar een medewerker. Zonder relevante context kan het model alleen maar verzinnen — dus wordt het niet aangeroepen.
ja ↓
📝 Prompt opbouwen: systeemprompt met de regels + de laatste chatberichten uit het gesprek (voor vervolgvragen) + de genummerde fragmenten + de letterlijke vraag (zie schema hieronder).
🤖 Het AI-model () schrijft het antwoord, uitsluitend op basis van de fragmenten, met een [n]-verwijzing per bewering. Het antwoord streamt woord voor woord naar het scherm. Staat het antwoord niet in de fragmenten, dan moet het model weigeren.
Controle achteraf (in code, niet in de prompt): verwijzingen naar onbestaande fragmenten worden geschrapt en alleen effectief geciteerde artikels worden als bron getoond. Inline tekstlinks naar artikels mogen alleen via het fragmentnummer; elke andere link (bv. een externe URL) wordt tot gewone tekst afgevlakt — het model kan dus nooit zelf een URL verzinnen.
📄 Antwoord met klikbare citaties, bronkaartjes in de kantlijn, disclaimer en debuginfo.

De prompt die naar het AI-model gaat

Dit is geen voorbeeld maar de actuele configuratie: wijzig je iets op de instellingenpagina, dan verandert het hieronder mee. De gekleurde {plaatshouders} worden per vraag ingevuld.

1 · Systeemprompt de vaste rol en guardrails — het model mag hier niet van afwijken
2 · Gebruikersbericht per vraag opnieuw opgebouwd uit het vraagsjabloon
{context} → de gevonden fragmenten, genummerd als [1] Titel (categorie) gevolgd door de tekst {question} → de letterlijke vraag van de zorgverlener {noAnswer} → de ingestelde weigertekst

Modelinstellingen:

Tussen de systeemprompt en het gebruikersbericht staan ook de laatste chatberichten uit het lopende gesprek (zonder hun oude [n]-verwijzingen), zodat het model vervolgvragen kan plaatsen. Bij een meta-vraag wordt dezelfde structuur gebruikt, maar dan met de aparte meta-systeemprompt en de artikelcatalogus als context in plaats van fragmenten.

Waarom dit betrouwbaar is

Volgende stap: semantisch zoeken met embeddings

Nog niet gebouwd — dit beschrijft de logische volgende stap na deze proof of concept.

Het zoeken werkt nu lexicaal (BM25): een fragment scoort alleen als er letterlijk dezelfde woorden in staan als in de vraag. De prefix-matching vangt verbuigingen op ("aanrekenen" vindt ook "aangerekend"), maar géén synoniemen of omschrijvingen:

De oplossing is semantisch zoeken met embeddings: elk fragment en elke vraag wordt door een embeddings-model (bv. via dezelfde OpenAI API die de antwoorden al schrijft) omgezet in een reeks getallen die de betekenis weergeeft. Fragmenten waarvan de betekenis dicht bij de vraag ligt, scoren dan hoog — ook zonder één gedeeld woord. In de praktijk combineer je beide (hybride retrieval): BM25 blijft sterk voor exacte termen zoals nomenclatuurnummers en bedragen, embeddings vangen synoniemen en omschrijvingen op. Beide scores worden samengevoegd tot één ranglijst.

Voor de rest van de pijplijn verandert er niets: dezelfde drempel, dezelfde prompt, dezelfde guardrails en dezelfde evaluatieset — die meteen meetbaar maakt hoeveel beter het zoeken wordt. De fragmentembeddings worden eenmalig berekend bij het opbouwen van de index (verwaarloosbare kost bij 100-150 artikels); per vraag komt er één snelle, goedkope embeddings-aanroep bij.