Promptteknik til AI · Lektion

Reparations- og valideringsloops

Ret fejlbehæftet output.

Lektion 4 af 413 trin

Reparations- og valideringsloops er en gratis Promptteknik til AI-lektion på CoddyKit. Dette er lektion 4 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 Promptteknik til AI, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Promptteknik til AI-kurset indeholder 4 lektioner i alt.

Hvorfor reparationssløjfer er nødvendige

Selv med skemaer kan uddata være fejlbehæftede: afkortet JSON på grund af et tokenloft, opdigtede ekstra felter, en streng, hvor der kræves et tal, eller en overtrådt forretningsregel. En reparationssløjfe registrerer fejlen og sender den tilbage til modellen, så den kan rette den.

Det er sikkerhedsnettet, der kan øge en succesrate på 98 % til 99,9 %.

Validerings- og reparationscyklussen

Den klassiske sløjfe: generér, validér, og hvis resultatet er ugyldigt, send en ny prompt med den konkrete fejl, dog højst et begrænset antal forsøg.

def generate_valid(prompt, schema, max_tries=3):
    msgs = [{'role': 'user', 'content': prompt}]
    for _ in range(max_tries):
        out = call_model(msgs)
        ok, err = validate(out, schema)
        if ok:
            return out
        msgs.append({'role': 'assistant', 'content': out})
        msgs.append({'role': 'user',
                     'content': 'Invalid. Fix this error and resend JSON only: ' + err})
    raise ValueError('repair budget exhausted')

Konkrete fejl slår generiske fejl

Kvaliteten af reparationen afhænger af feedbackens præcision. 'Ugyldig JSON' hjælper kun lidt; 'Feltet rating skal være et heltal mellem 1 og 5, men værdien er 7' løser næsten altid problemet i én tur.

Send valideringsværktøjets præcise fejlmeddelelse (sti plus årsag) tilbage til modellen.

def validate(obj, schema):
    v = jsonschema.Draft202012Validator(schema)
    errs = sorted(v.iter_errors(obj), key=lambda e: e.path)
    if not errs:
        return True, None
    msg = '; '.join(f"{list(e.path)}: {e.message}" for e in errs)
    return False, msg

Lagdelt validering

Validering har flere niveauer; kontrollér det billigste først:

  • Syntaktisk — kan det fortolkes som JSON?
  • Strukturel — stemmer det overens med skemaet?
  • Semantisk — opfylder værdierne forretningsregler og invariansbetingelser på tværs af felter?

En rabat kan ikke overstige delsummen, selv om begge værdier er gyldige tal; det er en semantisk kontrol.

def semantic_ok(o):
    return o['discount'] <= o['subtotal'] and o['total'] == o['subtotal'] - o['discount']

Deterministisk forudgående reparation

Før du bruger et modelkald, kan du prøve billige deterministiske rettelser af almindelige fejl:

  • Fjern Markdown-kodeblokke.
  • Udtræk det yderste JSON-objekt fra omgivende prosa.
  • Fjern afsluttende kommaer.

Gå kun videre til reparation med en model, hvis den deterministiske oprydning mislykkes.

def extract_json(text):
    text = text.strip().removeprefix('json').strip()
    start, end = text.find('{'), text.rfind('}')
    if start != -1 and end != -1:
        return text[start:end + 1]
    return text

Håndtering af afkortning

Hvis finish_reason == 'length', er JSON-dataene afskåret; det er nytteløst at reparere fragmentet. Hæv max_tokens, reducér den ønskede datamængde, eller send dataene som en strøm og anmod om en fortsættelse. Skeln mellem afkortning og ugyldige uddata, fordi de kræver modsatrettede reaktioner.

if resp.choices[0].finish_reason == 'length':
    # do NOT feed truncated JSON back; regenerate with more room
    return retry_with(max_tokens=resp_max * 2)

Begræns sløjfen

Ubegrænset reparation er en risiko for omkostninger og forsinkelse, og en fastlåst model kan køre i sløjfe for evigt. Sæt altid en grænse for antallet af forsøg, tilføj et budget pr. forespørgsel, og definér en reserveplan (degradér på en kontrolleret måde, læg arbejdet i kø til menneskelig gennemgang, eller returnér en sikker standardværdi).

try:
    data = generate_valid(prompt, schema, max_tries=3)
except ValueError:
    log_for_review(prompt)
    data = SAFE_DEFAULT

Reparation i værktøjskald

Ved funktionskald er reparationskanalen værktøjsresultatet. Returnér en struktureret fejl, så modellen retter sig selv på næste tur; ingen separat sløjfe er nødvendig.

msgs.append({'role': 'tool', 'tool_call_id': call.id,
  'content': json.dumps({'error': 'amount must be positive', 'got': args['amount']})})
# next model turn will re-issue the call with a corrected argument

Idempotens og bivirkninger

Når en reparationssløjfe omslutter en handling og ikke kun generering, skal du sikre, at gentagelser er idempotente. Brug idempotensnøgler, så et genudsendt kald ikke opkræver dobbelt eller opretter en post flere gange. Validér før du udfører bivirkningerne, aldrig efter.

Overvåg reparationsrater

Reparationsraten er en tidlig kvalitetsindikator. En stigende rate betyder, at der kan være en regression i prompten, et for stramt skema eller modeldrift. Log antal forsøg pr. succes og de vigtigste fejlstier, og opret en alarm, når de stiger kraftigt.

metrics.histogram('llm.repair.attempts', tries)
metrics.increment('llm.repair.error', tags={'path': top_error_path})

Kombinér begrænsninger med reparation

Den stærkeste behandlingskæde lægger flere forsvarslag oven på hinanden: begrænset afkodning eller streng skematilstand for at minimere fejl, deterministisk oprydning til billige rettelser og en begrænset reparationssløjfe med en model til de få resterende fejl. Intet enkelt lag er tilstrækkeligt alene.

Hurtigt tjek

API'et returnerer finish_reason med værdien length og afskåret JSON. Hvad er den korrekte reaktion?

Opsummering

Robuste reparationsforløb:

  • Validér på flere niveauer: syntaktisk, strukturelt og semantisk.
  • Send præcise fejl på stiniveau tilbage til modellen.
  • Prøv deterministisk oprydning, før du betaler for et modelkald.
  • Registrér afkortning separat, og generér på ny.
  • Begræns antallet af forsøg, sørg for idempotens, og overvåg reparationsraterne.

Du har gennemført struktureret generering. Næste kursus: sikkerhedsbarrierer og validering af uddata.

Gratis at komme i gang

Lær Promptteknik til AI 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
53
Lektioner
199

Ofte stillede spørgsmål

Er lektionen “Reparations- og valideringsloops” gratis?

Ja — alle 3 lektioner i læringssporet Promptteknik til AI, inklusive “Reparations- og valideringsloops”, 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. Promptteknik til AI-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Reparations- og valideringsloops”?

Ret fejlbehæftet output. Du øver dig i Promptteknik til AI 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å Promptteknik til AI?

Der kræves ingen tidligere erfaring. Promptteknik til AI 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 4 af 4.

Hvor lang tid tager lektionen “Reparations- og valideringsloops”?

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 Promptteknik til AI-lektion?

Ja. Alle Promptteknik til AI-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. Hvorfor struktureret output
  2. JSON Schema i prompts
  3. Tool- og function-schemas
  4. Reparations- og valideringsloops
← Tilbage til Promptteknik til AI