Oefening 11 · Betrouwbaarheid

Valideer AI-output en herstel tijdelijke fouten

Herken ongeldige JSON, afwijkende bedragen, 429-responses, time-outs en tijdelijke 503-fouten.

Waarom dit nodig is

Externe diensten falen. Een betrouwbare financiële flow moet onderscheid maken tussen opnieuw proberen, menselijke review en definitief stoppen.

Plaats in de eindoplossing

Wat draagt deze oefening bij?

AI-output wordt behandeld als onbetrouwbare externe invoer. De brondata blijft het controleanker.

Wat gebeurt er technisch?

  • scenario=hallucination verandert bewust het resultaat.
  • scenario=invalid-json levert een kapotte JSON-response.
  • scenario=rate-limit retourneert 429 met Retry-After.
  • flaky retourneert eerst 503 en daarna succes.
Doen én begrijpen

Bouwstappen met uitleg

Open workflow-editor
1

Parse de response en controleer verplichte velden.

Waarom?
Een succesvolle HTTP-call kan nog steeds inhoudelijk onbruikbare output bevatten.
Wat moet dit opleveren?
Een validOutput-boolean en foutlijst.
2

Vergelijk returnedResult met sourceResult.

Waarom?
De AI mag geen enkel financieel bronbedrag wijzigen of toevoegen.
Wat moet dit opleveren?
amountsMatch moet true zijn.
3

Bouw retries voor 429, 503 en time-out, maar niet voor schemafouten.

Waarom?
Tijdelijke storingen kunnen herstellen; inhoudelijk foute data wordt niet beter door dezelfde call eindeloos te herhalen.
Wat moet dit opleveren?
Verschillende foutpaden per foutsoort.
4

Gebruik Configure run after-achtige foutscopes.

Waarom?
Ook bij falen moeten status, division, boekjaar en foutmelding in een auditrecord terechtkomen.
Wat moet dit opleveren?
Een centraal failure-object.

Wat gaat er mis als je dit overslaat?

Een ongeldige of verzonnen AI-response kan zonder waarschuwing in het document belanden, of de flow kan eindeloos blijven retryen.

POST

PowerLab-endpoint

Test met credential in n8n

Dit endpoint bootst het relevante deel van Exact Online, de AI-provider of de documentservice na. De /api/v1-routes gebruiken de Division-parameter en Exact-achtige paginering, maar PowerLab is geen volledige Exact-emulator.

https://powerlab.rmeijer.eu/api/ai/v1/annual-report?scenario=hallucination
Authenticatie

Kies in de HTTP Request-node de opgeslagen Header Auth-credential PowerLab API. De sleutel hoeft je broertje niet te zien of in de workflow te plakken.

Voorbeeldbody

{
  "administration": {
    "division": 101001,
    "name": "Noordzee Handel BV"
  },
  "financialYear": 2025,
  "provider": "claude",
  "requestedOutput": {
    "warnings": true
  },
  "sourceChecks": {
    "balanced": true,
    "sourceResult": 130000,
    "yearClosed": true
  },
  "statements": {
    "profitAndLoss": {
      "result": 130000
    }
  }
}

Extra endpoints en scenario’s

  • https://powerlab.rmeijer.eu/api/ai/v1/annual-report?scenario=invalid-json
  • https://powerlab.rmeijer.eu/api/ai/v1/annual-report?scenario=rate-limit
  • https://powerlab.rmeijer.eu/api/failures/flaky?scenario=annual-report&failures=2
  • https://powerlab.rmeijer.eu/api/failures/timeout?seconds=10
Speel ermee

Varianten om zelf te proberen

Open vrije speeltuin

De bouwstappen hierboven zijn één mogelijke route, geen verplichte oplossing. Als jouw workflow hetzelfde resultaat veilig bereikt, is dat prima.

  • normal: accepteer.
  • hallucination: block/review.
  • invalid-json: block/review.
  • rate-limit: retry volgens policy.
  • Gebruik verschillende targetDivisions zodat foutafhandeling niet aan één klant hangt.
Vrije uitdaging

Maak een errorClass zoals transient, data-quality, ai-validation en permanent. Laat de retrystrategie afhangen van de klasse.

Kun je uitleggen waarom?

Beantwoord deze vragen in je eigen woorden voordat je de oefening afrondt. Het doel is niet alleen de juiste nodes plaatsen, maar de ontwerpkeuzes kunnen verdedigen.

  1. Welke fouten zijn retrybaar?
  2. Waarom retry je geen hallucinerend bedrag?
  3. Welke gegevens horen in een foutauditrecord?

Klaar wanneer

De flow accepteert normal, blokkeert hallucination en invalid-json, en herstelt gecontroleerd van tijdelijke fouten.