Claude Architect · Lektion

Fejlkategorier

Midlertidige fejl, valideringsfejl, forretningsfejl og tilladelsesfejl

Lektion 2 af 413 trin

Fejlkategorier er en gratis Claude Architect-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Claude Architect, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Claude Architect-kurset indeholder 4 lektioner i alt.

Hvorfor fejlkategorier er vigtige

Når et værktøj mislykkes inde i en agent, afgør hvordan fejlen rapporteres, om Claude kan genoprette situationen. En generisk status som "Operation failed" fortæller ikke modellen noget – den kan ikke skelne mellem et midlertidigt problem og en permanent blokering, så den prøver enten blindt igen eller giver op.

Løsningen er en struktureret fejl: et lille objekt, der angiver typen af fejl. Kernefeltet er errorCategory, som kan have én af fire værdier:

  • transient – midlertidig, vil sandsynligvis lykkes ved et nyt forsøg
  • validation – forespørgslen var forkert formateret
  • business – en forretningsregel blokerede den
  • permission – adgang blev nægtet

I denne lektion lærer du at genkende hver kategori og route ud fra den.

En struktureret fejls form

En veldesignet MCP-værktøjsfejl indeholder mere end en meddelelse. Den markerer sig selv som en fejl, angiver en kategori og fortæller, om et nyt forsøg kan hjælpe.

Bemærk felterne: isError markerer den som en fejl, errorCategory klassificerer den, og isRetryable giver et tydeligt ja eller nej til at prøve igen. De ekstra felter – attempted_query og partial_results – lader koordinatoren genoprette situationen intelligent i stedet for at starte forfra.

# A structured tool error returned to Claude
{
  "isError": True,
  "errorCategory": "transient",   # transient | validation | business | permission
  "isRetryable": True,
  "message": "Upstream inventory service timed out after 5s",
  "attempted_query": "SELECT stock FROM inventory WHERE sku='A-19'",
  "partial_results": []
}

Midlertidige fejl

Midlertidige fejl er kortvarige og skyldes ikke din forespørgsel: et timeout, et kortvarigt netværksudfald eller en upstream-tjeneste, der midlertidigt er overbelastet. Det samme kald vil sandsynligvis lykkes, hvis det udføres igen lidt senere.

Disse fejl svarer til isRetryable: true. Det rigtige er næsten altid at prøve igen lokalt i underagenten – genopret fejlen dér, hvor den opstod, med en kort pause, i stedet for at afbryde hele arbejdsgangen på grund af et kortvarigt problem.

{
  "isError": True,
  "errorCategory": "transient",
  "isRetryable": True,
  "message": "503 from payment gateway; service temporarily overloaded"
}

Valideringsfejl

Valideringsfejl betyder, at selve forespørgslen var forkert formateret: et manglende påkrævet felt, en forkert type, en værdi uden for det tilladte interval eller et forkert datoformat. Værktøjet nåede aldrig langt nok til at udføre det egentlige arbejde.

Hvis du blindt prøver den identiske forespørgsel igen, mislykkes den igen – derfor er isRetryable normalt false. Fejlen kan dog stadig håndteres: Claude kan læse meddelelsen, rette inputtet og kalde værktøjet igen. Jo mere detaljeret meddelelsen er (hvilket felt og hvad der blev forventet), desto hurtigere retter modellen sig selv.

{
  "isError": True,
  "errorCategory": "validation",
  "isRetryable": False,
  "message": "Field 'order_date' must be ISO-8601 (got '13/2026'); expected e.g. 2026-02-13"
}

Forretningsfejl

Forretningsfejl opstår, når forespørgslen er korrekt formateret, og den kaldende part har tilladelse, men en domæneregel forbyder handlingen. Tænk på: En tilbagebetaling overstiger politikkens grænse, saldoen er for lav, varen er udsolgt, eller reservationen ligger efter tidsfristen.

Dette er ikke en fejl, der kan løses ved at prøve igen – det er en begrænsning i den virkelige verden. isRetryable er false. Agenten bør tydeligt vise reglen, og hvis arbejdsgangen ikke kan fortsætte inden for politikken, skal den eskalere i stedet for at forsøge at gennemtvinge handlingen.

{
  "isError": True,
  "errorCategory": "business",
  "isRetryable": False,
  "message": "Refund of $640 exceeds the $500 auto-approval limit; requires human approval"
}

Tilladelsesfejl

Tilladelsesfejl betyder, at adgang blev nægtet: legitimationsoplysningerne, tokenet eller rollen giver ikke tilladelse til denne handling eller ressource. Forespørgslen kan sagtens være korrekt i både form og hensigt – den er ganske enkelt ikke tilladt.

Hvis du prøver det samme kald igen med de samme legitimationsoplysninger, vil det fortsat mislykkes, så isRetryable er false. Agenten bør ikke gå i løkke; den bør rapportere den manglende adgang og, når det er relevant, eskalere til et menneske eller en privilegeret vej.

{
  "isError": True,
  "errorCategory": "permission",
  "isRetryable": False,
  "message": "API key lacks scope 'orders:write'; cannot process refund"
}

Routing ud fra kategorien

Hele formålet med kategorisering er at dirigere. Når koordinatoren har læst errorCategory, er genoprettelsesvejen entydig — den behøver ikke gætte ved at læse prosa.

En enkel mapping:

  • transient → prøv igen lokalt med backoff
  • validation → ret inputtet, og prøv derefter igen
  • business → respekter reglen; eskalér, hvis du er blokeret
  • permission → stop; rapportér eller eskalér den manglende adgang

Det er intelligent dirigering, som en generisk status som "failed" ganske enkelt ikke kan understøtte.

