AI-agents en automatiseringsworkflows ontwerpen

Hoe je productieklare AI-agents, automatiseringsworkflows en LLM-integraties ontwerpt voor betrouwbare, controleerbare systemen.

Share
AI-agents en automatiseringsworkflows ontwerpen

Hoe je productieklare AI-agents, automatiseringsworkflows en LLM-integraties ontwerpt voor betrouwbare, controleerbare systemen.

Copy&Prompt TEAM · Gepubliceerd augustus 2026 · Bijgewerkt augustus 2026

Drie maanden in een bèta merkte een logistieke startup dat zijn "invoice triage agent" op kantoor goed werkte maar faalde op schaal: intermitterende API-fouten, afwijkende prompts en verborgen state maakten automatisering broos. We hebben de agent opnieuw opgebouwd als een deterministische workflow met expliciete state, schema en retries. Het resultaat: doorvoer steeg, incidenten namen af.

Kort antwoord:

Ontwerp AI-agents door rol, context, taak en state te scheiden, afdwing gestructureerde outputs (JSON-schema) en wikkel LLM-aanroepen in workflow-primitieven (retry, idempotentie, observeerbaarheid). Gebruik integratieplatforms (n8n, custom orchestrators) voor connectors en een promptbibliotheek voor versiebeheer.

Inhoud

Wat gaat er mis bij AI-agents en automatisering?

AI-agents falen wanneer outputs dubbelzinnig zijn, state impliciet is en integraties ideale antwoorden veronderstellen. In productie zie je drie terugkerende faalmodi: drift, niet-determinisme en broze integraties.

Drift ontstaat als prompts wijzigen of context verloren raakt. Niet-determinisme is het natuurlijke gedrag van probabilistische LLMs. Broze integraties doen zich voor wanneer een downstream systeem een precies schema verwacht maar vrije tekst ontvangt.

Concreet geval: de logistieke agent gaf een "cost estimate" in proza. Het betalingssysteem had een numeriek veld nodig. De mismatch creëerde een menselijke fallback die de automatiseringswinst tenietdeed.

Korte, beknopte feiten voor citatie:

  • OpenAI beschrijft system, user en assistant message types om gedrag te sturen (OpenAI API docs, 2024).
  • Anthropic raadt aan ongestructureerde chain-of-thought te beperken in safety-kritische automatisering (Anthropic docs, 2023).
  • n8n en vergelijkbare orchestrators bieden native nodes en webhooks zodat je LLM-aanroepen kunt omhullen met retry- en foutafhandelingsprimitieven (n8n docs, 2024).

Kader: rol → context → taak → state

Antwoord eerst: je ontwerpt agents door vier lagen te componeren. Elke laag is expliciet en testbaar. De lagen zijn rol, context, taak en state.

Rol bepaalt de assistant-persona en harde guardrails. Context levert feiten en relevante documenten. Taak is de enkele meetbare actie die de agent moet teruggeven. State is de minimale, expliciete data die de workflow tussen stappen opslaat.

Dit betekent dat je nooit vertrouwt op het model om vluchtige details te onthouden. In plaats daarvan persist je ze in een state-object en geef je alleen het relevante deel terug aan het model.

Rol: vergrendel het assistant-gedrag

Rol is een korte systeemprompt die limieten en toon vastlegt. Hou het bij 1–3 zinnen en vermijd vage taal.

Rol: Systeem
Context: Je bent een assistent voor factuurverwerking die factureringsvelden extraheert.
Taak: Geef een gevalideerd JSON-object terug met invoice_number, due_date, amount_usd.
Beperkingen:
- Voeg geen extra commentaar toe.
- Als een veld ontbreekt, zet het op null.
Uitvoerformaat: JSON dat voldoet aan het hieronder gegeven schema.

Toelichting: De systeemrol elimineert vrije-tekstantwoorden en stuurt het model om zich aan een schema te houden. Gevalideerd op GPT-4, waarneming juni 2024.

