AI Prompt Engineering · Lezione

Cicli di correzione e validazione

Correggere output non validi.

Lezione 4 di 413 passaggi

Cicli di correzione e validazione è una lezione AI Prompt Engineering gratuita su CoddyKit. Questa è la lezione 4 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 Prompt Engineering, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso AI Prompt Engineering include 4 lezioni in totale.

Perché esistono i cicli di riparazione

Anche con gli schemi, l'output può non essere valido: JSON troncato per un limite di token, campi aggiuntivi allucinati, una stringa dove era richiesto un numero o una regola di business violata. Un ciclo di riparazione rileva il problema e lo restituisce al modello perché lo corregga.

È la rete di sicurezza che porta un tasso di successo del 98% al 99,9%.

Ciclo di validazione e riparazione

Il ciclo canonico è: generare, convalidare e, se l'output non è valido, inviare nuovamente il prompt con l'errore specifico, fino a un numero massimo di tentativi.

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

Gli errori specifici sono meglio di quelli generici

La qualità della riparazione dipende dalla precisione del feedback. 'JSON non valido' è poco utile; 'Il campo rating deve essere un intero compreso tra 1 e 5, ma è stato ricevuto 7' lo corregge quasi sempre in un solo turno.

Trasmetta al modello il messaggio di errore esatto del validatore (percorso più motivazione).

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

Validazione a livelli

La validazione ha più livelli; verifichi prima quelli meno costosi:

  • Sintattico — viene analizzato come JSON?
  • Strutturale — corrisponde allo schema?
  • Semantico — i valori rispettano le regole di business e gli invarianti tra campi?

Uno sconto non può superare il subtotale anche se entrambi sono numeri validi; questo è un controllo semantico.

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

Pre-riparazione deterministica

Prima di effettuare una chiamata al modello, provi correzioni deterministiche economiche per i difetti comuni:

  • Rimuova i delimitatori dei blocchi di codice Markdown.
  • Estragga l'oggetto JSON più esterno dalla prosa circostante.
  • Rimuova le virgole finali.

Passi alla riparazione tramite modello solo se la pulizia deterministica non riesce.

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

Gestire il troncamento

Se finish_reason == 'length', il JSON è troncato; riparare il frammento è inutile. Aumenti invece max_tokens, riduca il payload richiesto oppure trasmetta in streaming e richieda una continuazione. Distingua il troncamento dall'output malformato, perché richiedono risposte opposte.

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)

Limitare il ciclo

Una riparazione senza limiti comporta rischi di costi e latenza, e un modello bloccato può entrare in un ciclo infinito. Limiti sempre i tentativi, aggiunga un budget per richiesta e definisca un fallback (riduca la funzionalità in modo controllato, accodi la richiesta per una revisione umana oppure restituisca un valore predefinito sicuro).

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

Riparazione nelle chiamate agli strumenti

Per il function calling, il canale di riparazione è il risultato dello strumento. Restituisca un errore strutturato e il modello si autocorreggerà al turno successivo, senza bisogno di un ciclo separato.

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

Idempotenza ed effetti collaterali

Quando un ciclo di riparazione avvolge un'azione (non solo la generazione), si assicuri che i tentativi siano idempotenti. Utilizzi chiavi di idempotenza affinché una chiamata ripetuta non addebiti due volte né duplichi un record. Convalidi prima di applicare gli effetti collaterali, mai dopo.

Monitorare i tassi di riparazione

Il tasso di riparazione è un indicatore anticipatore della qualità. Un aumento indica una regressione del prompt, uno schema troppo rigido o una deriva del modello. Registri il numero di tentativi per successo e i principali percorsi di errore, e generi un avviso quando aumentano bruscamente.

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

Combinare vincoli e riparazione

La pipeline più solida stratifica le difese: decodifica vincolata o modalità con schema rigido per ridurre al minimo gli errori, pulizia deterministica per le correzioni economiche e un ciclo di riparazione tramite modello, limitato, per i rari errori residui. Nessun singolo livello è sufficiente da solo.

Verifica rapida

L'API restituisce finish_reason length con JSON troncato. Qual è la risposta corretta?

Riepilogo

Pipeline di riparazione robuste:

  • Convalidi su più livelli: sintattico, strutturale, semantico.
  • Restituisca al modello errori precisi a livello di percorso.
  • Provi la pulizia deterministica prima di pagare il costo di una chiamata al modello.
  • Rilevi separatamente il troncamento e rigeneri l'output.
  • Limiti i tentativi, garantisca l'idempotenza e monitori i tassi di riparazione.

Ha completato la generazione strutturata. Il prossimo corso riguarda i guardrail e la validazione dell'output.

Gratis per iniziare

Impara AI Prompt Engineering con un tutor IA — gratis

Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.

Corsi
53
Lezioni
199

Domande Frequenti

La lezione «Cicli di correzione e validazione» è gratuita?

Sì — il testo completo di «Cicli di correzione e validazione» è 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 Prompt Engineering, passa a CoddyKit PRO. Il corso AI Prompt Engineering include 4 lezioni in totale.

Cosa imparerò in «Cicli di correzione e validazione»?

Correggere output non validi. Eserciti AI Prompt Engineering 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 Prompt Engineering?

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

Quanto tempo richiede la lezione «Cicli di correzione e validazione»?

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

Sì. Ogni lezione AI Prompt Engineering 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. Perché usare un output strutturato
  2. JSON Schema nei prompt
  3. Schema di tool e funzioni
  4. Cicli di correzione e validazione
← Torna a AI Prompt Engineering