Een AI-agent die echt doet wat hij moet.
De briefing.
Tweehonderd support-tickets per week. De meeste over facturatie: dubbele afschrijvingen, terugbetalingen, adreswijzigingen, het gebruikelijke werk. Het support-team verdronk, het model kostte al meer dan het opleverde, en demo-bare AI stond bruikbare AI in de weg.
De briefing: bouw de kleinste agent die op betrouwbare wijze één benoemde klasse tickets afhandelt, terugbetalingen, met een eval set die je aan de auditor kunt laten zien, observability die je aan de CFO kunt laten zien, en een handoff-pad dat de gebruiker respecteert.
A graph of five typed nodes.
Each node is its own function. Each transition is a typed contract. Failures route to a human, not the user. The whole thing fits on one page.
Wat we opleverden.
Een getypeerde LangGraph-agent met vijf knooppunten, drie tools, en een handoff-knooppunt dat weet wanneer hij níet moet handelen. Het model is klein waar het kan (classify op gpt-4o-mini) en groot alleen waar het moet (de resolve-stap). Elke transitie is een getypeerd contract. Een knooppunt retourneert een gestructureerd object, geen vrije tekst, zodat het volgende knooppunt precies weet wat het ziet.
Het hele ding past op één pagina code. We laten het zien.
A test suite for prompts.
Every change runs the eval set in CI. Regressions don't ship. The pass rate is the only metric we actually trust.
We kunnen nu eindelijk naar de agent wijzen in een bestuursvergadering en de cijfers laten zien.
— Engineering lead, EU klant
Ninety days, seven shipped versions.
- v1.0Day 1First shipped prompt. 71% pass.—
- v1.1Day 6Added Dutch + EN templates for tone.+9.0%
- v1.2Day 14Re-rank with reciprocal rank fusion.+5.4%
- v1.3Day 22Lowered hand-off threshold to 0.78.+2.1%
- v2.0Day 41Switched classify to typed function-calls.+4.8%
- v2.1Day 67Cached fetch_order for hot SKUs.p95 → 1.9s
- v2.2Day 90Added cost ceiling alerter (Slack #ops).ops
Most of the cost is in resolve.
Six steps. One of them does most of the thinking. Classify and check_policy stay cheap on purpose. We want the heavy model to only see context it needs.
- classify18%small model · gpt-4o-mini
- fetch_context12%vector search + RAG
- check_policy9%function call · no llm
- resolve47%drafting · main model
- handoff6%summary for human
- audit_log8%tags · cost · trace
Het resultaat.
Tweehonderd tickets per week, nul hallucinaties in negentig dagen. De mediaan-oplostijd op refund-tickets ging van elf minuten (menselijk) naar elf seconden (agent + audit). Het support-team handelt weer de gesprekken af die ook echt een mens nodig hebben.
Het belangrijkste: de eval set is het contract. Elke prompt-wijziging is een PR met een CI-run. Regressies komen niet in productie. Het team heeft een echt, meetbaar artefact om naar te wijzen wanneer de vraag opduikt: “werkt de AI eigenlijk?” Het antwoord staat op het dashboard.
