Het artikel pleit voor een preciezere terminologie bij het bespreken van AI-agentsystemen. De auteur stelt dat een agentsysteem bestaat uit drie afzonderlijke lagen:
- Het model: De wiskundige functie (bijv. Sonnet, GPT) die input-tokens omzet in output-tokens.
- De inferentieservice: De gehoste infrastructuur (bijv. AWS Bedrock, OpenAI) die het model draait en het gebruik beheert.
- De harness: De laag waarin de logica, UI en tools (zoals MCP) leven, die de input vormgeeft en de output interpreteert.
Door middel van een metafoor (de architect, het bureau en de bouwploeg) wordt uitgelegd hoe deze lagen samenwerken. Het belangrijkste doel van dit onderscheid is effectiever debuggen: door te bepalen in welke laag een probleem optreedt (bijv. trage inferentie bij de service of ontbrekende context bij de harness), kan een probleem sneller en gerichter worden opgelost.
Je agent is niet het model
Ik hoor vaak dat mensen de woorden 'agent' en 'model' door elkaar gebruiken, waarbij ze bijvoorbeeld naar Claude verwijzen als beide. Daarom dacht ik dat het nuttig zou zijn om een korte referentie te schrijven over de terminologie die we hier gebruiken, om ons te helpen preciezere gesprekken te voeren.
Laten we beginnen met een overzicht van de richting waarin we opgaan: het agentsysteem.
Het agentsysteem
Een agentsysteem bestaat uit verschillende lagen:
Het model In de kern bevindt zich een model. Denk aan Sonnet, Opus of Gemini. Deze zijn getraind op enorme hoeveelheden tekst en data en zijn in essentie grote collecties floating-point-getallen die op een specifieke manier met elkaar verbonden zijn.
De inferentieservice Frontier-modellen zijn computationeel veel te duur voor de meeste van ons om op volle schaal lokaal te draaien; ze vereisen veel meer RAM dan aanwezig is op de meeste lokale machines. Daarom hebben we een andere plek nodig om ze uit te voeren. Dat is de inferentieservice, zoals AWS Bedrock of de API van Anthropic. De inferentieservice ontvangt je API-aanvragen, voert deze in het model in en houdt ook de kosten bij.
De harness De service draait het model in een inference engine, maar dat is nog vrij basaal: tekst erin, tekst eruit. Denk aan hoe ChatGPT werkte toen het voor het eerst werd gelanceerd. De interactielaag, het onderdeel dat een prettige manier biedt om met de API te communiceren, wordt de harness genoemd. In zijn eenvoudigste vorm is dit gewoon een lichtgewicht wrapper. Andere voorbeelden van harnesses zijn Claude Desktop of de Claude CLI.
Hier wordt het interessant. Functies zoals MCP en Skills maken primair deel uit van de harness-laag. Het model weet inherent niets van een MCP-server of een Skill; de harness bepaalt welke context en tools er aan het model worden gepresenteerd.
Kortom: een agentsysteem is een harness (een set tools en logica voor het verwerken van inputs) die een inferentieservice aanroept, die op zijn beurt een model draait. Dat is de volledige stack.
Praktijkvoorbeelden
Hieronder zie je hoe de stack is opgebouwd voor enkele veelgebruikte tools:
| Agent-systeem | Harness (UI, logica, tooling) | Inferentieservice | Model |
| Claude Desktop | Claude Desktop (UI + MCP + lokale logica) | Inferentieservice van Anthropic | Sonnet / Opus / Haiku |
| Claude CLI | Claude CLI (tool parsing + file I/O) | Inferentieservice van Anthropic | Sonnet / Opus / Haiku |
| Cursor | Cursor editor (context assembly + tool routing) | Inferentielaag van Cursor (diverse providers) | Sonnet / GPT / Gemini / etc. |
| ChatGPT | ChatGPT UI (geschiedenis + orchestratie) | Inferentieservice van OpenAI | GPT-modellen |
| Custom agent (LangChain) | Jouw LangChain-code (prompt templates + tool definities) | Jouw gekozen provider (Bedrock, OpenAI, etc.) | Jouw gekozen model |
Let op het patroon: de harness is waar jouw logica leeft. De inferentieservice is de gehoste laag die het model draait. Het model is het wiskundige object dat tekst produceert. Hetzelfde model, bijvoorbeeld Sonnet, kan in meerdere agentsystemen worden gebruikt met volledig verschillende harnesses, en het zal zich anders gedragen omdat de harness de inputs vormgeeft en de outputs interpreteert.
Een metafoor
Stel dat we een huis bouwen. We hebben een bouwploeg op de locatie. Zij nemen een blauwdruk, bestellen materialen, beheren het materieel en bepalen de volgorde van de werkzaamheden. Zij zijn de enigen die daadwerkelijk de grond kunnen raken: beton storten, spijkers slaan, dat soort zaken.
Maar als er iets gebeurt waarbij hersenkracht nodig is, bellen ze een architect. Ze kunnen echter niet direct met de architect praten; ze moeten via het bureau dat hen beiden in dienst heeft. Het bureau regelt de planning en de facturatie. De architect is zeer specifiek: je geeft een briefing en krijgt papierplannen terug. Niets meer.
In deze metafoor is de bouwploeg de harness. Zij zijn het deel dat daadwerkelijk de buitenwereld kan aanraken en de plannen van de architect kan omzetten in acties. Het bureau is de inferentieservice: de gateway die de logistiek en de kosten beheert. En de architect is het model: puur, begrensd en briljant in zijn specifieke taak.
Wanneer je dus iets gebruikt als de Claude CLI, is de CLI de harness. Deze maakt gebruik van de inferentieservice van Anthropic, die hun modellen (Sonnet en Opus) draait. Een interessant gevolg hiervan is dat naarmate modellen slimmer worden, sommige huidige harness-logica (zoals Skills of MCP) minder nuttig kan worden. De manier waarop we nu harnesses bouwen, is mogelijk niet toekomstbestendig.
De kernpunten
Laten we expliciet zijn in onze termen:
- Model: De wiskundige functie die input-tokens transformeert naar output-tokens.
- Inferentieservice: De gehoste service die het model draait en het gebruik bijhoudt.
- Harness: De logica die inputs vormgeeft, outputs interpreteert en contact heeft met de buitenwereld.
- Agent-systeem: De combinatie van deze drie onderdelen.
Wanneer we zeggen "mijn model doet dit of dat", praten we meestal over wat de harness aan het orchestreren is. De modellen zelf zijn slechts ondoorgrondelijke wiskundige objecten die we kunnen aanroepen.
Dit onderscheid is cruciaal. Als er iets misgaat of als we zaken willen verbeteren, moeten we weten waar we moeten kijken. Geeft het model slechte antwoorden? Misschien heeft het betere context nodig van de harness. Is het te traag of te duur? Dat ligt waarschijnlijk aan de inferentieservice of de onderliggende rekenkracht. Worden tools niet correct gebruikt? Dan formateert de harness ze waarschijnlijk verkeerd of worden de antwoorden niet goed geparsed.
Als je de laag kunt benoemen, kun je de laag repareren. Dat is het hele punt van precisie; het gaat niet om pedanterie, maar om het vermogen om dingen sneller en effectiever te verbeteren.
Symptomen en waarschijnlijke oorzaak
| Symptoom | Waarschijnlijke laag |
| Slechte redenering / kennis | Model of context geleverd door harness |
| Ontbrekende context | Harness |
| Tool is niet beschikbaar | Harness / tool-integratie |
| Tool-aanroep is malformed | Harness of model |
| Tool voert actie onjuist uit | Tool / harness |
| Trage inferentie | Inferentie-infrastructuur |
| Hoge kosten | Modelkeuze / inferentieservice |
| Zelfde model gedraagt zich anders | Harness / context / tooling |
Je agent is niet het model
Ik hoor vaak dat mensen de woorden 'agent' en 'model' door elkaar gebruiken, waarbij ze bijvoorbeeld naar Claude verwijzen als beide. Daarom dacht ik dat het nuttig zou zijn om een korte referentie te schrijven over de terminologie die we hier gebruiken, om ons te helpen preciezere gesprekken te voeren.
Laten we beginnen met een overzicht van de richting waarin we opgaan: het agentsysteem.
Het agentsysteem
Een agentsysteem bestaat uit verschillende lagen:
Het model In de kern bevindt zich een model. Denk aan Sonnet, Opus of Gemini. Deze zijn getraind op enorme hoeveelheden tekst en data en zijn in essentie grote collecties floating-point-getallen die op een specifieke manier met elkaar verbonden zijn.
De inferentieservice Frontier-modellen zijn computationeel veel te duur voor de meeste van ons om op volle schaal lokaal te draaien; ze vereisen veel meer RAM dan aanwezig is op de meeste lokale machines. Daarom hebben we een andere plek nodig om ze uit te voeren. Dat is de inferentieservice, zoals AWS Bedrock of de API van Anthropic. De inferentieservice ontvangt je API-aanvragen, voert deze in het model in en houdt ook de kosten bij.
De harness De service draait het model in een inference engine, maar dat is nog vrij basaal: tekst erin, tekst eruit. Denk aan hoe ChatGPT werkte toen het voor het eerst werd gelanceerd. De interactielaag, het onderdeel dat een prettige manier biedt om met de API te communiceren, wordt de harness genoemd. In zijn eenvoudigste vorm is dit gewoon een lichtgewicht wrapper. Andere voorbeelden van harnesses zijn Claude Desktop of de Claude CLI.
Hier wordt het interessant. Functies zoals MCP en Skills maken primair deel uit van de harness-laag. Het model weet inherent niets van een MCP-server of een Skill; de harness bepaalt welke context en tools er aan het model worden gepresenteerd.
Kortom: een agentsysteem is een harness (een set tools en logica voor het verwerken van inputs) die een inferentieservice aanroept, die op zijn beurt een model draait. Dat is de volledige stack.
Praktijkvoorbeelden
Hieronder zie je hoe de stack is opgebouwd voor enkele veelgebruikte tools:
| Agent-systeem | Harness (UI, logica, tooling) | Inferentieservice | Model |
| Claude Desktop | Claude Desktop (UI + MCP + lokale logica) | Inferentieservice van Anthropic | Sonnet / Opus / Haiku |
| Claude CLI | Claude CLI (tool parsing + file I/O) | Inferentieservice van Anthropic | Sonnet / Opus / Haiku |
| Cursor | Cursor editor (context assembly + tool routing) | Inferentielaag van Cursor (diverse providers) | Sonnet / GPT / Gemini / etc. |
| ChatGPT | ChatGPT UI (geschiedenis + orchestratie) | Inferentieservice van OpenAI | GPT-modellen |
| Custom agent (LangChain) | Jouw LangChain-code (prompt templates + tool definities) | Jouw gekozen provider (Bedrock, OpenAI, etc.) | Jouw gekozen model |
Let op het patroon: de harness is waar jouw logica leeft. De inferentieservice is de gehoste laag die het model draait. Het model is het wiskundige object dat tekst produceert. Hetzelfde model, bijvoorbeeld Sonnet, kan in meerdere agentsystemen worden gebruikt met volledig verschillende harnesses, en het zal zich anders gedragen omdat de harness de inputs vormgeeft en de outputs interpreteert.
Een metafoor
Stel dat we een huis bouwen. We hebben een bouwploeg op de locatie. Zij nemen een blauwdruk, bestellen materialen, beheren het materieel en bepalen de volgorde van de werkzaamheden. Zij zijn de enigen die daadwerkelijk de grond kunnen raken: beton storten, spijkers slaan, dat soort zaken.
Maar als er iets gebeurt waarbij hersenkracht nodig is, bellen ze een architect. Ze kunnen echter niet direct met de architect praten; ze moeten via het bureau dat hen beiden in dienst heeft. Het bureau regelt de planning en de facturatie. De architect is zeer specifiek: je geeft een briefing en krijgt papierplannen terug. Niets meer.
In deze metafoor is de bouwploeg de harness. Zij zijn het deel dat daadwerkelijk de buitenwereld kan aanraken en de plannen van de architect kan omzetten in acties. Het bureau is de inferentieservice: de gateway die de logistiek en de kosten beheert. En de architect is het model: puur, begrensd en briljant in zijn specifieke taak.
Wanneer je dus iets gebruikt als de Claude CLI, is de CLI de harness. Deze maakt gebruik van de inferentieservice van Anthropic, die hun modellen (Sonnet en Opus) draait. Een interessant gevolg hiervan is dat naarmate modellen slimmer worden, sommige huidige harness-logica (zoals Skills of MCP) minder nuttig kan worden. De manier waarop we nu harnesses bouwen, is mogelijk niet toekomstbestendig.
De kernpunten
Laten we expliciet zijn in onze termen:
- Model: De wiskundige functie die input-tokens transformeert naar output-tokens.
- Inferentieservice: De gehoste service die het model draait en het gebruik bijhoudt.
- Harness: De logica die inputs vormgeeft, outputs interpreteert en contact heeft met de buitenwereld.
- Agent-systeem: De combinatie van deze drie onderdelen.
Wanneer we zeggen "mijn model doet dit of dat", praten we meestal over wat de harness aan het orchestreren is. De modellen zelf zijn slechts ondoorgrondelijke wiskundige objecten die we kunnen aanroepen.
Dit onderscheid is cruciaal. Als er iets misgaat of als we zaken willen verbeteren, moeten we weten waar we moeten kijken. Geeft het model slechte antwoorden? Misschien heeft het betere context nodig van de harness. Is het te traag of te duur? Dat ligt waarschijnlijk aan de inferentieservice of de onderliggende rekenkracht. Worden tools niet correct gebruikt? Dan formateert de harness ze waarschijnlijk verkeerd of worden de antwoorden niet goed geparsed.
Als je de laag kunt benoemen, kun je de laag repareren. Dat is het hele punt van precisie; het gaat niet om pedanterie, maar om het vermogen om dingen sneller en effectiever te verbeteren.
Symptomen en waarschijnlijke oorzaak
| Symptoom | Waarschijnlijke laag |
| Slechte redenering / kennis | Model of context geleverd door harness |
| Ontbrekende context | Harness |
| Tool is niet beschikbaar | Harness / tool-integratie |
| Tool-aanroep is malformed | Harness of model |
| Tool voert actie onjuist uit | Tool / harness |
| Trage inferentie | Inferentie-infrastructuur |
| Hoge kosten | Modelkeuze / inferentieservice |
| Zelfde model gedraagt zich anders | Harness / context / tooling |