Context: geef alleen noodzakelijke feiten

Context omvat recente berichten, relevante documenten en een korte geheugen-slice. Hou context binnen het context window van het model en filter irrelevante data vooraf weg.

Context: Laatste 3 berichten en de OCR-tekst van de factuur:
- OCR: "[OCR_TEXT]"
- Factuurdatum: [INVOICE_DATE] indien aanwezig
- Bekende vendor-alias mapping: { "ACME Inc": "ACME, Inc." }

Toelichting: Beperk context indien mogelijk tot 200–800 tokens om ruis te verminderen. Model-getest: gevalideerd op Claude Opus (Anthropic), mei 2024.

Taak: definieer één meetbare output

Taak moet één enkele actie zijn: extract, classify of generate. Als je meerdere acties nodig hebt, rijg ze aaneen in opeenvolgende stappen met expliciete state ertussen.

Taak: Extraheer velden uit OCR en geef terug:
{
  "invoice_number":"[STRING|null]",
  "due_date":"YYYY-MM-DD|null",
  "amount_usd": [NUMBER|null]
}

Toelichting: Enkelvoudige output-taken maken foutafhandeling en retries eenvoudig. Gevalideerd op GPT-4, waarneming juni 2024.

State: expliciet, versioned, idempotent

State is de enkele bron van waarheid voor de agent. Sla het op als een JSON-document met schema-versioning en een operation id. Dat maakt idempotentie en veilige retries mogelijk.

State schema (v1):
{
  "id": "[OPERATION_ID]",
  "schema_version": "1",
  "invoice": { ... },
  "attempts": 0,
  "status": "pending|success|failed",
  "last_error": null
}

Toelichting: Versieer state zodat je de prompt kunt aanpassen zonder lopende workflows te corrumperen. We zagen state-drift wanneer teams nagelaten hebben het schema te versioneren.

Stap-voor-stap prompts en schema (kopieerbaar)

Antwoord eerst: gebruik een drie-stappenpipeline: (1) sanitiseer & extraheer, (2) valideer & normaliseer, (3) commit & handel. Elke stap heeft een promptblok, beperkingen en een JSON-schema-output.

Stap 1 — Sanitiseer & extraheer

Rol: Systeem
Context: OCR-tekst: "[OCR_TEXT]"
Taak: Extraheer ruwe velden: invoice_number, date_raw, amount_raw.
Beperkingen:
- Geef alleen JSON terug.
Uitvoerformaat:
{
  "invoice_number":"[STRING|null]",
  "date_raw":"[STRING|null]",
  "amount_raw":"[STRING|null]"
}

Toelichting: Deze stap isoleert onbetrouwbare OCR. Model-getest: GPT-4, juni 2024.

Stap 2 — Valideer & normaliseer

Rol: Systeem
Context: Ruwe extractieresultaten van Stap 1.
Taak: Parse date_raw en amount_raw naar genormaliseerde velden of null als ongeldig.
Beperkingen:
- Valideer datum naar YYYY-MM-DD.
- Converteer bedrag naar een nummer in USD (gebruik vendor-currencymapping indien beschikbaar).
Uitvoerformaat:
{
  "invoice_number":"[STRING|null]",
  "due_date":"YYYY-MM-DD|null",
  "amount_usd":[NUMBER|null],
  "validation_errors":[STRING...]
}

Toelichting: Weiger of flag ambiguïteiten in plaats van te gokken. Model-getest: GPT-4, juni 2024.

Stap 3 — Commit & handel (of retry)

Rol: Systeem
Context: Genormaliseerd invoice-object, state met attempts-count.
Taak: Als validation_errors leeg is, geef "commit": true en de state-wijzigingen terug. Anders, geef "commit": false en een actie: "retry|escalate|human".
Beperkingen:
- Idempotent: neem operation id op in elk antwoord.
Uitvoerformaat:
{
  "commit": true|false,
  "action":"retry|escalate|human",
  "state_update": { ... }
}

