Claude Architect · Les

Retrybare metadata en gedeeltelijke resultaten

errorCategory, isRetryable, attempted_query, partials

Les 3 van 413 stappen

Retrybare metadata en gedeeltelijke resultaten is een gratis Claude Architect-les op CoddyKit. Dit is les 3 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Claude Architect. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Claude Architect bevat in totaal 4 lessen.

Waarom de foutstructuur belangrijk is

Wanneer een hulpmiddel of MCP-server mislukt, moet het model beslissen wat het vervolgens doet. Een algemene status zoals "Operation failed" geeft geen informatie om over te redeneren, dus de enige veilige opties zijn afbreken of gokken.

Een gestructureerde fout verandert een doodlopende weg in een beslissing: moeten we het opnieuw proberen, om de fout heen routeren of naar een mens escaleren? In deze les leer je de vier metadatavelden die dat mogelijk maken: errorCategory, isRetryable, attempted_query en partial_results.

De vlag isError

Elke gestructureerde MCP-fout begint met één booleaanse waarde: isError: true. Dit is het ondubbelzinnige signaal dat het resultaat van het hulpmiddel een fout is en geen gegevens bevat.

Zonder deze waarde kan het model een foutmelding behandelen als een legitiem antwoord en de fout vrolijk samenvatten alsof het een resultaat was. De vlag is de poort die alle daaropvolgende herstellogica activeert.

tool_result = {
    "isError": True,
    "errorCategory": "transient",
    "isRetryable": True,
    "message": "Upstream timeout contacting orders DB",
    "attempted_query": "SELECT * FROM orders WHERE id='A-2291'",
    "partial_results": []
}

errorCategory: vier categorieën

errorCategory classificeert waarom de aanroep is mislukt, zodat het model intelligent kan routeren. De vier standaardcategorieën zijn:

  • transient — een tijdelijke fout (timeout, snelheidslimiet). Opnieuw proberen is waarschijnlijk zinvol.
  • validation — de invoer had een onjuiste indeling. Corrigeer het verzoek en probeer niet blind opnieuw.
  • business — een domeinregel blokkeerde de actie (bijvoorbeeld: de bestelling is al verzonden).
  • permission — de aanroeper is niet gemachtigd. Opnieuw proberen helpt niet; escaleer of meld je opnieuw aan.

De categorie bepaalt de strategie; op zichzelf neemt die niet de beslissing.

isRetryable: de actietip

isRetryable geeft expliciet ja of nee aan op de vraag of opnieuw proberen mogelijk kan slagen. Het werkt samen met de categorie, maar geeft een scherper signaal.

Een transient-timeout heeft meestal isRetryable: true. Een validation-fout heeft isRetryable: false — dezelfde onjuiste invoer opnieuw proberen leidt gewoon weer tot een fout. Belangrijk is dat de subagent hierdoor transient-fouten lokaal kan herstellen, in plaats van elke hapering door te geven aan de coördinator.

if result.get("isError"):
    if result["isRetryable"] and attempt < max_attempts:
        attempt += 1
        continue          # recover locally in the subagent
    else:
        escalate(result)  # non-recoverable: pass it up with context

Verwar een fout niet met leegte

Een subtiel maar voor het examen belangrijk onderscheid: een toegangsFOUT is niet hetzelfde als een geldig LEEG resultaat.

  • isError: true + transient → de query kon niet worden uitgevoerd. Overweeg opnieuw proberen.
  • isError: false + lege lijst → de query is goed uitgevoerd en er zijn echt geen overeenkomsten. Opnieuw proberen is zinloos en verspilt middelen.

Algemene fouten vervagen deze grens. Gestructureerde metadata houdt "ik kon niet zoeken" duidelijk gescheiden van "ik heb gezocht, maar er is niets".

attempted_query: opnieuw proberen mogelijk maken

attempted_query legt precies vast wat het hulpmiddel probeerde te doen — de SQL, de API-aanroep of de zoektekst. Dit dient twee doelen:

  • Het stelt het model in staat om opnieuw te proberen met feedback: stuur de oorspronkelijke bedoeling samen met de fout, zodat een gecorrigeerde query kan worden opgesteld.
  • Het levert herkomstinformatie — je houdt een spoor bij van bewering naar bron, met wat er daadwerkelijk is gevraagd.

Onthoud: opnieuw proberen met feedback corrigeert opmaak- en structurele fouten. Als de informatie simpelweg niet in de bron staat, helpt geen enkele nieuwe query.

{
    "isError": True,
    "errorCategory": "validation",
    "isRetryable": True,
    "message": "Unknown column 'order_no'; did you mean 'order_id'?",
    "attempted_query": "SELECT * FROM orders WHERE order_no='A-2291'",
    "partial_results": []
}

partial_results: gooi goede gegevens niet weg

Wanneer een bewerking met meerdere stappen of bronnen halverwege mislukt, is het werk dat vóór de fout is uitgevoerd nog steeds waardevol. partial_results geeft het door.

Stel je een onderzoeksagent voor die vijf bronnen heeft bevraagd en waarbij de vijfde een timeout kreeg. Door de vier geslaagde resultaten samen met de fout terug te geven, kan de coördinator doorgaan — in plaats van alles weg te gooien omdat één onderdeel is mislukt. Breek de volledige workflow nooit af vanwege één fout.

