Patrones de autocrítica y revisión
Induzca a los modelos a evaluar y reescribir sus propias salidas conforme a una constitución.
Patrones de autocrítica y revisión es una lección gratuita de AI Prompt Engineering en CoddyKit. Esta es la lección 2 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.
La autocrítica como técnica de prompting
Incluso sin un proceso formal de entrenamiento de CAI, puede pedir a cualquier LLM competente que critique y mejore sus propios resultados. Este patrón de autocrítica mejora notablemente la calidad en tareas donde la precisión, la exhaustividad o la seguridad son importantes.
La idea clave es que los modelos poseen más conocimiento del que muestran en un primer intento. Un prompt de crítica permite sacar a la luz ese conocimiento.
Patrón básico de crítica de precisión
La forma más sencilla de autocrítica consiste en pedir al modelo que revise la precisión factual de su respuesta y corrija cualquier error.
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])Patrón de comprobación de exhaustividad
Una crítica de exhaustividad pide al modelo que verifique si su respuesta responde completamente a cada parte de la pregunta. Resulta especialmente útil para preguntas con varias partes, en las que las respuestas del primer intento suelen omitir subpreguntas.
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].textPatrón de crítica de daños y seguridad
Una crítica de daños pide al modelo que revise su respuesta para detectar posibles consecuencias negativas antes de mostrársela a los usuarios. Este es el fundamento de la aplicación de los principios de la CAI en producción.
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].textCrítica con múltiples criterios
Para resultados de alto impacto, realice la crítica según varios criterios en una sola pasada, enumerándolos explícitamente. Esto es más eficiente que hacer llamadas de crítica separadas para cada 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].textEl paso de revisión: buenas prácticas
El prompt de revisión debe hacer tres cosas:
- Recordar al modelo la solicitud original (el contexto)
- Presentar los hallazgos de la crítica
- Pedir una respuesta revisada que aborde los problemas
No pida al modelo que vuelva a explicar la crítica durante la revisión; pídale simplemente que corrija los problemas. Mantener el prompt de revisión orientado a la acción produce mejores resultados.
# 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
)Encadenar varias rondas de revisión
Una sola ronda de crítica y revisión a menudo no basta para requisitos de calidad muy complejos. Puede encadenar varias rondas, aplicando en cada una un principio diferente o comprobando los problemas que persistan.
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 responseAutocrítica para la generación de código
La autocrítica resulta especialmente eficaz para la generación de código. Primero, el modelo escribe el código y después lo revisa para detectar errores, casos límite y problemas de seguridad; a menudo descubre errores que no detectó la primera vez.
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].textLa autoconsistencia como alternativa
La autoconsistencia es un enfoque diferente: generar la misma respuesta N veces y después realizar una votación mayoritaria o pedir al modelo que sintetice la mejor respuesta a partir de varios borradores.
Utilice la autoconsistencia para preguntas con respuestas correctas claras. Utilice la crítica y revisión cuando la calidad tenga varias dimensiones (precisión, tono y seguridad).
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?')Cuándo perjudica la crítica: riesgo de exceso de crítica
La autocrítica no siempre es beneficiosa. Preste atención a estos modos de fallo:
- Crítica complaciente: el modelo afirma que su respuesta es excelente aunque sea incorrecta
- Exceso de cautela: el modelo elimina información útil durante la revisión porque parece arriesgada
- Correcciones alucinadas: la revisión introduce errores nuevos que no estaban en la respuesta original
Puede mitigarlos utilizando un modelo diferente para la crítica, fundamentando las críticas en hechos específicos y validando los resultados revisados frente a respuestas conocidas como correctas.
Medir la eficacia de la crítica
Realice un seguimiento de si la crítica mejora realmente los resultados comparando las respuestas inicial y revisada con un estándar de referencia. Esto le indica si las llamadas adicionales al LLM compensan su coste.
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_initialComprobación de conocimientos: momento de la autocrítica
¿Qué patrón es más adecuado para detectar errores factuales en una respuesta antes de mostrársela a los usuarios?
Repaso: patrones de autocrítica y revisión
Los prompts de autocrítica piden al modelo que revise su propia respuesta según criterios específicos —precisión, exhaustividad, seguridad o claridad— y que después genere una versión revisada y mejorada. Patrones eficaces: crítica de precisión (revisar si hay errores factuales), comprobación de exhaustividad (¿abordó todas las partes?), crítica de posibles daños (¿podría facilitar acciones perjudiciales?) y revisión de código (comprobar si hay errores y casos límite). Encadene varias rondas para las respuestas de alto riesgo. Mida la mejora real para confirmar que el coste adicional está justificado.
Preguntas frecuentes
¿La lección «Patrones de autocrítica y revisión» es gratis?
Sí — el texto completo de «Patrones de autocrítica y revisió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 «Patrones de autocrítica y revisión»?
Induzca a los modelos a evaluar y reescribir sus propias salidas conforme a una constitución. 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 2 de 4.
¿Cuánto tiempo toma la lección «Patrones de autocrítica y revisió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
- Principios de CAI y prompts de crítica
- Patrones de autocrítica y revisión
- Tensión entre inocuidad y utilidad
- Implementación de CAI en aplicaciones