Bucles de reparación para salidas malformadas
Si el JSON no se puede analizar, envíe el error al modelo y pídale que corrija la salida.
Bucles de reparación para salidas malformadas es una lección gratuita de AI Agents en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de AI Agents, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de AI Agents incluye 4 lecciones en total.
Partes de esta lección aún no han sido traducidas y se muestran en inglés.
Incluso los modos estrictos fallan a veces
Los modelos antiguos, los casos límite o los proveedores sin modo estricto devuelven ocasionalmente JSON mal formado. Los agentes robustos se recuperan pidiendo al modelo que repare su salida.
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.')Por qué funciona
El modelo ve el mensaje de error y normalmente corrige el problema en el turno siguiente. Añada instrucciones explícitas:
- "Sin prosa"
- "Sin bloques de código Markdown"
- "Coincida exactamente con esta estructura: ..."
Eliminar los bloques de código Markdown
Los modelos suelen envolver el JSON en ```json ... ```. Elimínelos antes de analizarlo:
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))
Extraer desde el primer corchete
Si hay prosa adicional, extraiga el contenido desde el primer { hasta el último } correspondiente:
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))
Herramientas que hacen esto por usted
- Instructor: combina Pydantic, bucles de reparación y reintentos
- Outlines: ofrece salidas estructuradas garantizadas mediante decodificado guiado
- jsonformer: fuerza el JSON token a token (modelos de HF)
Indicaciones de reparación eficaces
Incluya el mensaje de error específico y un breve recordatorio del formato:
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
'''Coste de los bucles de reparación
Cada reparación implica otra llamada al LLM. Limite los reintentos (2 o 3 son suficientes; después de eso, es poco probable que el modelo se recupere) y registre las tasas de reparación como métrica de calidad.
La reparación como indicador de calidad
Si la tasa de reparación es > 5 %, algo va mal: la indicación no es clara, el esquema es demasiado complejo o el modelo es demasiado pequeño. Investíguelo.
Alternativa: decodificado restringido
Los modelos de código abierto admiten el decodificado restringido por gramática: el modelo no puede producir una salida no válida. Outlines, jsonformer y las gramáticas de llama.cpp hacen esto.
Alternativa: funciones en lugar de esquemas
Forzar una llamada a una herramienta con el modo estricto es una alternativa más limpia que combinar el modo JSON con reparaciones. Úselo siempre que el proveedor lo admita.
Registrar las salidas incorrectas
Registre cada salida reparada para poder analizar los patrones:
log.warning('Repaired output', extra={'raw': raw, 'error': str(e), 'attempt': attempt})Cuándo darse por vencido
Si después de N intentos de reparación la salida sigue siendo no válida, devuelva un error al usuario; no invente una solución alternativa. Un fallo honesto es mejor que una corrupción silenciosa.
Patrón de bucle de reparación
¿Cuál es el primer paso más sencillo en un bucle de reparación?
Resumen
Detecte los errores de análisis, añádalos como mensaje de herramienta o de usuario y pida al modelo que repare la salida. Limite los reintentos. Prefiera las llamadas a herramientas en modo estricto para eliminar por completo la necesidad de reparar.
Aprende AI Agents con un tutor de IA — gratis
Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.
- Cursos
- 60
- Lecciones
- 239
Preguntas frecuentes
¿La lección «Bucles de reparación para salidas malformadas» es gratis?
Sí — el texto completo de «Bucles de reparación para salidas malformadas» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de AI Agents, actualiza a CoddyKit PRO. El curso de AI Agents incluye 4 lecciones en total.
¿Qué aprenderé en «Bucles de reparación para salidas malformadas»?
Si el JSON no se puede analizar, envíe el error al modelo y pídale que corrija la salida. Practicas AI Agents con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar AI Agents?
No se requiere experiencia previa. AI Agents en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «Bucles de reparación para salidas malformadas»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de AI Agents?
Sí. Cada lección de AI Agents incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Modo JSON y salidas de llamadas a herramientas
- Validación de esquemas con Pydantic
- Bucles de reparación para salidas malformadas
- Instructor / Outlines para garantizar la estructura