OpenAI zegt dat z'n nieuwste model minder liegt
OpenAI heeft gisteren aangekondigd dat GPT-5.5 Instant, hun nieuwe standaard model in ChatGPT, significant minder hallucineert dan z'n voorganger. Ze claimen meetbare verbeteringen op standaard benchmarks. Lees het volledige artikel op The Verge.
Niet onbelangrijk, want hallucinations zijn een van de grootste redenen waarom gebruikers AI-tools wantrouwen. En als jij een SaaS bouwt die AI-output toont aan jouw klanten, ben jij degene die opdraait voor een fout antwoord, niet het AI-bedrijf.
Wat betekent dit voor jouw project?
Als jouw SaaS ergens een AI-functie heeft, denk aan het samenvatten van documenten, genereren van tekst, of beantwoorden van vragen, dan is de kans groot dat je die output gewoon rechtstreeks aan de gebruiker doorgeeft. Dat is prima voor een MVP, maar op het moment dat je betalende klanten hebt wil je een vangnet.
Dit is het moment om een verificatie-stap in te bouwen. Niet omdat Claude of GPT per se onbetrouwbaar zijn, maar omdat het je product professioneler maakt en je beschermt tegen edge cases die je nu nog niet ziet aankomen.
Hoe pak je het aan met Claude Code?
We bouwen een simpele verificatie-laag: een tweede Claude-aanroep die de output van de eerste beoordeelt voordat jij het toont. Dit heet ook wel een "self-check" of "critic pattern". Twee Claude-calls in serie, waarbij de tweede de eerste bekritiseert.
Stap 1: Zet de basis op
Open Claude Code in je projectmap en leg eerst uit wat je wilt bouwen:
Ik heb een Next.js app met een API route op
/api/summarizedie een document samenvatting genereert met Claude. Ik wil een verificatie-stap toevoegen: na de eerste Claude-aanroep doe ik een tweede aanroep die controleert of de samenvatting feitelijk klopt en geen informatie verzint die niet in het originele document stond. Als de verificatie faalt, wil ik een fallback-response teruggeven aan de gebruiker. Maak dit in TypeScript.
Stap 2: Laat Claude Code de verificatie-functie bouwen
Nadat Claude Code de structuur heeft neergezet, vraag je expliciet om de critic-prompt:
Schrijf een aparte functie
verifySummary(originalText: string, summary: string)die een Claude-aanroep doet met een strikte system prompt. De system prompt moet Claude instrueren om als kritische redacteur te fungeren en alleen te antwoorden met een JSON object:{ "approved": boolean, "reason": string }. Approved is true als de samenvatting geen feiten bevat die niet in het originele document staan.
Je eindigt dan met iets als dit in je code:
async function verifySummary(
originalText: string,
summary: string
): Promise<{ approved: boolean; reason: string }> {
const response = await anthropic.messages.create({
model: "claude-opus-4-5",
max_tokens: 256,
system: `Je bent een kritische redacteur. Controleer of de samenvatting
exclusief informatie bevat die aantoonbaar aanwezig is in de originele tekst.
Antwoord ALLEEN met geldig JSON in dit formaat:
{"approved": boolean, "reason": string}`,
messages: [
{
role: "user",
content: `Originele tekst:\n${originalText}\n\nSamenvatting:\n${summary}`,
},
],
});
const raw = response.content[0].type === "text" ? response.content[0].text : "";
try {
return JSON.parse(raw);
} catch {
return { approved: false, reason: "Verificatie kon niet worden geparsed" };
}
}
Stap 3: Verwerk het resultaat in je API route
Vraag Claude Code nu om dit te integreren in je bestaande route:
Pas mijn
/api/summarizeroute aan zodat na het genereren van de samenvatting deverifySummaryfunctie wordt aangeroepen. Alsapprovedfalse is, stuur dan een 200 response terug met{ "summary": null, "warning": "De samenvatting kon niet worden geverifieerd. Controleer het originele document." }. Als approved true is, stuur je de normale samenvatting.
// In je API route handler
const summary = await generateSummary(documentText);
const verification = await verifySummary(documentText, summary);
if (!verification.approved) {
return Response.json({
summary: null,
warning: "De samenvatting kon niet worden geverifieerd. Controleer het originele document.",
});
}
return Response.json({ summary, warning: null });
Stap 4: Toon de warning netjes in de UI
Voeg in mijn React component dat de samenvatting toont een conditionele warning toe. Als de API
warningteruggeeft in plaats vansummary, toon dan een geel waarschuwingsblokje met de tekst. Gebruik Tailwind classes.
{data.warning && (
<div className="rounded-md bg-yellow-50 border border-yellow-200 p-4 text-sm text-yellow-800">
<strong>Let op:</strong> {data.warning}
</div>
)}
{data.summary && (
<div className="prose mt-4">{data.summary}</div>
)}
Wat te checken na afloop
Test je verificatie-laag met drie scenario's:
- Normale input: een kort document met een accurate samenvatting. De
approvedmoettruezijn. - Verzonnen informatie: pas tijdelijk je generate-prompt aan zodat hij iets toevoegt dat niet in het document staat. De verificatie moet dit vangen en
approved: falseteruggeven. - Edge case: een leeg document of een heel kort stukje tekst. Zorg dat je app niet crasht als de JSON-parse van de verificatie mislukt.
Als alle drie werken, heb je een solide basis. Je gebruikers zien nooit een gehallucineerde samenvatting zonder waarschuwing, en je logt intern waarom iets is afgewezen, handig voor debugging later.
Bij Eighty leer ik je Claude Code in het Nederlands gebruiken, van installatie tot een werkend SaaS-product. Wekelijks een nieuwe module, persoonlijke begeleiding.