def route(err):
    cat = err["errorCategory"]
    if cat == "transient":
        return retry_with_backoff(err)      # recover in the subagent
    if cat == "validation":
        return repair_input_and_retry(err)  # not the same request twice
    if cat == "business":
        return escalate_if_blocked(err)     # respect the policy
    if cat == "permission":
        return report_access_gap(err)       # stop; do not loop

isRetryable er den hurtige vej

Du behøver ikke altid forgrene på alle fire kategorier. Flaget isRetryable er en hurtig kontrol: true betyder "det kan med rimelighed virke at prøve igen", mens false betyder "det samme kald vil fejle på samme måde".

Som tommelfingerregel kan kun transient-fejl forsøges igen, som de er. Ved validering skal inputtet først ændres; forretningsregler og tilladelser ændrer sig slet ikke ved et nyt forsøg. Betragt isRetryable: false som et klart signal om at holde op med at prøve igen og vælge en anden handling — reparér, eskalér eller rapportér.

if err["isError"] and err["isRetryable"]:
    # transient: safe to try again with backoff
    result = retry_with_backoff(err)
else:
    # validation / business / permission: retrying won't help
    result = handle_non_retryable(err)

Adgangsfejl kontra tomt resultat

En subtil, men eksamenskritisk forskel: en adgangsfejl er ikke det samme som et gyldigt tomt resultat.

Hvis et opslagværktøj ikke kan få forbindelse til databasen, er det en midlertidig fejl — måske skal du prøve igen. Hvis værktøjet får forbindelse til databasen uden problemer, og der ganske enkelt ikke er nogen matchende rækker, er kaldet lykkedes og returnerer nul resultater — isError er false. Hvis du blander de to ting sammen, fører det til meningsløse nye forsøg på "ingen match fundet" eller, endnu værre, til at en reel fejl i stilhed behandles som "der er ikke noget".

# NOT an error — a valid empty result
{ "isError": False, "results": [], "message": "No orders match customer 8842" }

# An error — could not even run the query
{ "isError": True, "errorCategory": "transient",
  "isRetryable": True, "message": "Connection refused to orders DB" }

Medtag delvise resultater og kontekst

Når en fejl, der ikke kan genoprettes fra, skal sendes videre, skal du sende struktureret kontekst med — ikke bare "det gik i stykker". Medtag fejltypen, den attempted_query, eventuelle partial_results, der allerede er indsamlet, og brugbare alternativer.

I et forskningssystem med flere agenter er det dette, der gør det muligt for koordinatoren at annotere dækningshuller og stadig samle et nyttigt svar ud fra det, der lykkedes. De to fejltilstande, du skal undgå, er: stille undertrykkelse (at sluge fejlen) og at afbryde hele arbejdsgangen, fordi én af ti underopgaver mislykkedes.

{
  "isError": True,
  "errorCategory": "permission",
  "isRetryable": False,
  "message": "No access to EU sales shard",
  "attempted_query": "sales WHERE region='EU' AND year=2026",
  "partial_results": [{"region": "US", "total": 4200000}]
}

Genopret lokalt, eskalér det, der ikke kan genoprettes

Saml de to dele i ét grundprincip for håndtering af agentfejl:

  • Genopret midlertidige fejl lokalt — prøv igen i underagenten med backoff; lad ikke en timeout boble hele vejen op til mennesket.
  • Eskalér fejl, der ikke kan genoprettes, sammen med delvise resultater — når forretningsregler, tilladelser eller manglende data blokerer fremdriften, skal du sende den strukturerede kontekst videre, så et menneske eller en koordinator kan træffe beslutningen.

Eskaleringstriggere skal være konkrete (mangler i politikken, overskridelse af tærskler, manglende fremdrift efter flere forsøg, udtrykkelige anmodninger fra mennesker) — aldrig baseret på stemning eller en models egen vurdering af sin sikkerhed.

Hurtig kontrol: Vælg genoprettelsesvejen

Test din fornemmelse for dirigering på en realistisk agentfejl.

Opsummering: Fire kategorier, én disciplin

Strukturerede fejl forvandler en blindgyde til en beslutning. Husk de fire kategorier og deres standardveje:

  • transient (isRetryable: true) → prøv igen lokalt med backoff
  • validation → ret inputtet, og prøv derefter igen
  • business → respekter reglen; eskalér, hvis du er blokeret
  • permission → stop; rapportér eller eskalér den manglende adgang

Skeln altid mellem en adgangsfejl og et gyldigt tomt resultat. Når du sender en fejl videre, skal du medtage attempted_query og partial_results — undertryk aldrig en fejl i stilhed, og afbryd aldrig hele arbejdsgangen på grund af én fejl. Generiske fejl blokerer genoprettelse; strukturerede fejl med en kategori og isRetryable muliggør den.

Gratis at komme i gang

Lær Python med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
26
Lektioner
104

Ofte stillede spørgsmål

Er lektionen “Fejlkategorier” gratis?

Ja — alle 3 lektioner i læringssporet Claude Architect, inklusive “Fejlkategorier”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Claude Architect-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Fejlkategorier”?

Midlertidige fejl, valideringsfejl, forretningsfejl og tilladelsesfejl Du øver dig i Claude Architect med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Claude Architect?

Der kræves ingen tidligere erfaring. Claude Architect på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.

Hvor lang tid tager lektionen “Fejlkategorier”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Claude Architect-lektion?

Ja. Alle Claude Architect-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. isError-flaget
  2. Fejlkategorier
  3. Genforsøgsmetadata og delvise resultater
  4. Anti-pattern: Generiske fejlmeddelelser
← Tilbage til Claude Architect