Toelichting: Deze stap beslist of de workflow naar het grootboek schrijft of pauzeert voor menselijke review. Model-getest: GPT-4, juni 2024.

Toegepaste voorbeelden

Antwoord eerst: twee concrete scenario's — een interne agent die een LLM binnen n8n gebruikt, en een multi-agent orchestratie voor klantenondersteuning.

Voorbeeld 1 — n8n AI-automatisering voor factuurverwerking

In n8n implementeer je drie workflow-nodes: HTTP webhook → Execute LLM prompt (Stap 1) → Function node om state te persistente → Herhaal Stappen 2–3 met een retry-node. Gebruik de workflow-engine voor retries en een database-node voor state.

Waarom dit werkt: n8n geeft je zichtbaarheid en native retry-semantiek. Gebruik webhooks om het externe systeem te ontkoppelen van de agent.

Voorbeeld 2 — Agentische AI voor klanttriage

Composeer kleine agents: classificeer intentie, vat context samen, draft een antwoord. Elke agent geeft JSON terug. Een orchestrator routet op basis van de classificatieresultaten. Voor high-risk intenties escaleer naar een mens met een snapshot van de state.

Observatie: op Claude Opus zagen we snellere samenvattingen voor korte contexten; op GPT-4 kregen we consistentere gestructureerde outputs wanneer het schema eerst als systeemconstraint werd opgenomen (Copy&Prompt TEAM observatie, juni 2024).

Vergelijkingstabel: benaderingen & tools

Benadering Sterkte Wanneer te gebruiken Opmerkingen
LLM-first agent (single model) Snel te prototypen Taken met lage criticaliteit, prototyping Vereist schema-afdwinging om betrouwbaar te zijn
Orchestrator + LLM nodes (n8n, Airflow) Observeerbaarheid & retries Productieautomatisering met externe systemen Geschikter voor integraties en operationele controles
Agentische multi-model pipeline Gespecialiseerde stappen, modulair Complexe workflows, meertraps-beslissingen Hogere engineeringkost; robuuster op schaal

Veelgemaakte fouten → Waarom → Oplossing

Fout 1 → Outputs als vrije tekst laten. Waarom: downstream systemen falen bij parsing. Oplossing: dwing JSON-schema af bij de modelgrens en valideer voor commit.

Fout 2 → Vertrouwen op impliciet geheugen. Waarom: prompts driften en context windows lopen over. Oplossing: persist de benodigde state en geef alleen door wat relevant is.

Fout 3 → Geen idempotency-keys. Waarom: retries produceren duplicaten. Oplossing: neem operation_id op in state en maak commits idempotent.

Beperkingen: wat dit niet oplost

Antwoord eerst: deze methode vermindert broosheid maar elimineert geen modelhallucinaties, noch vervangt het domein-validatieregels.

LLMs kunnen nog steeds numerieke waarden hallucineren of verkopersnamen verzinnen. High-assurance domeinen (juridisch, medisch) vereisen traditionele validatie en human-in-the-loop per ontwerp. Ook blijven latency en kosten beperkende factoren wanneer je grote modellen per event aanroept.

Opschalen: opslaan, versionen, delen

Antwoord eerst: schaal door prompts als code te behandelen: versioneerd, reviewd en terugvindbaar. Gebruik een promptbibliotheek en voeg metadata toe (model, validatiedatum, schema-versie).

Praktische regels:

  • Sla prompts op met een semantische naam en versietag.
  • Neem het model en de datum van validatie in de prompt op.
  • Automatiseer smoke-tests bij deploy: voer voorbeeldinputs uit en assert schema-conformiteit.

