Pattern di autocritica e revisione
Prompting dei modelli affinché valutino e riscrivano i propri output in base a una costituzione
Pattern di autocritica e revisione è una lezione AI Prompt Engineering gratuita su CoddyKit. Questa è la lezione 2 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.
L'autocritica come tecnica di prompting
Anche senza un processo formale di addestramento CAI, è possibile chiedere a qualsiasi LLM sufficientemente capace di criticare e migliorare i propri output. Questo schema di autocritica migliora notevolmente la qualità nelle attività in cui contano accuratezza, completezza o sicurezza.
L'idea fondamentale è che i modelli possiedono più conoscenze di quelle che mostrano al primo tentativo. Un prompt di critica porta queste conoscenze in superficie.
Schema di base per la critica dell'accuratezza
La forma più semplice di autocritica consiste nel chiedere al modello di verificare l'accuratezza fattuale della propria risposta e correggere eventuali errori.
import anthropic
client = anthropic.Anthropic(api_key='sk-ant-...')
def generate_and_self_critique(question):
# Step 1: Generate
r1 = client.messages.create(
model='claude-opus-4-5',
max_tokens=512,
messages=[{'role': 'user', 'content': question}]
)
initial = r1.content[0].text
# Step 2: Accuracy critique
critique_prompt = (
f'Question: {question}\n\n'
f'Your previous answer: {initial}\n\n'
'Review your previous answer for factual accuracy. '
'Identify any errors, unsupported claims, or missing important nuances. '
'Then provide a corrected, improved answer.'
)
r2 = client.messages.create(
model='claude-opus-4-5',
max_tokens=512,
messages=[{'role': 'user', 'content': critique_prompt}]
)
return r2.content[0].text
result = generate_and_self_critique('What caused the fall of the Roman Empire?')
print(result[:300])Schema per verificare la completezza
Una critica della completezza chiede al modello di verificare che la risposta risponda pienamente a ogni parte della domanda. È particolarmente utile per le domande composte da più parti, nelle quali le risposte al primo tentativo spesso trascurano alcune sotto-domande.
COMPLETENESS_CRITIQUE = (
'Original question: {question}\n\n'
'Your previous answer: {answer}\n\n'
'Check if your answer fully addresses the question:\n'
'1. List each part or sub-question in the original question.\n'
'2. For each part, indicate whether your answer addressed it.\n'
'3. If any parts were missed or incomplete, provide a revised answer '
'that covers everything.'
)
def check_completeness(question, initial_answer, client):
prompt = COMPLETENESS_CRITIQUE.format(
question=question,
answer=initial_answer
)
response = client.messages.create(
model='claude-opus-4-5',
max_tokens=600,
messages=[{'role': 'user', 'content': prompt}]
)
return response.content[0].textSchema per la critica di danni e sicurezza
Una critica dei rischi chiede al modello di esaminare la propria risposta per individuare potenziali conseguenze negative prima di mostrarla agli utenti. Questo è il nucleo dell'applicazione dei principi CAI in produzione.
HARM_CRITIQUE_PROMPT = (
'Review the following assistant response for potential harms:\n\n'
'User message: {user_message}\n'
'Assistant response: {response}\n\n'
'Consider:\n'
'- Could this response enable harmful actions?\n'
'- Could it be misused by someone with bad intentions?\n'
'- Does it respect the privacy and dignity of individuals?\n'
'- Could it cause psychological harm to vulnerable users?\n\n'
'If the response has issues, explain them and provide a revised '
'version that addresses the concerns while still being helpful. '
'If the response is fine, say "Response is appropriate" and quote it back.'
)
def safety_check(user_message, response, client):
prompt = HARM_CRITIQUE_PROMPT.format(
user_message=user_message,
response=response
)
result = client.messages.create(
model='claude-opus-4-5',
max_tokens=600,
messages=[{'role': 'user', 'content': prompt}]
)
return result.content[0].textCritica basata su più criteri
Per gli output ad alto rischio, esegua la critica rispetto a più criteri in un unico passaggio, elencandoli esplicitamente. È più efficiente che effettuare chiamate di critica separate per ogni criterio.
MULTI_CRITERIA_CRITIQUE = (
'Evaluate this response on three criteria:\n\n'
'Question: {question}\n'
'Response: {response}\n\n'
'Criteria:\n'
'1. ACCURACY: Are all facts correct and claims well-supported?\n'
'2. COMPLETENESS: Does it fully address the question?\n'
'3. CLARITY: Is it easy to understand for the target audience?\n\n'
'For each criterion, rate it Good/Fair/Poor and explain why.\n'
'Then provide an improved response that scores Good on all three.'
)
def multi_criteria_check(question, response, client):
prompt = MULTI_CRITERIA_CRITIQUE.format(
question=question,
response=response
)
result = client.messages.create(
model='claude-opus-4-5',
max_tokens=800,
messages=[{'role': 'user', 'content': prompt}]
)
return result.content[0].textIl passaggio di revisione: buone pratiche
Il prompt di revisione dovrebbe svolgere tre funzioni:
- Ricordare al modello la richiesta originale, fornendo il contesto
- Presentare i risultati della critica
- Chiedere una risposta rivista che risolva i problemi
Non chieda al modello di spiegare nuovamente la critica durante la revisione: chieda semplicemente di correggere i problemi. Un prompt di revisione orientato all'azione produce risultati migliori.
# Good revision prompt: action-oriented
GOOD_REVISION = (
'Given this critique of your response, please write an improved version.\n\n'
'Original question: {question}\n'
'Critique: {critique}\n\n'
'Write only the improved response — no preamble, no meta-commentary:'
)
# Bad revision prompt: too passive
BAD_REVISION = (
'Here is a critique of your response. Can you maybe consider '
'revising it somewhat based on the feedback below?\n'
'Critique: {critique}'
# Missing original question context!
# Wishy-washy language reduces revision quality
)Concatenare più cicli di revisione
Per requisiti di qualità molto complessi, un solo ciclo di critica e revisione spesso non è sufficiente. È possibile concatenare più cicli, applicando ogni volta un principio diverso o verificando i problemi ancora presenti.
import anthropic
client = anthropic.Anthropic(api_key='sk-ant-...')
def multi_round_revision(question, n_rounds=2):
# Round 0: Initial generation
response = client.messages.create(
model='claude-opus-4-5',
max_tokens=512,
messages=[{'role': 'user', 'content': question}]
).content[0].text
principles = [
'factual accuracy and avoiding unsupported claims',
'completeness — ensuring all parts of the question are answered',
]
for i, principle in enumerate(principles[:n_rounds]):
critique_prompt = (
f'Question: {question}\n'
f'Current response: {response}\n\n'
f'Critique for {principle} and provide an improved version:'
)
response = client.messages.create(
model='claude-opus-4-5',
max_tokens=512,
messages=[{'role': 'user', 'content': critique_prompt}]
).content[0].text
print(f'Round {i+1} complete')
return responseAutocritica per la generazione di codice
L'autocritica è particolarmente efficace per la generazione di codice. Il modello scrive prima il codice, poi lo esamina alla ricerca di bug, casi limite e problemi di sicurezza, riuscendo spesso a individuare errori che non aveva notato al primo tentativo.
CODE_CRITIQUE_PROMPT = (
'Review this Python code for correctness and security issues:\n\n'
'Task: {task}\n\n'
'Code:\n'
''''python\n'
'{code}\n'
''''\n\n'
'Check for:\n'
'1. Logic errors or off-by-one mistakes\n'
'2. Unhandled edge cases (empty input, None, division by zero)\n'
'3. Security issues (SQL injection, path traversal, etc.)\n\n'
'If issues exist, list them and provide a corrected version. '
'If the code is correct, say so and explain why it handles edge cases properly.'
)
def critique_code(task, code, client):
prompt = CODE_CRITIQUE_PROMPT.format(task=task, code=code)
result = client.messages.create(
model='claude-opus-4-5',
max_tokens=800,
messages=[{'role': 'user', 'content': prompt}]
)
return result.content[0].textL'autoconsistenza come alternativa
L'autoconsistenza è un approccio diverso: genera la stessa risposta N volte, quindi seleziona la risposta preferita dalla maggioranza oppure chiede al modello di sintetizzare la risposta migliore a partire da più bozze.
Utilizzi l'autoconsistenza per le domande con risposte corrette chiare. Utilizzi la critica e la revisione quando la qualità ha più dimensioni, come accuratezza, tono e sicurezza.
import anthropic
from collections import Counter
client = anthropic.Anthropic(api_key='sk-ant-...')
def self_consistency(question, n=5):
"""Generate N responses and pick the most common answer."""
responses = []
for _ in range(n):
r = client.messages.create(
model='claude-haiku-4-5',
max_tokens=100,
temperature=0.7,
messages=[{'role': 'user', 'content': question}]
)
responses.append(r.content[0].text.strip())
# Pick most common answer
vote = Counter(responses)
winner, count = vote.most_common(1)[0]
print(f'Consensus ({count}/{n}): {winner}')
return winner
result = self_consistency('What is the sum of angles in a triangle?')Quando la critica è dannosa: il rischio di criticare troppo
L'autocritica non è sempre vantaggiosa. Presti attenzione a questi casi di errore:
- Critica adulatoria: il modello afferma che la propria risposta è ottima anche quando è errata
- Eccessiva prudenza: durante la revisione il modello rimuove informazioni utili perché sembrano rischiose
- Correzioni allucinate: la revisione introduce nuovi errori che non erano presenti nell'originale
Per ridurre questi rischi, utilizzi un modello diverso per la critica, basi le critiche su fatti specifici e convalidi gli output rivisti rispetto a risposte corrette note.
Misurare l'efficacia della critica
Verifichi se la critica migliora effettivamente gli output confrontando le risposte iniziali e quelle riviste con uno standard di riferimento. In questo modo può stabilire se le chiamate LLM aggiuntive valgono il costo.
def measure_critique_lift(examples, generate_fn, critique_fn, metric_fn):
"""
Measure how much critique improves accuracy over initial generation.
"""
initial_scores = []
revised_scores = []
for ex in examples:
initial = generate_fn(ex.question)
revised = critique_fn(ex.question, initial)
initial_scores.append(metric_fn(ex.answer, initial))
revised_scores.append(metric_fn(ex.answer, revised))
avg_initial = sum(initial_scores) / len(initial_scores)
avg_revised = sum(revised_scores) / len(revised_scores)
print(f'Initial: {avg_initial:.1%}')
print(f'Revised: {avg_revised:.1%}')
print(f'Lift: +{avg_revised - avg_initial:.1%}')
return avg_revised - avg_initialVerifica delle conoscenze: momento dell'autocritica
Quale pattern è più appropriato per intercettare errori fattuali in una risposta prima di mostrarla agli utenti?
Riepilogo: pattern di autocritica e revisione
I prompt di autocritica chiedono al modello di esaminare il proprio output rispetto a criteri specifici — accuratezza, completezza, sicurezza o chiarezza — e poi di produrre una revisione migliorata. Pattern efficaci: critica dell'accuratezza (verificare la presenza di errori fattuali), controllo della completezza (sono state affrontate tutte le parti?), critica del rischio (potrebbe consentire azioni dannose?) e revisione del codice (verificare la presenza di bug e casi limite). Per gli output ad alto rischio, esegua più cicli in sequenza. Misuri il miglioramento effettivo per verificare che il costo aggiuntivo sia giustificato.
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 «Pattern di autocritica e revisione» è gratuita?
Sì — il testo completo di «Pattern di autocritica e revisione» è 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 «Pattern di autocritica e revisione»?
Prompting dei modelli affinché valutino e riscrivano i propri output in base a una costituzione 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 2 di 4.
Quanto tempo richiede la lezione «Pattern di autocritica e revisione»?
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
- Principi CAI e prompt di critica
- Pattern di autocritica e revisione
- Tensione tra innocuità e utilità
- Implementazione di CAI nelle applicazioni