Programmerbare forhåndsbetingelser
Blokker refusjoner i kode frem til identiteten er bekreftet.
Programmerbare forhåndsbetingelser er en gratis leksjon i Claude Architect på CoddyKit. Dette er leksjon 3 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.
Refusjonen som aldri skal utføres
Se for deg en kundestøtteagent med verktøyet process_refund. Modellen er intelligent, men også probabilistisk. Omtrent 9 av 10 ganger følger den instruksen din om å verifisere kunden først. Den tiende gangen, under en uvanlig prompt eller i en forvirrende samtale, refunderer den en uverifisert fremmed.
For en økonomisk handling er en suksessrate på 90 % en risiko, ikke en fordel. Denne leksjonen handler om å lukke dette gapet på 10 % med en programmatisk forutsetning: en deterministisk kontroll på kodenivå som blokkerer refusjonen til identiteten er verifisert — hver eneste gang.
Prompter overtaler, kode garanterer
Det finnes to måter å håndheve en regel i en agent på:
- Promptveiledning — «Verifiser alltid kunden før du refunderer.» Dette er pålitelig rundt 90 % av tiden. Modellen avgjør om den vil følge regelen.
- Programmatisk håndheving — en hook eller en kontroll i koden som kjører deterministisk. Dette er 100 % pålitelig. Modellen kan ikke overstyre den.
En tommelfingerregel til eksamen: Når feil får økonomiske, juridiske eller sikkerhetsmessige konsekvenser, stoler du ikke på en prompt. Reserver hardkode for garantier, og la modellen ta de åpne beslutningene.
Hva «forutsetning» faktisk betyr
En programmatisk forutsetning er et faktum som må være etablert i verifisert tilstand før en sensitiv handling kan fortsette. I vårt tilfelle blokkeres refusjonen til get_customer har returnert en post med en verifisert identitet.
Dette handler ikke om at modellen lover at den har kontrollert noe. Det er koden din som observerer de faktiske verktøyresultatene og nekter å kjøre process_refund med mindre verifiseringsfaktumet faktisk er til stede. Garantien kommer fra dataene, ikke fra modellens beskrivelse.
Den agentiske løkken, oppsummert
For å kontrollere et verktøy må du vite hvor i løkken du skal gripe inn. For hver tur sender du hele meldingshistorikken, undersøker stop_reason, og hvis den er tool_use, kjører du det forespurte verktøyet, legger til resultatet og kjører løkken på nytt til end_turn.
Forutsetningen ligger i steget «kjør det forespurte verktøyet». Når modellen ber om process_refund, undersøker koden din den akkumulerte tilstanden før verktøyet kjøres. Modellen foreslår; koden din avgjør.
stop_reason = response.stop_reason # 'tool_use' | 'end_turn' | ...
for block in response.content:
if block.type == "tool_use":
# Intercept here, BEFORE executing the tool
result = dispatch_tool(block.name, block.input, state)
tool_results.append(result)
# Loop continues until stop_reason == 'end_turn'Sporing av verifiseringstilstand
Forutsetningen trenger en sannhetskilde. Oppbevar et lite tilstandsobjekt på serversiden som registrerer det som faktisk er etablert i denne samtalen — ikke det modellen sa at den gjorde.
Når get_customer returnerer, leser dispatcher-en den faktiske nyttelasten og setter et flagg bare hvis posten faktisk er verifisert. Denne tilstanden er beviset for kontrollen.
state = {"customer_id": None, "identity_verified": False}
def handle_get_customer(tool_input, state):
record = lookup_customer(tool_input["query"])
if record and record["identity_status"] == "verified":
state["customer_id"] = record["id"]
state["identity_verified"] = True
return recordSelve kontrollen
Nå kobler du inn forutsetningen. Når modellen ber om process_refund, kontrollerer koden din state["identity_verified"] først. Hvis faktumet ikke er etablert, kaller du ikke refusjonsbackend-en — du returnerer et strukturert verktøyresultat som forteller modellen hvorfor det ble blokkert, og hva den skal gjøre videre.
Det er avgjørende at du returnerer dette som et normalt verktøyresultat som modellen kan lese og handle på, ikke som et kastet unntak som krasjer løkken.
def handle_process_refund(tool_input, state):
if not state["identity_verified"]:
return {
"isError": True,
"errorCategory": "permission",
"isRetryable": False,
"message": "Refund blocked: identity not verified. "
"Call get_customer and verify the ID first."
}
return refund_backend.process(tool_input) # only reachable when verifiedHvorfor en strukturert feil er bedre enn en krasj
En generell feil som "Operation failed" hindrer gjenoppretting — modellen kan ikke se hvorfor det feilet eller hva den skal gjøre videre. En strukturert feil muliggjør intelligent ruting.
Ta med: isError: true, en errorCategory (transient / validation / business / permission), isRetryable, en menneskelesbar message og helst handlingen som ble forsøkt. Her er kategorien permission, og isRetryable er false til forutsetningen er oppfylt — slik vet modellen at den først må verifisere, i stedet for å prøve refusjonen på nytt uten å tenke.
Hooks: Håndheving utenfor verktøyet
Kontrollen i dispatcher-en ovenfor er én form for forutsetning. Til eksamen forventes det også at du kjenner til hooks for den samme oppgaven. En hook for utgående kall fanger opp et verktøyinvokasjonskall og kan blokkere en handling som bryter med retningslinjene — for eksempel en refusjon på over 500 dollar eller enhver refusjon på en uverifisert konto.
Hooks er 100 % deterministiske; prompter er probabilistiske på rundt 90 %. En PostToolUse-hook kan også fange opp et verktøyresultat før modellen i det hele tatt ser det. Uansett håndheves garantien i kode som modellen ikke kan snakke seg rundt.
Lagdeling av de to betingelsene
En reell policy er ofte sammensatt: Blokker refusjonen med mindre identiteten er verifisert OG beløpet er innenfor den tillatte grensen. Begge kontrollene er deterministiske forutsetninger; ingen av dem hører hjemme i en prompt.
Verifiseringskontrollen beskytter hvem; terskelkontrollen beskytter hvor mye. Et brudd på en av dem returnerer et strukturert og handlingsrettet resultat — eskaler til et menneske i terskeltilfellet, eller send modellen tilbake for å verifisere i identitetstilfellet.
def handle_process_refund(tool_input, state):
if not state["identity_verified"]:
return blocked("permission", "Verify identity via get_customer first.")
if tool_input["amount"] > 500:
return blocked("business",
"Amount exceeds $500 policy limit. Use escalate_to_human.")
return refund_backend.process(tool_input)Ikke forveksle dette med iterasjonsgrenser
En forutsetning er en korrekthetsgaranti — den sikrer at et bestemt faktum gjelder før en bestemt handling. Ikke forveksle den med løkkens sikkerhetsnett.
- Du skal fortsatt avslutte basert på
stop_reason, aldri ved å lete etter ord som «ferdig» eller «verifisert» i teksten. - Iterasjonsgrenser er et sikkerhetsnett mot løkker som løper løpsk, aldri den primære stoppmekanismen — og aldri måten du håndhever forretningsregler på.
Forutsetningen er målrettet: Den styrer én handling basert på ett verifisert faktum, deterministisk, mens modellen fortsatt driver samtalen.
Sanntid betyr ingen Batch API
Her er enda en arkitekturfelle. En verifiseringsforutsetning er en blokkerende og tidssensitiv kontroll — refusjonen kan ikke fortsette før den er avklart i den aktive samtalen.
Det utelukker Message Batches API: Den er 50 % billigere, men har et tidsvindu på opptil 24 timer, ingen SLA for forsinkelse og ingen verktøykall over flere turer. Batch er for nattlige revisjoner og rapporter, aldri for en innebygd kontroll som en kunde venter på. Kjør forutsetninger synkront i den agentiske løkken.
Kort sjekk: Håndheving av refusjonsregelen
En løsningsarkitekt må garantere at process_refund aldri kjøres for en kunde hvis identitet ikke er verifisert av get_customer. Handlingen innebærer økonomisk og juridisk risiko. Hvilket design oppfyller kravet?
Oppsummering: Kontroller det i koden
Viktige punkter om programstyrte forhåndsbetingelser:
- Penger, juss og sikkerhet → deterministisk. Instruksjoner treffer omtrent 90 %; hooks og forhåndsbetingelser i kode treffer 100 %.
- Bruk bekreftede fakta som vilkår, ikke fortellinger. Spor den faktiske tilstanden fra
get_customer; blokkerprocess_refundtilidentity_verifieder true. - Grip inn i løkken. Kontroller før verktøyet modellen ba om, kjøres; bruk en hook til å blokkere brudd på regler, for eksempel refusjoner over $500.
- Feil må ha struktur. Returner
isError,errorCategory,isRetryableog en tydelig melding slik at modellen kan komme seg videre. - Hold det synkront. Avslutt ved
stop_reason, aldri ved iterasjonsgrenser eller teksttolking – og bruk aldri Batch API for blokkerende kontroller.
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 «Programmerbare forhåndsbetingelser» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Claude Architect, inkludert «Programmerbare forhåndsbetingelser», 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 «Programmerbare forhåndsbetingelser»?
Blokker refusjoner i kode frem til identiteten er bekreftet. 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 3 av 4.
Hvor lang tid tar leksjonen «Programmerbare forhåndsbetingelser»?
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
- PostToolUse- og utgående kall-hooks
- Deterministisk håndheving kontra prompter
- Programmerbare forhåndsbetingelser
- Strukturerte overleveringsprotokoller