0Pricing
AI Agents · Lezione

Cicli di correzione per output non validi

Se il JSON non viene analizzato, invii l'errore al modello e gli chieda di correggere l'output.

Cicli di correzione per output non validi è una lezione AI Agents gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento AI Agents, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso AI Agents include 4 lezioni in totale.

Parti di questa lezione non sono ancora state tradotte e vengono mostrate in inglese.

Anche le modalità strict a volte falliscono

I modelli meno recenti, i casi limite o i provider non strict restituiscono occasionalmente JSON malformato. Gli agenti robusti recuperano chiedendo al modello di correggere il proprio output.

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.')

Perché funziona

Il modello vede il messaggio di errore e di solito corregge l'output al turno successivo. Aggiungere istruzioni esplicite:

  • "Nessun testo esplicativo"
  • "Nessun delimitatore Markdown"
  • "Rispettare esattamente questa struttura: ..."

Rimuovere i delimitatori Markdown

I modelli racchiudono spesso il JSON in ```json ... ```. Rimuoverli prima del parsing:

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))

Estrazione tra la prima e l'ultima parentesi

Se è presente testo aggiuntivo, estrarre dalla prima { fino all'ultima } corrispondente:

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))

Strumenti che lo fanno al posto vostro

  • Instructor — combina Pydantic, cicli di correzione e nuovi tentativi
  • Outlines — output strutturato garantito tramite decodifica guidata
  • jsonformer — applica il vincolo JSON token per token (modelli HF)

Prompt di correzione efficaci

Includere il messaggio di errore specifico e un breve promemoria sul 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
'''

Costo dei cicli di correzione

Ogni correzione richiede un'altra chiamata LLM. Limitare i tentativi (2-3 sono sufficienti: oltre questo numero, è improbabile che il modello riesca a recuperare) e registrare il tasso di correzione come metrica di qualità.

La correzione come indicatore di qualità

Se il tasso di correzione è > 5%, c'è un problema: il prompt non è chiaro, lo schema è troppo complesso oppure il modello è troppo piccolo. Analizzare la situazione.

Alternativa: decodifica vincolata

I modelli open source supportano la decodifica vincolata dalla grammatica: il modello non può produrre alcun output non valido. Outlines, jsonformer e le grammatiche di llama.cpp svolgono questa funzione.

Alternativa: funzioni invece dello schema

Forzare una chiamata a uno strumento con la modalità strict è un'alternativa più pulita rispetto a modalità JSON + correzione. Usarla ogni volta che il provider la supporta.

Registrare gli output errati

Registrare ogni output corretto per poter analizzare gli schemi ricorrenti:

log.warning('Repaired output', extra={'raw': raw, 'error': str(e), 'attempt': attempt})

Quando arrendersi

Se dopo N tentativi di correzione l'output è ancora non valido, restituire un errore all'utente, senza inventare un fallback. Un fallimento esplicito è preferibile a una corruzione silenziosa.

Schema del ciclo di correzione

Qual è il primo passaggio più semplice in un ciclo di correzione?

Riepilogo

Rilevare gli errori di parsing, aggiungerli come messaggio tool/user e chiedere al modello di correggere l'output. Limitare i tentativi. Preferire le chiamate a strumenti in modalità strict per eliminare completamente la necessità di correzioni.

Domande Frequenti

La lezione «Cicli di correzione per output non validi» è gratuita?

Sì — il testo completo di «Cicli di correzione per output non validi» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso AI Agents, passa a CoddyKit PRO. Il corso AI Agents include 4 lezioni in totale.

Cosa imparerò in «Cicli di correzione per output non validi»?

Se il JSON non viene analizzato, invii l'errore al modello e gli chieda di correggere l'output. Eserciti AI Agents con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare AI Agents?

Non è richiesta alcuna esperienza precedente. AI Agents su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «Cicli di correzione per output non validi»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione AI Agents?

Sì. Ogni lezione AI Agents include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Modalità JSON e output delle tool call
  2. Convalida dello schema Pydantic
  3. Cicli di correzione per output non validi
  4. Instructor / Outlines per una struttura garantita
← Torna a AI Agents