Claude Architect · Lektion

isError-flaget

Signalér fejl tydeligt i MCP-svar

Lektion 1 af 413 trin

isError-flaget er en gratis Claude Architect-lektion på CoddyKit. Dette er lektion 1 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 det er vigtigt at signalere fejl

Når et MCP-værktøj kører, kan der ske to ting: Det lykkes, eller det mislykkes. Modellen skal tydeligt og entydigt vide hvilken af delene der er sket, så den kan beslutte, hvad den skal gøre bagefter.

Hvis en fejl ligner et normalt resultat, kan agenten opfatte nonsens som sandhed, hallucinere en løsning eller gå videre i stilhed. Løsningen er et dedikeret fejlsignal: isError-flaget.

I denne lektion lærer du at signalere fejl klart, så den agentiske løkke kan vælge den rigtige vej i stedet for at gætte.

Hvad isError faktisk gør

Et værktøjsresultat indeholder en boolsk værdi i isError. Når isError er true, fortæller du Claude: Dette værktøj producerede ikke et gyldigt resultat – opfat indholdet som en fejlrapport, ikke som data.

Dette er strukturelt adskilt fra værktøjets normale output. Modellen kan vælge gren uden at analysere prosa: succesvej eller fejlvej. Det er hele formålet med adskillelsen.

tool_result = {
    "type": "tool_result",
    "tool_use_id": tool_use.id,
    "is_error": True,
    "content": "..."  # structured failure report
}

Generiske fejl blokerer genoprettelse

Det klassiske antipattern er en generisk fejlstreng som "Operation failed". Den fortæller modellen, at noget gik galt, men ikke noget, den kan handle på.

Kan den prøve igen? Var inputtet forkert formateret? Manglede brugeren tilladelse? Er der delvise data, som kan reddes? En generisk meddelelse besvarer ingen af disse spørgsmål – derfor går agenten i stå eller improviserer dårligt.

Generiske fejl blokerer genoprettelse. Strukturerede fejl muliggør intelligent routing.

En struktureret fejls anatomi

En korrekt udformet MCP-fejl kombinerer isError: true med en struktureret brødtekst. Felterne, der forventes til eksamen, er:

  • errorCategory – en af transient, validation, business, permission
  • isRetryable – kan det samme kald lykkes, hvis det prøves igen?
  • message – forklaring, der kan læses af mennesker
  • attempted_query – præcis det, værktøjet forsøgte at gøre
  • partial_results – alt brugbart, som værktøjet nåede at indsamle

Tilsammen lader disse felter modellen beslutte, om den skal prøve igen, omformulere, eskalere eller fortsætte med delvise data.

{
    "isError": true,
    "errorCategory": "transient",
    "isRetryable": true,
    "message": "Upstream inventory service timed out after 5s",
    "attempted_query": "GET /inventory?sku=ABX-19",
    "partial_results": null
}

errorCategory styrer beslutningen

De fire kategorier er ikke pynt – hver af dem peger på en forskellig næste handling:

  • transient – midlertidig fejl (timeout, hastighedsbegrænsning). Kan som regel prøves igen; genopret lokalt.
  • validation – ugyldigt input. Prøv ikke blindt igen; ret argumenterne først.
  • business – en regel blev overtrådt (f.eks. overstiger en tilbagebetaling politikken). Kræver ofte eskalering, ikke et nyt forsøg.
  • permission – den kaldende part mangler adgang. Et nyt forsøg hjælper ikke; eskalér eller bed om legitimationsoplysninger.

Kategorien forvandler en vag fejl til en routinginstruktion, som modellen kan følge.

isRetryable: Lad ikke modellen gætte

Om en fejl er værd at prøve igen, er ofte ikke synligt ud fra meddelelsens tekst alene. Gør det tydeligt med isRetryable.

Et timeout (transient) kan prøves igen. Et forkert formateret argument (validation) kan ikke – hvis du prøver det samme ugyldige input igen, mislykkes det bare igen. Et afslag på tilladelse kan ikke prøves igen uden nye legitimationsoplysninger.

Ved at angive isRetryable direkte gør du beslutninger om genforsøg deterministiske i stedet for at overlade dem til sandsynlighedsbaseret tekstlæsning.

{
    "isError": true,
    "errorCategory": "validation",
    "isRetryable": false,
    "message": "sku must match pattern ^[A-Z]{3}-[0-9]{2}$; got 'abx19'",
    "attempted_query": "lookup_inventory(sku='abx19')"
}

attempted_query bevarer konteksten

Når modellen beslutter, hvordan den skal komme videre, skal den vide hvad der faktisk blev forsøgt. Ved at inkludere attempted_query kan agenten omformulere intelligent i stedet for at gentage det samme fejlslagne kald.

