Diagnosticare output imprevisti
Classifichi i tipi di errore: risposta errata, formato errato, fuori tema e allucinazione
Diagnosticare output imprevisti è una lezione AI Prompt Engineering gratuita su CoddyKit. Questa è la lezione 1 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.
Quando i prompt falliscono
Anche prompt formulati con cura possono produrre risultati errati. Diagnosticare gli errori richiede una tassonomia — una classificazione del tipo di errore che si è verificato. Senza classificazione, il debugging diventa un tentativo alla cieca. Le quattro categorie principali di errore sono: risposta errata, formato errato, risposta fuori tema e allucinazione.
Tipo di errore 1: risposta errata
Una risposta errata è un errore fattuale: il modello ha fornito una risposta nel formato corretto e sull'argomento corretto, ma il contenuto non è corretto.
Esempi: date, statistiche, nomi, codice contenente un bug logico. Questo è l'errore più difficile da rilevare automaticamente, perché in superficie l'output sembra corretto.
- Causa: data limite dei dati di addestramento, fatto raro o errore di ragionamento in più passaggi
- Rilevamento: confronto con i dati di riferimento, revisione umana o chiamata a un LLM di verifica
# Example: wrong answer failure
prompt = 'What year was Python first released?'
response = 'Python was first released in 1994.' # Wrong — it was 1991
# Ground truth check
GROUND_TRUTH = '1991'
correct = GROUND_TRUTH in response
print(f'Correct: {correct}') # FalseTipo di errore 2: formato errato
Un errore di formato errato si verifica quando il modello ha risposto alla domanda corretta con le informazioni corrette, ma ha ignorato l'istruzione di formattazione.
Esempi: ha restituito testo semplice quando era richiesto JSON, ha aggiunto markdown quando era richiesto testo semplice, ha restituito un elenco quando era richiesto un singolo valore.
- Causa: istruzione di formattazione nascosta in un prompt lungo, istruzioni in conflitto, modello che ignora le istruzioni a bassa priorità
- Rilevamento: errore di analisi JSON, mancata corrispondenza con un'espressione regolare, errore di convalida dello schema
import json
response_text = 'Sure! Here is the result: {"name": "Alice", "age": 30}'
try:
data = json.loads(response_text)
print('Format OK:', data)
except json.JSONDecodeError as e:
print(f'FORMAT FAILURE: {e}')
# 'Sure! Here is the result:' prefix broke JSON parsingTipo di errore 3: risposta fuori tema
Un errore fuori tema significa che il modello ha risposto a una domanda diversa da quella posta. La risposta può essere corretta nei fatti e ben formattata, ma non risponde all'effettivo intento dell'utente.
Esempi: è stata richiesta una funzione Python, ma è stata ricevuta una funzione JavaScript; è stata richiesta una risposta di una sola riga, ma è stata ricevuta un'intera trattazione; è stato chiesto di correggere un bug, ma è stata ricevuta una spiegazione del bug invece della correzione.
- Causa: istruzione ambigua, contesto in conflitto, deriva dell'attività nelle conversazioni lunghe
# Off-topic example
prompt = 'Write a Python function that reverses a list.'
response = '''
In JavaScript, you can reverse an array like this:
const reversed = arr.reverse();
'''
# Detection: check that output contains the correct language keyword
def check_language(response, expected_lang='def '):
if expected_lang not in response:
print(f'OFF-TOPIC FAILURE: expected {expected_lang} in response')
return False
return True
check_language(response) # False — no Python defTipo di errore 4: allucinazione
Un'allucinazione è l'errore più pericoloso: il modello inventa fatti inesistenti. Questi errori sembrano plausibili e vengono presentati con sicurezza, perciò sono difficili da individuare.
Esempi: citazioni bibliografiche inventate (il titolo dell'articolo sembra reale, ma l'articolo non esiste), endpoint API inventati, statistiche false, persone inesistenti.
- Causa: il modello colma le lacune nelle proprie conoscenze con testo plausibile generato per corrispondenza di schemi
- Rilevamento: verifica dei fatti tramite fonti autorevoli, confronto incrociato delle citazioni, test delle chiamate API
# Hallucination detection via external verification
import requests
def verify_doi(doi):
url = f'https://doi.org/{doi}'
resp = requests.head(url, allow_redirects=True, timeout=5)
return resp.status_code == 200
# Model claimed this paper exists:
fabricated_doi = '10.1234/fake.paper.2023.99999'
if not verify_doi(fabricated_doi):
print('HALLUCINATION DETECTED: DOI does not exist')La tassonomia degli errori nella pratica
Quando viene rilevato un errore, lo classifichi prima di tentare una correzione. Il tipo di errore determina la strategia di correzione:
- Risposta errata: aggiunga contesto, utilizzi il recupero tramite RAG o passi a un modello più capace
- Formato errato: rafforzi l'istruzione sul formato, aggiunga esempi di output, utilizzi structured outputs / function calling
- Fuori tema: riscriva l'istruzione in modo più specifico, semplifichi il prompt
- Allucinazione: aggiunga contesto di ancoraggio, indichi al modello di dire «Non lo so», abiliti le citazioni
Registrazione strutturata degli errori
Registri ogni errore con la relativa classificazione. Con il tempo emergono degli schemi: una specifica sezione del prompt causa la maggior parte degli errori di formato, oppure un argomento specifico provoca frequenti allucinazioni. I registri strutturati consentono di eseguire il debugging basandosi sui dati.
import json
from datetime import datetime
def log_failure(prompt, response, failure_type, details=''):
entry = {
'timestamp': datetime.utcnow().isoformat(),
'failure_type': failure_type, # wrong_answer | wrong_format | off_topic | hallucination
'prompt_hash': hash(prompt),
'response_snippet': response[:200],
'details': details
}
with open('prompt_failures.jsonl', 'a') as f:
f.write(json.dumps(entry) + '\n')
log_failure(
prompt=my_prompt,
response=bad_response,
failure_type='wrong_format',
details='JSON prefix text broke parsing'
)Classificazione automatica degli errori
Per i test su larga scala, utilizzi una chiamata a un LLM classificatore per assegnare automaticamente a ogni risposta un tipo di errore. In questo modo è possibile eseguire una valutazione in batch su centinaia di casi di test.
def classify_failure(prompt, expected, actual):
classification_prompt = (
f'You are a QA evaluator for LLM outputs.\n'
f'Prompt: {prompt}\n'
f'Expected behavior: {expected}\n'
f'Actual output: {actual}\n\n'
'Classify the failure as one of: CORRECT, WRONG_ANSWER, WRONG_FORMAT, OFF_TOPIC, HALLUCINATION.\n'
'Reply with only the label.'
)
resp = client.chat.completions.create(
model='gpt-4o-mini',
messages=[{'role': 'user', 'content': classification_prompt}]
)
return resp.choices[0].message.content.strip()Matrice di gravità
Non tutti gli errori hanno lo stesso impatto. Una matrice di gravità aiuta a stabilire la priorità delle correzioni:
- Allucinazione in un contesto medico o legale: critica — correggere immediatamente
- Formato errato in uno strumento interno: alta — interrompe l'analisi da parte dei sistemi a valle
- Risposta errata in un caso limite raro: media — monitorare la frequenza
- Risposta fuori tema a un input ambiguo: bassa — accettabile se poco frequente
Tenga traccia dei tassi di errore per tipo e per settimana. Un aumento improvviso in qualsiasi categoria segnala una regressione che richiede attenzione.
Creazione di un dashboard degli errori
Un semplice dashboard degli errori legge il registro degli errori e restituisce i conteggi per tipo e per sezione del prompt:
import json
from collections import Counter
def failure_report(log_path='prompt_failures.jsonl'):
entries = []
with open(log_path) as f:
for line in f:
entries.append(json.loads(line))
counts = Counter(e['failure_type'] for e in entries)
total = len(entries)
print(f'Total failures: {total}')
for ftype, count in counts.most_common():
pct = 100 * count / total
print(f' {ftype}: {count} ({pct:.1f}%)')
failure_report()Prevenire gli errori in modo proattivo
Strategie proattive per ridurre ogni tipo di errore prima che si verifichi:
- Risposta errata: fornisca testo di riferimento nel prompt (RAG); chieda al modello di citare la fonte
- Formato errato: utilizzi JSON mode o function calling; fornisca un esempio di formato nel prompt
- Fuori tema: metta l'attività nella prima frase; eviti lunghi preamboli che diluiscono l'intento
- Allucinazione: indichi «Utilizzi solo le informazioni fornite di seguito»; aggiunga «Se non è sicuro, dica di non saperlo»
Verifica delle conoscenze
Quale tipo di errore si verifica quando il modello inventa fatti inesistenti, ad esempio una citazione bibliografica o un endpoint API inesistente?
Riepilogo: diagnosi degli output imprevisti
I quattro tipi di errore degli LLM e le loro caratteristiche principali:
- Risposta errata: formato corretto, argomento corretto, contenuto errato — verificare i fatti rispetto ai dati di riferimento
- Formato errato: contenuto corretto, istruzione sul formato ignorata — la convalida dello schema rileva questo errore
- Fuori tema: formato corretto, risposta a una domanda diversa — verificare la corrispondenza tra lingua e attività
- Allucinazione: fatti inventati — verificare rispetto a fonti esterne
Registri e classifichi ogni errore. Tenga traccia dei tassi per tipo nel tempo. Nella prossima lezione: l'analisi delle cause principali per individuare quale parte del prompt ha causato l'errore.
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 «Diagnosticare output imprevisti» è gratuita?
Sì — il testo completo di «Diagnosticare output imprevisti» è 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 «Diagnosticare output imprevisti»?
Classifichi i tipi di errore: risposta errata, formato errato, fuori tema e allucinazione 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 1 di 4.
Quanto tempo richiede la lezione «Diagnosticare output imprevisti»?
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
- Diagnosticare output imprevisti
- Analisi delle cause principali dei problemi nei prompt
- Approccio sistematico al debugging
- Strategie di logging e documentazione