Hallucinaties beperken met context-grounding
Wat je met de prompt wel en niet kunt oplossen
Het ontstaan van onjuiste of verzonnen beweringen in taalmodellen, ook wel hallucinaties genoemd, kent verschillende oorzaken. Voor ontwikkelaars en prompt-engineers is het cruciaal om onderscheid te maken tussen twee typen hallucinaties: parametrische fouten en contextuele ontsporingen. Om te begrijpen waarom dit onderscheid fundamenteel is, verwijzen we naar de theoretische analyse over hallucinaties begrijpen.
Parametrische hallucinaties ontstaan wanneer een taalmodel te rade gaat in zijn interne gewichten (het geheugen opgebouwd tijdens pre-training) en daar verouderde, onvolledige of verdraaide feiten feilbaar combineert. Wanneer je een model vraagt om algemene kennis op te halen zonder dat je brontekst meestuurt, kun je dit gedrag via prompts hooguit indirect beïnvloeden. Je vraagt het model immers om te putten uit een probabilistische opslag van patronen.
Contextuele hallucinaties ontstaan daarentegen in situaties waarin je een model expliciet voorziet van documenten, data of snippets om een vraag te beantwoorden. Als het model in de gegenereerde tekst uitspraken doet die niet aantoonbaar in de meegegeven context staan, is er sprake van een prompt- en groundingprobleem. Dit type hallucinatie kun je wel degelijk direct aanpakken door middel van gestructureerde prompt-engineering en context-grounding.
Context-grounding is het proces waarbij het model strikt verankerd wordt in de meegegeven bronnen. Het doel is om het parametrische geheugen van het model uit te schakelen voor feitelijke beweringen en het model uitsluitend te laten fungeren als een verwerker, redacteur en formuleerder van de meegegeven context.
Het basispatroon voor grounded prompts
Het fundamentele patroon van een grounded prompt berust op een duidelijke scheiding van rollen en grenzen. Een standaard grounded prompt bestaat uit drie basiscomponenten: de systeeminstructie met gedragsregels, de expliciet afgebakende broncontext, en de vraag van de gebruiker.
In het basispatroon instrueer je het model dat de meegegeven bronnen de enige toegestane bron van waarheid vormen. De instructie forceert het model om elke aanname die buiten de verstrekte tekst valt te negeren. Dit voorkomt dat het model logische gaten opvult met aannames uit zijn pre-training.
[SYSTEEMINSTRUCTIE]
Je bent een feitelijke assistent. Beantwoord de vraag van de gebruiker UITSLUITEND op basis van de onderstaande brondocumenten.
Gebruik geen externe kennis of aannames die niet expliciet in de brontekst worden genoemd.
[BRONDOCUMENTEN]
--- BRON 1 ---
De maximale verwerkingstijd voor aanvragen bedraagt vijf werkdagen.
--- BRON 2 ---
Spoedaanvragen worden binnen 24 uur verwerkt, mits ingediend voor 12:00 uur.
[GEBRUIKERSVRAAG]
Wat is de verwerkingstijd voor een standaardaanvraag?
Dit basispatroon dwingt een kader af, maar zonder aanvullende maatregelen is de kans groot dat het model bij twijfel alsnog gaat gokken. Het toevoegen van een expliciete uitweg is daarom een onmisbaar onderdeel van de instructie.
De uitweg: De belangrijkste zin in je prompt
Taalmodellen zijn via Reinforcement Learning from Human Feedback (RLHF) getraind om zo nuttig en behulpzaam mogelijk te antwoorden. Dit behaagzieke gedrag vormt de primaire drijfveer achter contextuele hallucinaties. Wanneer de meegegeven brontekst het antwoord op een vraag niet of slechts gedeeltelijk bevat, zal het model neigen naar extrapolatie: het gokt het meest waarschijnlijke antwoord om toch een reactie te kunnen geven.
De belangrijkste regel in een grounded prompt is daarom de expliciet voorgeschreven uitweg (ook wel de fallback clause of abstention instruction genoemd). Je moet het model expliciet toestemming geven om te zeggen dat het antwoord niet in de bronnen staat, én je moet voorschrijven hoe die weigering er precies uit moet zien.
Zonder uitweg: Het model ervaart de instructie als een opdracht die koste wat het kost uitgevoerd moet worden. Als de bron het antwoord niet bevat, is gokken de enige overgebleven optie.
Met uitweg: Het model krijgt een vastgelegde ontsnappingsroute. Het herkennen van een gebrek aan informatie wordt hiermee een correcte, goedgekeurde uitkomst.
Een effectieve formulering van deze uitweg luidt bijvoorbeeld:
Als de meegegeven brondocumenten onvoldoende informatie bevatten om de vraag volledig te beantwoorden, antwoord dan exact: "Op basis van de verstrekte bronnen kan deze vraag niet worden beantwoord." Vul geen ontbrekende informatie aan met eigen kennis.
Door deze zin toe te voegen, transformeert het beslisproces van het model. Het antwoord "Ik weet het niet op basis van de bronnen" krijgt een hogere waarschijnlijkheidswaarde dan een speculatief antwoord, omdat het model expliciet wordt beloond voor het herkennen van de grenzen van de context.
Bronafbakening en verplichte citaten
Om context-grounding af te dwingen en verifieerbaar te maken, moeten bronteksten op een gestructureerde en herkenbare manier worden gepresenteerd. Losse tekstbrokken die zonder duidelijke grenzen in de prompt worden geplaatst, vervagen voor het model de grens tussen instructie en data.
Het is verstandig om bronnen te voorzien van unieke identifiers (zoals [DOC-1], [DOC-2] of XML-tags <source id="1">) en het model te verplichten om bij elke feitelijke uitspraak te verwijzen naar het specifieke fragment. Een doeltreffende techniek om nauwkeurigheid te verhogen is het verplichten van directe citaten.
[INSTRUCTIE]
Beantwoord de vraag. Onderbouw elke feitelijke bewering in je antwoord met een direct citaat en de bijbehorende bron-ID. Formatteer je antwoord als volgt:
- Bewering [Bron ID]: "Exact geciteerde tekst"
[BRONNEN]
<doc id="A1">De garantieperiode op elektronica bedraagt 24 maanden vanaf de aankoopdatum.</doc>
<doc id="A2">Schade door waterschade valt buiten de standaard garantiedekking.</doc>
[VRAAG]
Geldt de garantie als de telefoon in het water is gevallen?
Waarom maakt verplicht citeren het gedrag meetbaar? Wanneer een model gedwongen wordt om eerst het exacte tekstfragment te kopiëren voordat het een conclusie trekt, treedt een vorm van Chain-of-Thought-redenering op. Het model verwerkt eerst de brondoorgronding in zijn output-tokens, wat de kans op misinterpretatie verkleint. Bovendien maakt dit het antwoord programmeerbaar controleerbaar.
De valkuil van schijncitaten en steekproeven
Het verplichten van bronverwijzingen biedt geen absolute garantie. Ontwikkelaars stuiten in de praktijk vaak op de valkuil van het 'schijncitaat' (of misattribution). Dit doet zich voor wanneer een taalmodel een letterlijk correct citaat uit de bron aanhaalt, maar daar een conclusie of bewering aan koppelt die niet door dat citaat wordt gedekt.
Een model kan bijvoorbeeld citeren: "Het pand is geopend van maandag tot en met vrijdag", om vervolgens te beweren: "Het pand is op feestdagen gesloten [DOC-1]". Het citaat klopt, maar de getrokken conclusie over feestdagen staat nergens in de bron. Het model gebruikt het citaat als een soort decoratie om een hallucineerde bewering van autoriteit te voorzien.
Om schijncitaten op te sporen en te voorkomen, is het noodzakelijk om regelmatig steekproeven uit te voeren op de gegenereerde antwoorden. Je kunt een geautomatiseerde controle of menselijke evaluatie inrichten die controleert op twee criteria:
- Is het aangehaalde citaat letterlijk aanwezig in de meegegeven brontekst? (Substring matching)
- Impliceert het aangehaalde citaat logischerwijs de bewering die erover wordt gedaan? (NLI - Natural Language Inference)
Indien bij een steekproef blijkt dat de bewering en het citaat uiteenlopen, is dat een indicatie dat de promptinstructie verstrakking behoeft, of dat de logische stap die van het model gevraagd wordt te groot is.
Structuur, volgorde en scheiding van instructies en bronnen
De manier waarop informatie in de prompt is geordend heeft grote invloed op de mate waarin het model zich aan de context houdt. Taalmodellen hebben de neiging om meer gewicht toe te kennen aan informatie die aan het begin of aan het einde van de prompt staat (de zogenaamde primacy en recency biases).
Een bewezen effectieve volgorde voor grounded prompts is:
- Systeemrol en strikte gedragsregels: Leg vast wat het model wel en niet mag doen, inclusief de uitweg.
- Contextuele data / Brondocumenten: Bied de bronnen gestructureerd en duidelijke afgebakend aan.
- Gebruikersvraag en finale instructie: Plaats de vraag van de gebruiker helemaal onderaan, gevolgd door een herhaling van het format.
Het duidelijk markeren van de gebruikersvraag voorkomt tevens dat het model de inhoud van de brontekst verwart met opdrachten. Wanneer brontekst ongestructureerd wordt ingevoerd, kan een kwaadwillende gebruiker of een onveilige brontekst proberen de regels van het model te omzeilen. Hoewel dit raakvlakken heeft met de beveiligingsaspecten uit onze handleiding over prompt-injection verdedigen, dient een heldere scheiding tussen instructies, bronnen en vragen hier ook een puur functioneel doel: het voorkomt dat het model brontekst gaat 'uitvoeren' in plaats van samenvatten of analyseren.
Omgaan met tegenstrijdige bronnen
In complexe toepassingen, zoals het doorzoeken van meerdere bedrijfsdocumenten of kennissystemen, komt het regelmatig voor dat bronnen elkaar tegenspreken. Denk aan een oud beleidsdocument uit 2022 en een recentere nota uit 2025 die verschillende vergoedingen vermelden.
Als een prompt geen specifieke instructie bevat voor tegenstrijdigheden, vertoont een LLM onvoorspelbaar gedrag. Het kiest willekeurig één van de twee bronnen, probeert een compromis te verzinnen dat in geen van beide bronnen staat, of raakt in de war en genereert een onamenhangend antwoord.
Je dient de prompt expliciet uit te rusten met een protocol voor tegenstrijdige informatie:
[INSTRUCTIE VOOR TEGENSTRIJDIGHEDEN]
Als de verstrekte bronnen elkaar tegenspreken op een punt dat nodig is om de vraag te beantwoorden:
1. Kies NIET zelf welke bron juist is.
2. Benoem expliciet de tegenstrijdigheid.
3. Citeer beide bronnen met hun respectievelijke identifiers.
Voorbeeld van een correct antwoord bij tegenstrijdigheid:
"De bronnen spreken elkaar tegen. Volgens [BRON-A] bedraagt de opzegtermijn één maand, terwijl [BRON-B] vermeldt dat de opzegtermijn twee maanden bedraagt."
Door het model te instrueren tegenstrijdigheden te rapporteren in plaats van op te lossen, voorkom je dat de AI een schijnzekerheid creëert die feitelijk onjuist is.
Contextomvang: Waarom minder vaak meer is
Een veelvoorkomende misvatting is dat het vergroten van het contextvenster (context window) automatisch leidt tot betere antwoorden. Het toevoegen van tientallen pagina's aan documenten in de hoop dat het model het juiste antwoord wel zal vinden, werkt in de praktijk vaak averechts.
Wanneer een prompt wordt overladen met irrelevant materiaal, treedt het effect op dat bekend staat als lost in the middle. Modellen verwerken informatie in de kern van een omvangrijke context minder nauwkeurig dan informatie aan het begin of het einde. Bovendien verhoogt ruis de kans op foutieve assimilatie: het model legt verbanden tussen ongerelateerde alinea's en hallucineert conclusies.
Voor een optimaal grounding-resultaat geldt: selecteer vooraf alleen de meest relevante passages. Het toepassen van een strakke filtering, zoals besproken in het artikel over context-management, is essentieel voor het behoud van de precisie. Als het nodig is om grote hoeveelheden documenten te verwerken, is het aan te raden om de teksten eerst te verdichten met specifieke prompts voor samenvatten voordat ze als context aan de definitieve grounding-prompt worden aangeboden.
Tweedelijns verificatie: De extra controlestap
Voor kritieke toepassingen — zoals medische, juridische of financiële assistenten — is een enkele promptaanroep vaak onvoldoende om een nul-tolerantieniveau voor hallucinaties te garanderen. In zulke situaties kan een tweedelijns verificatieproces (een verifier pipeline) worden ingezet.
Bij dit patroon genereert een eerste modelaanroep (de Generator) een antwoord op basis van de grounded prompt. Vervolgens wordt een tweede, onafhankelijke modelaanroep (de Verifier) uitgevoerd. De Verifier krijgt een hele specifieke taak: hij ontvangt uitsluitend de oorspronkelijke bronnen en het gegenereerde antwoord, en moet controleren of elke bewering feitelijk wordt gedekt.
[VERIFIER PROMPT]
Je bent een onafhankelijke auditor. Je taak is het valideren van een gegenereerd antwoord tegen de brontekst.
BRONTEKST:
{oorspronkelijke_bronnen}
GEDENEREERD ANTWOORD:
{antwoord_van_generator}
OPDRACHT:
Controleer elke bewering in het gegenereerde antwoord.
Geef als output 'GOEDGEKEURD' als alle bewering 100% gedekt zijn door de brontekst.
Als er ook maar één bewering staat die niet in de brontekst staat, geef dan 'AFGEKEURD' met een lijst van niet-onderbouwde beweringen.
Deze extra controlestap brengt uiteraard extra latency en API-kosten met zich mee. De afweging om een tweedelijns verificatie in te zetten hangt af van het risicoprofiel van de toepassing. Bij klantenservice-chatbots voor algemene vragen wegen de extra kosten vaak niet op tegen de baten. Bij geautomatiseerde contractanalyses of beleidsvergelijkingen is deze tweede check daarentegen een waardevolle investering om foutieve informatieontsluiting te voorkomen.
Meten of het werkt: Evaluatie op een vaste testverzameling
Prompt-engineering voor context-grounding is een iteratief proces. Een aanpassing in de instructies die hallucinaties in scenario A vermindert, kan onbedoeld leiden tot een toename van fouten in scenario B (bijvoorbeeld doordat het model te voorzichtig wordt en weigert vragen te beantwoorden die wel in de bron staan).
Om te bepalen of een promptwijziging daadwerkelijk effectief is, moet je meten op een vaste testverzameling (een evaluatiebenchmark). Deze verzameling dient uit drie typen testcases te bestaan:
- Direct beantwoordbare vragen: Vragen waarvan het antwoord letterlijk en ondubbelzinnig in de context staat.
- Onbeantwoordbare vragen: Vragen die gerelateerd lijken aan het onderwerp, maar waarvan de feiten bewust uit de context zijn weggelaten. Test of de uitweg correct wordt getriggerd.
- Misleidende / Tegenstrijdige vragen: Vragen die uitgaan van een foutieve veronderstelling of waarbij de bronnen elkaar tegenspreken.
De primaire metriek die je hierbij bijhoudt is de ungrounded claim ratio: het percentage gegenereerde antwoorden dat minstens één feitelijke claim bevat die niet door de verstrekte context wordt gedekt. Voor een diepere duik in het opzetten van deze meetmethodieken en kwaliteitscontroles kun je de artikelen raadplegen over hallucinaties meten en het opzetten van een gestructureerde rag-evaluatie.
Vergelijking van grounding-technieken
Onderstaande tabel geeft een overzicht van de verschillende grounding-technieken, hun mechanisme en de bijbehorende afwegingen bij implementatie.
| Techniek | Werkingsmechanisme | Voordeel | Aandachtspunt |
|---|---|---|---|
| Expliciete uitweg | Toestaan dat het model "onbekend" antwoordt bij ontbrekende bronnen. | Voorkomt dat het model gaten opvult door te gokken. | Model kan bij te strikte formulering te snel opgeven. |
| Verplicht citeren | Model verplichten bij elke claim het bronfragment te tonen. | Maakt het antwoord direct verifieerbaar en auditbaar. | Risico op schijncitaten die niet de claim dekken. |
| Conflict-protocol | Instructie om tegenstrijdige bronnen te benoemen. | Voorkomt willekeurige bronkeuze door de AI. | Vereist dat het model beide bronnen volledig analyseert. |
| Tweedelijns verificatie | Een tweede LLM-aanroep laat valideren of de context de claims dekt. | Maximale reductie van ongefundeerde claims. | Verhoogt verwerkingstijd en API-kosten aanzienlijk. |
Samenvattende richtlijnen voor ontwikkelaars
Het beperken van hallucinaties via context-grounding is een van de meest doeltreffende methoden om betrouwbare LLM-toepassingen te bouwen. Door de parametrische kennis van het model bewust af te bakenen, het model te voorzien van een expliciete uitweg bij ontbrekende informatie, bronnen strikt te structureren en het proces continu te evalueren op een vaste testset, breng je de verwerkingskwaliteit naar een beheersbaar en controleerbaar niveau.

