Herstellussen voor ongeldige uitvoer
Als de JSON niet kan worden geparsed, stuurt u de fout terug naar het model en vraagt u het de uitvoer te herstellen.
Herstellussen voor ongeldige uitvoer is een gratis AI-agenten-les op CoddyKit. Dit is les 3 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject AI-agenten. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus AI-agenten bevat in totaal 4 lessen.
Delen van deze les zijn nog niet vertaald en worden in het Engels weergegeven.
Zelfs strikte modi falen soms
Oudere modellen, randgevallen of aanbieders zonder strikte modus geven soms ongeldige JSON terug. Robuuste agents herstellen dit door het model te vragen zijn uitvoer te repareren.
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.')Waarom dit werkt
Het model ziet de foutmelding en corrigeert die meestal in de volgende beurt. Voeg expliciete instructies toe:
- "Geen proza"
- "Geen markdown-omheiningen"
- "Gebruik exact deze vorm: ..."
Markdown-omheiningen verwijderen
Modellen zetten JSON vaak tussen ```json ... ```. Verwijder die omheiningen vóór het parseren:
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))
Uitsnijden vanaf de eerste accolade
Als er overbodig proza aanwezig is, snijd je de tekst uit vanaf de eerste { tot de laatste bijbehorende }:
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))
Tools die dit voor je doen
- Instructor — combineert Pydantic, reparatielussen en nieuwe pogingen
- Outlines — gegarandeerde gestructureerde uitvoer via gestuurde decodering
- jsonformer — JSON afdwingen token voor token (HF-modellen)
Reparatieprompts die werken
Neem de specifieke foutmelding en een korte herinnering aan de indeling op:
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
'''Kosten van reparatielussen
Elke reparatie is een extra LLM-aanroep. Beperk het aantal nieuwe pogingen (2-3 is genoeg — daarna is de kans klein dat het model herstelt) en registreer reparatiepercentages als kwaliteitsmaatstaf.
Reparatie als kwaliteitssignaal
Als je reparatiepercentage > 5% is, klopt er iets niet: de prompt is onduidelijk, het schema is te complex of het model is te klein. Onderzoek dit.
Alternatief: beperkte decodering
Open-sourcemodellen ondersteunen decodering die door een grammatica wordt beperkt — het model kan helemaal geen ongeldige uitvoer produceren. Outlines, jsonformer en de grammatica's van llama.cpp doen dit.
Alternatief: functies in plaats van een schema
Een toolaanroep afdwingen met de strikte modus is een netter alternatief voor JSON-modus met reparatie. Gebruik dit zodra de aanbieder het ondersteunt.
Slechte uitvoer registreren
Registreer elke gerepareerde uitvoer, zodat je patronen kunt analyseren:
log.warning('Repaired output', extra={'raw': raw, 'error': str(e), 'attempt': attempt})Wanneer je moet opgeven
Als de uitvoer na N reparatiepogingen nog steeds ongeldig is, geef je een fout terug aan de gebruiker — verzin geen terugvaloptie. Eerlijk falen is beter dan stille beschadiging.
Patroon van de reparatielus
Wat is de eenvoudigste eerste stap in een reparatielus?
Samenvatting
Detecteer fouten bij het parseren, voeg ze toe als tool- of gebruikersbericht en vraag het model om de uitvoer te repareren. Beperk het aantal nieuwe pogingen. Geef de voorkeur aan toolaanroepen in de strikte modus om reparatie helemaal overbodig te maken.
Leer AI-agenten met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 60
- Lessen
- 239
Veelgestelde vragen
Is de les “Herstellussen voor ongeldige uitvoer” gratis?
Ja — de volledige tekst van “Herstellussen voor ongeldige uitvoer” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus AI-agenten wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus AI-agenten bevat in totaal 4 lessen.
Wat leer ik in “Herstellussen voor ongeldige uitvoer”?
Als de JSON niet kan worden geparsed, stuurt u de fout terug naar het model en vraagt u het de uitvoer te herstellen. Je oefent met AI-agenten door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met AI-agenten te beginnen?
Ervaring vooraf is niet nodig. AI-agenten op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.
Hoe lang duurt de les “Herstellussen voor ongeldige uitvoer”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over AI-agenten?
Ja. Elke les over AI-agenten bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- JSON-modus en tool-call-uitvoer
- Pydantic-schemavalidatie
- Herstellussen voor ongeldige uitvoer
- Instructor / Outlines voor gegarandeerde structuur