{
    "isError": True,
    "errorCategory": "transient",
    "isRetryable": True,
    "message": "Source 5 (vendor API) timed out after 4 of 5 sources",
    "attempted_query": "fetch pricing from [s1..s5]",
    "partial_results": [
        {"source": "s1", "price": 19.0},
        {"source": "s2", "price": 21.5},
        {"source": "s3", "price": 18.9},
        {"source": "s4", "price": 20.0}
    ]
}

Lokaal herstellen, escaleren met context

De metadata maakt een heldere strategie met twee niveaus mogelijk in hub-en-spaaksystemen:

  • Herstel transient-fouten lokaal binnen de subagent — probeer de isRetryable-gevallen stilletjes opnieuw.
  • Escaleer niet-herstelbare fouten naar de coördinator en geef de volledige gestructureerde context mee: fouttype, uitgeprobeerde query en eventuele gedeeltelijke resultaten.

De coördinator handelt fouten af en routeert. Maar dat kan alleen goed als de subagent een gestructureerd signaal doorgeeft in plaats van een kale uitzondering of stilte.

Het foutschema ontwerpen

Als je de fout definieert als gestructureerde uitvoer, pas de regels voor het schema dan zorgvuldig toe. Markeer een veld alleen als verplicht als het altijd aanwezig is. partial_results is bij een harde fout vaak leeg of afwezig — maak het dus niet verplicht, anders kan het model vermeldingen verzinnen om aan het schema te voldoen.

Gebruik voor errorCategory een enum met een waarde "other" en daarnaast een veld met vrije tekst voor details. Zo blijft de classificatie vandaag overzichtelijk en kun je later foutmodi toevoegen die je nog niet bent tegengekomen.

error_schema = {
    "type": "object",
    "properties": {
        "isError": {"type": "boolean"},
        "errorCategory": {
            "enum": ["transient", "validation",
                     "business", "permission", "other"]
        },
        "categoryDetail": {"type": "string"},
        "isRetryable": {"type": "boolean"},
        "attempted_query": {"type": "string"},
        "partial_results": {"type": "array"}
    },
    "required": ["isError", "errorCategory", "isRetryable"]
}

Haken voor fouten die geld kosten

Metadata stuurt het model probabilistisch (ongeveer 90%). Wanneer een fout financiële, juridische of veiligheidsgevolgen heeft, is dat niet voldoende.

Gebruik een PostToolUse-hook om het resultaat van het hulpmiddel te onderscheppen voordat het model het ziet, en dwing beleid deterministisch af (100%). Bijvoorbeeld: als errorCategory bij een terugbetalingshulpmiddel permission is, blokkeer dan elke nieuwe poging en forceer escalatie — laat het niet aan de prompt over om zich correct te gedragen.

# PostToolUse hook: deterministic guard on structured errors
def post_tool_use(result):
    if result.get("isError") and \
       result["errorCategory"] == "permission":
        return block_and_escalate(
            reason=result["message"],
            attempted=result["attempted_query"])
    return result

Antipatroon: stil onderdrukken

Het ergste wat je met een fout kunt doen, is die verbergen. Vermijd deze twee foutmodi:

  • Stil onderdrukken — de fout inslikken en een leeg of verzonnen resultaat teruggeven. Het model kan dan een echt "geen overeenkomsten" niet onderscheiden van een defecte query.
  • De volledige workflow afbreken vanwege één mislukt onderdeel — en alle gedeeltelijke resultaten weggooien.

Gestructureerde fouten zijn de oplossing voor beide: ze maken de fout zichtbaar en behouden wat wel is gelukt.

Snelle controle: een gedeeltelijke fout routeren

Pas toe wat je hebt geleerd in een realistisch scenario met meerdere agents.

Samenvatting: de gereedschapskist voor herstel

Gestructureerde fouten veranderen fouten in beslissingen die kunnen worden gerouteerd:

  • isError — de poort die de herstellogica activeert.
  • errorCategory — transient / validation / business / permission (plus "other") bepaalt de strategie.
  • isRetryable — de expliciete tip voor opnieuw proberen; herstel transient-fouten lokaal.
  • attempted_query — maakt opnieuw proberen met feedback en herkomstinformatie mogelijk (helpt niet als de informatie echt ontbreekt).
  • partial_results — geef goede gegevens door; breek de volledige workflow nooit af vanwege één fout.

Markeer alleen velden die altijd aanwezig zijn als verplicht, bescherm fouten met financiële, juridische of veiligheidsgevolgen met deterministische hooks en onderdruk fouten nooit stilletjes. Dat is foutafhandeling op architectniveau.

Gratis beginnen

Leer Python met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
26
Lessen
104

Veelgestelde vragen

Is de les “Retrybare metadata en gedeeltelijke resultaten” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad Claude Architect, waaronder “Retrybare metadata en gedeeltelijke resultaten”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Claude Architect bevat in totaal 4 lessen.

Wat leer ik in “Retrybare metadata en gedeeltelijke resultaten”?

errorCategory, isRetryable, attempted_query, partials Je oefent met Claude Architect door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Claude Architect te beginnen?

Ervaring vooraf is niet nodig. Claude Architect op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.

Hoe lang duurt de les “Retrybare metadata en gedeeltelijke resultaten”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Claude Architect?

Ja. Elke les over Claude Architect bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. De isError-vlag
  2. Foutcategorieën
  3. Retrybare metadata en gedeeltelijke resultaten
  4. Antipatroon: algemene foutmeldingen
← Terug naar Claude Architect