AI Agents · Lección

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.

Lección 3 de 415 pasos

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.

Gratis para empezar

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

  1. Modo JSON y salidas de llamadas a herramientas
  2. Validación de esquemas con Pydantic
  3. Bucles de reparación para salidas malformadas
  4. Instructor / Outlines para garantizar la estructura
← Volver a AI Agents