AI-agenter · leksjon

Reparasjonsløkker for ugyldige utdata

Hvis JSON-en ikke kan tolkes, sender du feilen tilbake til modellen og ber den rette utdataene.

Leksjon 3 av 415 trinn

Reparasjonsløkker for ugyldige utdata er en gratis leksjon i AI-agenter på CoddyKit. Dette er leksjon 3 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i AI-agenter, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i AI-agenter inneholder totalt 4 leksjoner.

Deler av denne leksjonen er ennå ikke oversatt og vises på engelsk.

Selv strict mode kan feile iblant

Eldre modeller, kanttilfeller eller leverandører uten strict mode returnerer av og til ugyldig JSON. Robuste agenter gjenoppretter ved å be modellen reparere utdataene sine.

Basic Repair Loop

from pydantic import ValidationError
import json

def call_with_repair(messages, schema, max_attempts=3):
    for attempt in range(max_attempts):
        response = client.chat.completions.create(
            model='gpt-4o-mini',
            messages=messages,
            response_format={'type': 'json_object'}
        )
        raw = response.choices[0].message.content
        try:
            return schema.model_validate_json(raw)
        except (json.JSONDecodeError, ValidationError) as e:
            messages.append({'role': 'assistant', 'content': raw})
            messages.append({
                'role': 'user',
                'content': f'That output failed to validate: {e}.\nReturn ONLY valid JSON that matches the schema. No prose, no markdown fences.'
            })
    raise RuntimeError('Could not get valid output after repair attempts.')

Hvorfor det fungerer

Modellen ser feilmeldingen og retter vanligvis feilen i neste runde. Legg til tydelige instruksjoner:

  • "Ingen prosa"
  • "Ingen markdown-gjerder"
  • "Følg nøyaktig denne strukturen: ..."

Fjerne markdown-gjerder

Modeller pakker ofte JSON inn i ```json ... ```. Fjern dette før parsing:

import re

def extract_json(text):
    m = re.search(r'```(?:json)?\s*(.*?)```', text, re.S)
    if m:
        return m.group(1).strip()
    return text.strip()

sample = '```json\n{"name": "Alice"}\n```'
print(extract_json(sample))

Utsnitt fra første hakeparentes

Hvis det finnes overflødig prosa, kan du ta et utsnitt fra første { til siste samsvarende }:

def find_json_slice(text):
    start = text.find('{')
    if start == -1:
        return None
    depth = 0
    for i, c in enumerate(text[start:], start):
        if c == '{': depth += 1
        if c == '}':
            depth -= 1
            if depth == 0:
                return text[start:i+1]
    return None

sample = 'Here is your answer: {"name": "Alice", "age": 30} - hope that helps!'
print(find_json_slice(sample))

Verktøy som gjør dette for Dem

  • Instructor — kombinerer Pydantic, reparasjonssløyfer og nye forsøk
  • Outlines — garanterer strukturerte utdata via veiledet dekoding
  • jsonformer — håndhever JSON token for token (HF-modeller)

Reparasjonsprompter som fungerer

Ta med den spesifikke feilmeldingen og en kort påminnelse om formatet:

repair_prompt = f'''
Your previous output had this error: {error}

Fix the output. Requirements:
- Valid JSON only
- Match this schema: {json.dumps(schema)}
- No prose, no markdown fences
'''

Kostnaden ved reparasjonssløyfer

Hver reparasjon er et nytt kall til en LLM. Begrens antallet nye forsøk (2–3 er nok — etter det er det lite sannsynlig at modellen klarer å gjenopprette), og logg reparasjonsraten som et kvalitetsmål.

Reparasjon som kvalitetssignal

Hvis reparasjonsraten er > 5 %, er noe galt: prompten er uklar, schemaet er for komplekst, eller modellen er for liten. Undersøk dette.

Alternativ: begrenset dekoding

Modeller med åpen kildekode støtter grammatikkbegrenset dekoding — modellen kan ikke produsere ugyldige utdata i det hele tatt. Outlines, jsonformer og grammatikkene i llama.cpp gjør dette.

Alternativ: funksjoner i stedet for schema

Å tvinge frem et verktøykall med strict mode er et ryddigere alternativ til JSON mode + reparasjon. Bruk dette når leverandøren støtter det.

Logge ugyldige utdata

Logg alle reparerte utdata slik at mønstre kan analyseres:

log.warning('Repaired output', extra={'raw': raw, 'error': str(e), 'attempt': attempt})

Når De bør gi opp

Hvis utdataene fortsatt er ugyldige etter N reparasjonsforsøk, returnerer De en feil til brukeren — ikke finn på en reserveverdi. Ærlig feiling er bedre enn skjult korrupsjon.

Mønster for reparasjonssløyfe

Hva er det enkleste første steget i en reparasjonssløyfe?

Oppsummering

Oppdag parsefeil, legg dem til som en verktøy- eller brukermelding, og be modellen reparere utdataene. Begrens antallet nye forsøk. Foretrekk verktøykall i strict mode for å fjerne behovet helt.

Gratis å komme i gang

Lær deg AI-agenter 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
60
Leksjoner
239

Ofte stilte spørsmål

Er leksjonen «Reparasjonsløkker for ugyldige utdata» gratis?

Ja – hele teksten i «Reparasjonsløkker for ugyldige utdata» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av AI-agenter-kurset, kan du oppgradere til CoddyKit PRO. Kurset i AI-agenter inneholder totalt 4 leksjoner.

Hva lærer jeg i «Reparasjonsløkker for ugyldige utdata»?

Hvis JSON-en ikke kan tolkes, sender du feilen tilbake til modellen og ber den rette utdataene. Du øver på AI-agenter 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 AI-agenter?

Ingen tidligere erfaring er nødvendig. AI-agenter 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 «Reparasjonsløkker for ugyldige utdata»?

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 AI-agenter-leksjonen?

Ja. Alle AI-agenter-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

  1. JSON-modus og utdata fra verktøykall
  2. Validering av Pydantic-skjema
  3. Reparasjonsløkker for ugyldige utdata
  4. Instructor / Outlines for garantert struktur
← Tilbake til AI-agenter