AI Prompt Engineering · Lección

Bucles de reparación y validación

Corrija salidas con formato incorrecto.

Lección 4 de 413 pasos

Bucles de reparación y validación es una lección gratuita de AI Prompt Engineering en CoddyKit. Esta es la lección 4 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 Prompt Engineering, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de AI Prompt Engineering incluye 4 lecciones en total.

Por qué existen los bucles de reparación

Incluso con esquemas, la salida puede fallar: JSON truncado por un límite de tokens, campos adicionales alucinados, una cadena donde se requería un número o una regla de negocio incumplida. Un bucle de reparación detecta el fallo y se lo devuelve al modelo para que lo corrija.

Es la red de seguridad que convierte una tasa de éxito del 98 % en una del 99,9 %.

Ciclo de validación y reparación

El bucle canónico es: generar, validar y, si no es válido, volver a solicitar la respuesta con el error específico, hasta un número limitado de intentos.

def generate_valid(prompt, schema, max_tries=3):
    msgs = [{'role': 'user', 'content': prompt}]
    for _ in range(max_tries):
        out = call_model(msgs)
        ok, err = validate(out, schema)
        if ok:
            return out
        msgs.append({'role': 'assistant', 'content': out})
        msgs.append({'role': 'user',
                     'content': 'Invalid. Fix this error and resend JSON only: ' + err})
    raise ValueError('repair budget exhausted')

Los errores específicos superan a los genéricos

La calidad de la reparación depende de la precisión de los comentarios. 'JSON no válido' ayuda poco; 'El campo rating debe ser un entero entre 1 y 5, pero se obtuvo 7' casi siempre lo corrige en un solo turno.

Devuelva al modelo el mensaje de error exacto del validador, incluida la ruta y el motivo.

def validate(obj, schema):
    v = jsonschema.Draft202012Validator(schema)
    errs = sorted(v.iter_errors(obj), key=lambda e: e.path)
    if not errs:
        return True, None
    msg = '; '.join(f"{list(e.path)}: {e.message}" for e in errs)
    return False, msg

Validación por capas

La validación tiene varios niveles; compruebe primero el más barato:

  • Sintáctica — ¿se puede analizar como JSON?
  • Estructural — ¿coincide con el esquema?
  • Semántica — ¿los valores cumplen las reglas de negocio y las invariantes entre campos?

Un descuento no puede superar el subtotal aunque ambos sean números válidos; esa es una comprobación semántica.

def semantic_ok(o):
    return o['discount'] <= o['subtotal'] and o['total'] == o['subtotal'] - o['discount']

Reparación determinista previa

Antes de realizar una llamada al modelo, pruebe correcciones deterministas y económicas para los defectos habituales:

  • Elimine los bloques de código de Markdown.
  • Extraiga el objeto JSON más externo de la prosa que lo rodea.
  • Elimine las comas finales.

Recurra a una reparación mediante el modelo solo si falla la limpieza determinista.

def extract_json(text):
    text = text.strip().removeprefix('json').strip()
    start, end = text.find('{'), text.rfind('}')
    if start != -1 and end != -1:
        return text[start:end + 1]
    return text

Gestión de la truncación

Si finish_reason == 'length', el JSON está incompleto; reparar el fragmento es inútil. En su lugar, aumente max_tokens, reduzca la carga solicitada o transmita la respuesta y solicite una continuación. Distinga la truncación de una salida mal formada, porque requieren respuestas opuestas.

if resp.choices[0].finish_reason == 'length':
    # do NOT feed truncated JSON back; regenerate with more room
    return retry_with(max_tokens=resp_max * 2)

Limitar el bucle

Una reparación sin límites supone un riesgo de costes y latencia, y un modelo atascado podría repetir el bucle indefinidamente. Limite siempre los intentos, añada un presupuesto por solicitud y defina una alternativa (degradar el servicio de forma controlada, enviar la solicitud a revisión humana o devolver un valor predeterminado seguro).

try:
    data = generate_valid(prompt, schema, max_tries=3)
except ValueError:
    log_for_review(prompt)
    data = SAFE_DEFAULT

Reparación dentro de las llamadas a herramientas

En las llamadas de funciones, el canal de reparación es el resultado de la herramienta. Devuelva un error estructurado y el modelo se autocorregirá en el siguiente turno; no hace falta un bucle independiente.

msgs.append({'role': 'tool', 'tool_call_id': call.id,
  'content': json.dumps({'error': 'amount must be positive', 'got': args['amount']})})
# next model turn will re-issue the call with a corrected argument

Idempotencia y efectos secundarios

Cuando un bucle de reparación envuelve una acción (y no solo una generación), asegúrese de que los reintentos sean idempotentes. Use claves de idempotencia para que una llamada repetida no cobre dos veces ni duplique un registro. Valide antes de confirmar los efectos secundarios, nunca después.

Supervisar las tasas de reparación

La tasa de reparación es un indicador temprano de calidad. Un aumento de esta tasa indica una regresión del prompt, un esquema demasiado estricto o una deriva del modelo. Registre los intentos por éxito y las principales rutas de error, y genere una alerta cuando se disparen.

metrics.histogram('llm.repair.attempts', tries)
metrics.increment('llm.repair.error', tags={'path': top_error_path})

Combinar restricciones con reparación

La canalización más sólida combina varias defensas: decodificación restringida o un modo de esquema estricto para minimizar los fallos, limpieza determinista para las correcciones económicas y un bucle limitado de reparación mediante el modelo para los casos residuales poco frecuentes. Ninguna capa es suficiente por sí sola.

Comprobación rápida

La API devuelve finish_reason length junto con un JSON truncado. ¿Cuál es la respuesta correcta?

Repaso

Canalizaciones de reparación sólidas:

  • Valide por niveles: sintáctico, estructural y semántico.
  • Devuelva al modelo errores precisos y asociados a rutas concretas.
  • Pruebe la limpieza determinista antes de pagar por una llamada al modelo.
  • Detecte la truncación por separado y vuelva a generar la respuesta.
  • Limite los intentos, garantice la idempotencia y supervise las tasas de reparación.

Ha completado la generación estructurada. Próximo curso: barreras de seguridad y validación de salidas.

Gratis para empezar

Aprende AI Prompt Engineering 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
53
Lecciones
199

Preguntas frecuentes

¿La lección «Bucles de reparación y validación» es gratis?

Sí — el texto completo de «Bucles de reparación y validación» 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 Prompt Engineering, actualiza a CoddyKit PRO. El curso de AI Prompt Engineering incluye 4 lecciones en total.

¿Qué aprenderé en «Bucles de reparación y validación»?

Corrija salidas con formato incorrecto. Practicas AI Prompt Engineering 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 Prompt Engineering?

No se requiere experiencia previa. AI Prompt Engineering 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 4 de 4.

¿Cuánto tiempo toma la lección «Bucles de reparación y validación»?

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 Prompt Engineering?

Sí. Cada lección de AI Prompt Engineering 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. Por qué usar salidas estructuradas
  2. JSON Schema en prompts
  3. Schemas de herramientas y funciones
  4. Bucles de reparación y validación
← Volver a AI Prompt Engineering