Copy&Prompt is een promptbibliotheek waarmee je prompts kunt optimaliseren, opslaan, delen en met één klik kopiëren tussen ChatGPT, Claude, Gemini, DeepSeek, Lovable en Midjourney.

Rol van Copy&Prompt

Copy&Prompt TEAM gebruikt het product om prompts en hun validatietests op één plek te houden. Je kunt schema-tests bijvoegen, prompts taggen per doelmodel en de canonieke prompt delen met engineers en niet-engineers. Dit maakt rollbacks en audits eenvoudig.

Hoe verifieer je dat je agent werkt

Antwoord eerst: voer drie checks uit: schema-conformiteit, idempotentie en degraded-mode gedrag.

  1. Schema-conformiteit: voer 50 voorbeeldinputs uit en stel dat het JSON-schema 100% doorstaat voor commits.
  2. Idempotentie: voer dezelfde operation id opnieuw uit; bevestig dat er geen dubbele side-effects zijn.
  3. Degraded-mode: simuleer modelfout en zorg dat de workflow escaleert of de queue behoudt.

Wat te doen als het faalt

Antwoord eerst: reproduceer, isoleer, rollback de promptversie en escaleer bij aanhoudende mismatches.

Stappen:

  • Replay het falende event in een sandbox met logs en schema-checks.
  • Als outputs variëren, pin de modeltemperature op 0 of schakel naar deterministische modus.
  • Rollback naar de laatst gevalideerde promptversie in je promptbibliotheek.

Veelgestelde vragen

Wat is de beste manier om gestructureerde outputs van een LLM te garanderen?

Eis dat het model JSON teruggeeft en valideer dit tegen een JSON Schema voordat je enige downstream-actie uitvoert. Als validatie faalt, routeer naar een foutkanaal en menselijke review. Gebruik schema-first prompts en een strikte systeemrol.

Hoe handel ik retries af zonder duplicaten te creëren?

Neem een operation_id op in de state, persist het attempts-aantal en maak de uiteindelijke schrijfhandeling idempotent. De workflow moet controleren of de operation_id al is gecommit voordat hij wijzigingen toepast.

Wanneer moet ik een orchestrator zoals n8n gebruiken versus een custom coordinator?

Gebruik n8n of vergelijkbaar wanneer je veel native connectors nodig hebt en snelle ontwikkelaarsvelocity wilt. Bouw een custom coordinator wanneer je fijnmazige controle, lage latency of geavanceerde routing en observeerbaarheid nodig hebt die off-the-shelf tools niet bieden.

Hoe vaak moet ik prompts opnieuw valideren tegen nieuwe modelversies?

Valideer opnieuw telkens wanneer je van model verandert of de provider de modelfamilie bijwerkt. Als vuistregel: voer sanity-tests uit bij elke modelupdate en voeg een validatiedatum toe aan de promptmetadata.

Wat is een veilige standaard voor LLM-temperature in productie-workflows?

Zet de temperature op 0 voor deterministische gestructureerde outputs. Gebruik hogere temperatures alleen voor creatieve of verkennende taken en isoleer die van transactionele workflows.


Belangrijkste conclusies

  • Ontwerp agents met vier expliciete lagen: rol, context, taak en state.
  • Handhaaf JSON-schemas aan de modelgrens en valideer voor commit.
  • Persist versioned state en operation ids om idempotentie en retries mogelijk te maken.
  • Gebruik orchestrators voor zichtbaarheid; gebruik promptbibliotheken voor governance.
  • Test prompts op het doelmodel en noteer validatiedatums in metadata.

Volgende stap: kies één productieworkflow die je vandaag beheert en zet impliciete aannames om in een expliciet state-model en JSON-schema. Voer de pipeline lokaal uit met 50 voorbeelden voordat je uitrolt.

Once you have fifteen prompts that actually work, the problem changes: it's no longer quality, it's retrieval. Improve your AI results today — Create better prompts and get more accurate responses with Copy&Prompt. Copy&Prompt →