Feilkategorier
Midlertidige, validerings-, forretnings- og tilgangsfeil.
Feilkategorier er en gratis leksjon i Claude Architect på CoddyKit. Dette er leksjon 2 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Claude Architect, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Claude Architect inneholder totalt 4 leksjoner.
Hvorfor feilkategorier er viktige
Når et verktøy mislykkes inne i en agent, avgjør hvordan feilen rapporteres om Claude kan gjenopprette. En generell status som "Operation failed" forteller modellen ingenting – den kan ikke skille et midlertidig avbrudd fra en permanent blokkering, så den prøver enten blindt på nytt eller gir opp.
Løsningen er en strukturert feil: et lite objekt som angir typen feil. Kjernefeltet er errorCategory, som kan ha én av fire verdier:
- transient – midlertidig, vil sannsynligvis lykkes ved et nytt forsøk
- validation – forespørselen var feilformatert
- business – en domeneregel blokkerte den
- permission – tilgang ble nektet
Denne leksjonen lærer deg å kjenne igjen hver kategori og rute ut fra den.
Strukturen til en strukturert feil
En godt utformet MCP-verktøyfeil inneholder mer enn en melding. Den markerer seg selv som en feil, angir en kategori og sier om et nytt forsøk kan hjelpe.
Legg merke til feltene: isError markerer den som en feil, errorCategory klassifiserer den, og isRetryable gir et eksplisitt ja eller nei til om den skal prøves på nytt. Ekstrafeltene – attempted_query og partial_results – lar koordinatoren gjenopprette på en intelligent måte i stedet for å begynne på nytt.
# 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 feil
Midlertidige feil er forbigående og skyldes ikke forespørselen din: et tidsavbrudd, et kortvarig nettverksbrudd eller en oppstrøms tjeneste som akkurat nå er overbelastet. Det samme kallet vil sannsynligvis lykkes hvis det gjøres på nytt litt senere.
Disse tilsvarer isRetryable: true. Det riktige er nesten alltid å prøve på nytt lokalt i underagenten – gjenopprett feilen der den oppstod, med en kort backoff, i stedet for å avbryte hele arbeidsflyten på grunn av et kortvarig problem.
{
"isError": True,
"errorCategory": "transient",
"isRetryable": True,
"message": "503 from payment gateway; service temporarily overloaded"
}Valideringsfeil
Valideringsfeil betyr at selve forespørselen var feilformatert: et obligatorisk felt mangler, feil type er brukt, en verdi er utenfor tillatt område eller datoformatet er ugyldig. Verktøyet kom aldri langt nok til å utføre det egentlige arbeidet.
Hvis du prøver den identiske forespørselen på nytt uten å endre noe, vil den mislykkes igjen – derfor er isRetryable vanligvis false. Feilen kan likevel gjenopprettes: Claude kan lese meldingen, korrigere inputen og kalle verktøyet på nytt. Jo mer detaljert meldingen er (hvilket felt og hva som var forventet), desto raskere korrigerer modellen seg selv.
{
"isError": True,
"errorCategory": "validation",
"isRetryable": False,
"message": "Field 'order_date' must be ISO-8601 (got '13/2026'); expected e.g. 2026-02-13"
}Forretningsfeil
Forretningsfeil oppstår når forespørselen er korrekt utformet og den som kaller, har tilgang, men en forretningsregel forbyr handlingen. Tenk for eksempel på en refusjon som overskrider beløpsgrensen, for lav kontosaldo, en utsolgt vare eller en bestilling etter fristens utløp.
Dette er ikke en feil som løses ved å prøve på nytt – det er en begrensning i den virkelige verden. isRetryable er false. Agenten bør tydelig vise regelen, og hvis arbeidsflyten ikke kan fortsette innenfor retningslinjene, bør den eskalere i stedet for å forsøke å tvinge gjennom handlingen.
{
"isError": True,
"errorCategory": "business",
"isRetryable": False,
"message": "Refund of $640 exceeds the $500 auto-approval limit; requires human approval"
}Tilgangsfeil
Tilgangsfeil betyr at tilgang ble nektet: legitimasjonen, tokenet eller rollen gir ikke tillatelse til denne handlingen eller ressursen. Forespørselen kan være helt gyldig når det gjelder struktur og hensikt – den er ganske enkelt ikke tillatt.
Hvis det samme kallet prøves på nytt med den samme legitimasjonen, vil det fortsette å mislykkes, så isRetryable er false. Agenten bør ikke gå i en løkke; den bør rapportere tilgangsmangelen og, når det er hensiktsmessig, eskalere til et menneske eller en privilegert bane.
{
"isError": True,
"errorCategory": "permission",
"isRetryable": False,
"message": "API key lacks scope 'orders:write'; cannot process refund"
}Ruting basert på kategorien
Hele poenget med kategorisering er å rute. Når koordinatoren leser errorCategory, blir gjenopprettingsløpet entydig – den trenger ikke gjette ved å lese fritekst.
En ryddig tilordning:
- transient → prøv på nytt lokalt med gradvis lengre ventetid
- validation → korriger inndataene, og prøv deretter på nytt
- business → respekter regelen; eskaler hvis prosessen blokkeres
- permission → stopp; rapporter eller eskaler manglende tilgang
Dette er intelligent ruting som en generell "failed"-status ganske enkelt ikke kan stø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 loopisRetryable er hurtigsporet
De trenger ikke alltid dele opp etter alle fire kategoriene. Flagget isRetryable fungerer som en rask sjekk: true betyr «det kan med rimelighet fungere å prøve igjen», mens false betyr «det samme kallet vil mislykkes på samme måte».
Som tommelfingerregel kan bare transient-feil prøves på nytt uendret. Ved valideringsfeil må inndataene endres først; forretningsregler og tillatelser endres ikke av at De prøver igjen. Betrakt isRetryable: false som et tydelig signal om å slutte å prøve på nytt og velge en annen handling – korrigere, eskalere eller rapportere.
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)Tilgangsfeil kontra tomt resultat
Et subtilt, men eksamenskritisk skille: en tilgangsfeil er ikke det samme som et gyldig tomt resultat.
Hvis et oppslagsverktøy ikke får kontakt med databasen, er det en midlertidig feil – kanskje bør De prøve på nytt. Hvis verktøyet får kontakt med databasen uten problemer, men det ganske enkelt ikke finnes rader som samsvarer, er kallet vellykket og returnerer null resultater – isError er false. Hvis De blander disse to, kan det føre til meningsløse nye forsøk på «ingen treff», eller enda verre: at en reell feil i stillhet behandles som «ingenting der».
# 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" }Ta med delvise resultater og kontekst
Når en feil som ikke kan gjenopprettes, må sendes videre, bør De sende med strukturert kontekst – ikke bare «det gikk galt». Ta med feiltypen, attempted_query, eventuelle partial_results som allerede er samlet inn, og realistiske alternativer.
I et system for forskning med flere agenter gjør dette det mulig for koordinatoren å merke hull i dekningen og likevel sette sammen et nyttig svar basert på det som fungerte. De to feilmodusene som må unngås, er stille undertrykking (å svelge feilen) og å avbryte hele arbeidsflyten fordi én av ti deloppgaver mislyktes.
{
"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}]
}Gjenopprett lokalt, eskaler feil som ikke kan gjenopprettes
Sett de to delene sammen til ett driftsprinsipp for feilhåndtering i agenter:
- Gjenopprett midlertidige feil lokalt – prøv på nytt i underagenten med gradvis lengre ventetid; ikke send et tidsavbrudd helt videre til brukeren.
- Eskaler feil som ikke kan gjenopprettes, sammen med delvise resultater – når forretningsregler, tillatelser eller manglende data hindrer fremdriften, sender De den strukturerte konteksten videre slik at et menneske eller en koordinator kan avgjøre hva som skal gjøres.
Utløsere for eskalering bør være konkrete (manglende retningslinjer, brudd på terskelverdier, manglende fremdrift etter flere forsøk eller uttrykkelige forespørsler fra mennesker) – aldri basert på følelser eller en modell sin egenvurderte konfidensskår.
Rask sjekk: Velg gjenopprettingsløp
Test evnen Deres til å rute riktig ved en realistisk agentfeil.
Oppsummering: Fire kategorier, én disiplin
Strukturerte feil gjør en blindvei om til en beslutning. Husk de fire kategoriene og standardrutene deres:
- transient (
isRetryable: true) → prøv på nytt lokalt med gradvis lengre ventetid - validation → korriger inndataene, og prøv deretter på nytt
- business → respekter regelen; eskaler hvis prosessen blokkeres
- permission → stopp; rapporter eller eskaler manglende tilgang
Skill alltid mellom en tilgangsfeil og et gyldig tomt resultat. Når De sender en feil videre, må De ta med attempted_query og partial_results – aldri undertrykke feilen i stillhet, og aldri avbryte hele arbeidsflyten på grunn av én feil. Generelle feil hindrer gjenoppretting; strukturerte feil med en kategori og isRetryable gjør den mulig.
Lær deg Python med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 26
- Leksjoner
- 104
Ofte stilte spørsmål
Er leksjonen «Feilkategorier» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Claude Architect, inkludert «Feilkategorier», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Claude Architect inneholder totalt 4 leksjoner.
Hva lærer jeg i «Feilkategorier»?
Midlertidige, validerings-, forretnings- og tilgangsfeil. Du øver på Claude Architect med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Claude Architect?
Ingen tidligere erfaring er nødvendig. Claude Architect på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.
Hvor lang tid tar leksjonen «Feilkategorier»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Claude Architect-leksjonen?
Ja. Alle Claude Architect-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- isError-flagget
- Feilkategorier
- Metadata for nye forsøk og delvise resultater
- Antimønster: Generiske feilmeldinger