Det er en del af god fejlvideregivelse: struktureret kontekst = fejltype, forsøgt forespørgsel, delvise resultater og alternativer. Jo rigere konteksten er, desto bedre bliver routingen af genoprettelsen.

partial_results: Smid ikke gode data væk

Et værktøj kan mislykkes og stadig have indsamlet noget nyttigt. Et opslag i flere kilder kan returnere 3 af 5 poster, før den fjerde kilde får timeout.

Hvis du returnerer partial_results sammen med fejlen, kan agenten fortsætte med det, den har, markere manglen og undgå at starte forfra. Hvis du kasserer delvise data ved enhver fejl, spilder du arbejde og forringer svarene.

{
    "isError": true,
    "errorCategory": "transient",
    "isRetryable": true,
    "message": "3 of 5 sources responded; 2 timed out",
    "attempted_query": "search_catalog(term='thermostat')",
    "partial_results": [{"id": 11}, {"id": 12}, {"id": 19}]
}

Fejl kontra et gyldigt tomt resultat

En vigtig forskel: En adgangsfejl er ikke det samme som et gyldigt tomt resultat.

  • isError: true – værktøjet kunne ikke fuldføre arbejdet (timeout, afvist, ugyldigt input). Måske skal du prøve igen eller eskalere.
  • isError: false med tomt indhold – værktøjet kørte korrekt, og det ærlige svar er "ingen match".

Det er en almindelig fejl at blande disse sammen: En tom søgning, der markeres som en fejl, udløser meningsløse genforsøg, mens en reel fejl, der markeres som tom, skjuler problemet. Hold dem adskilt.

{
    "isError": false,
    "errorCategory": null,
    "message": "Query succeeded; 0 orders match customer C-7781",
    "results": []
}

Genopret lokalt, og eskalér når det er nødvendigt

Det strukturerede signal styrer, hvor genoprettelsen sker. I et system med flere agenter bør en underagent genoprette midlertidige fejl lokalt – prøve timeoutet igen eller udføre kaldet på ny – og kun sende fejl videre, som den virkelig ikke kan løse.

Når den eskalerer, skal den sende den strukturerede fejl med delvise resultater, så koordinatoren kan beslutte, om den skal route et andet sted hen, bede om flere identifikatorer eller vise manglen. Undertryk aldrig en fejl i stilhed, og afbryd aldrig hele arbejdsgangen på grund af én fejl, der kan genoprettes fra.

Sæt det hele sammen i et værktøj

Pak arbejdet ind i en MCP-værktøjshåndtering, og returnér en struktureret fejl, hvis noget mislykkes, i stedet for at lade en undtagelse slippe igennem som en generisk streng.

Bemærk, hvordan hver gren angiver isError, en kategori og et tip om genforsøg – så den agentiske løkke har alt, hvad den skal bruge for at route næste trin deterministisk.

def lookup_order(order_id: str):
    try:
        order = db.fetch(order_id)
        if order is None:
            return {"isError": False, "results": []}  # valid empty
        return {"isError": False, "results": [order]}
    except TimeoutError as e:
        return {
            "isError": True,
            "errorCategory": "transient",
            "isRetryable": True,
            "message": str(e),
            "attempted_query": f"fetch(order_id={order_id})",
            "partial_results": None,
        }

Hurtigt tjek: Vælg den rigtige fejlstruktur

En underagents MCP-værktøj forespørger en kundes ordrehistorik. En af tre backend-shards er utilgængelig; de to andre returnerer 8 ordrer. Hvad skal værktøjet returnere?

Opsamling: Signalér fejl tydeligt

Vigtigste pointer om isError-flaget:

  • isError: true er det strukturelle signal om, at et værktøj ikke producerede gyldige data – adskilt fra det normale output.
  • Kombinér det med errorCategory (transient / validation / business / permission), isRetryable, message, attempted_query og partial_results.
  • Generiske fejl som "Operation failed" blokerer genoprettelse; strukturerede fejl muliggør intelligent routing.
  • Skeln mellem en adgangsfejl og et gyldigt tomt resultat – markér aldrig "ingen match" som en fejl.
  • Genopret midlertidige fejl lokalt; eskalér fejl, der ikke kan genoprettes fra, med delvise resultater. Undgå at undertrykke fejl i stilhed, og undgå at afbryde hele arbejdsgangen på grund af én fejl.
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 “isError-flaget” gratis?

Ja — alle 3 lektioner i læringssporet Claude Architect, inklusive “isError-flaget”, 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 “isError-flaget”?

Signalér fejl tydeligt i MCP-svar 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 1 af 4.

Hvor lang tid tager lektionen “isError-flaget”?

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