Boucles de correction des sorties malformées
Si le JSON ne peut pas être analysé, renvoyez l’erreur au modèle et demandez-lui de corriger la sortie.
Boucles de correction des sorties malformées est une leçon AI Agents gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage AI Agents, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours AI Agents comprend 4 leçons au total.
Certaines parties de cette leçon n'ont pas encore été traduites et s'affichent en anglais.
Même les modes stricts échouent parfois
Les anciens modèles, les cas limites ou les fournisseurs ne prenant pas en charge le mode strict renvoient parfois un JSON mal formé. Les agents robustes récupèrent la situation en demandant au modèle de corriger sa sortie.
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.')Pourquoi cela fonctionne
Le modèle voit le message d’erreur et le corrige généralement au tour suivant. Ajoutez des instructions explicites :
- "Aucune prose"
- "Aucune clôture Markdown"
- "Respectez exactement cette structure : ..."
Supprimer les clôtures Markdown
Les modèles entourent souvent le JSON de ```json ... ```. Supprimez ces clôtures avant l’analyse :
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))
Découpage entre les premières accolades
En présence de prose superflue, découpez depuis le premier { jusqu’à la dernière } correspondante :
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))
Outils qui s’en chargent pour vous
- Instructor — associe Pydantic, les boucles de correction et les nouvelles tentatives
- Outlines — garantit les sorties structurées grâce au décodage guidé
- jsonformer — impose le JSON jeton par jeton (modèles HF)
Invites de correction efficaces
Incluez le message d’erreur précis ainsi qu’un bref rappel du format :
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
'''Coût des boucles de correction
Chaque correction constitue un nouvel appel au LLM. Limitez les nouvelles tentatives (2 ou 3 suffisent : au-delà, le modèle a peu de chances de récupérer) et journalisez le taux de correction comme indicateur de qualité.
La correction comme indicateur de qualité
Si votre taux de correction dépasse 5 %, un problème se pose : invite peu claire, schéma trop complexe ou modèle trop petit. Cherchez-en la cause.
Alternative : décodage contraint
Les modèles open source prennent en charge le décodage contraint par une grammaire : le modèle ne peut produire aucune sortie invalide. Outlines, jsonformer et les grammaires de llama.cpp permettent cela.
Alternative : les fonctions plutôt que le schéma
Forcer un appel d’outil avec le mode strict constitue une alternative plus propre que le mode JSON accompagné d’une correction. Utilisez cette solution dès que le fournisseur la prend en charge.
Journaliser les sorties incorrectes
Journalisez chaque sortie corrigée afin de pouvoir analyser les tendances :
log.warning('Repaired output', extra={'raw': raw, 'error': str(e), 'attempt': attempt})Quand abandonner
Si la sortie reste invalide après N tentatives de correction, renvoyez une erreur à l’utilisateur : n’inventez pas de solution de repli. Un échec honnête vaut mieux qu’une corruption silencieuse.
Modèle de boucle de correction
Quelle est la première étape la plus simple d’une boucle de correction ?
Récapitulatif
Détectez les erreurs d’analyse, ajoutez-les comme message d’outil ou d’utilisateur, puis demandez au modèle de corriger sa sortie. Limitez les nouvelles tentatives. Préférez les appels d’outils en mode strict pour éliminer entièrement ce besoin.
Questions Fréquemment Posées
La leçon « Boucles de correction des sorties malformées » est-elle gratuite ?
Oui — le texte complet de « Boucles de correction des sorties malformées » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours AI Agents, passe à CoddyKit PRO. Le cours AI Agents comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Boucles de correction des sorties malformées » ?
Si le JSON ne peut pas être analysé, renvoyez l’erreur au modèle et demandez-lui de corriger la sortie. Tu pratiques AI Agents avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer AI Agents ?
Aucune expérience préalable n'est requise. AI Agents sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.
Combien de temps prend la leçon « Boucles de correction des sorties malformées » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon AI Agents ?
Oui. Chaque leçon AI Agents inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Mode JSON et sorties d’appels d’outils
- Validation de schéma avec Pydantic
- Boucles de correction des sorties malformées
- Instructor / Outlines pour une structure garantie