Wzorce samokrytyki i rewizji
Tworzenie promptów skłaniających modele do oceny i przepisywania własnych wyników zgodnie z konstytucją.
Wzorce samokrytyki i rewizji to bezpłatna lekcja AI Prompt Engineering na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej AI Prompt Engineering, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs AI Prompt Engineering zawiera 4 lekcji w sumie.
Samokrytyka jako technika promptowania
Nawet bez formalnego procesu trenowania CAI można skłonić dowolny odpowiednio zaawansowany LLM do krytycznej oceny i ulepszania własnych wyników. Ten schemat samokrytyki znacząco poprawia jakość w zadaniach, w których ważne są dokładność, kompletność lub bezpieczeństwo.
Najważniejszy wniosek jest taki, że modele mają większą wiedzę, niż ujawniają w pierwszym podejściu. Prompt do krytyki pozwala wydobyć tę wiedzę.
Podstawowy schemat krytyki dokładności
Najprostsza forma samokrytyki polega na poproszeniu modelu o sprawdzenie poprawności faktograficznej odpowiedzi i naprawienie ewentualnych błędów.
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])Schemat sprawdzania kompletności
Krytyka kompletności polega na poproszeniu modelu o sprawdzenie, czy odpowiedź w pełni odnosi się do każdej części pytania. Jest to szczególnie przydatne w przypadku pytań wieloczęściowych, przy których odpowiedzi tworzone w pierwszym podejściu często pomijają pytania szczegółowe.
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].textSchemat krytyki pod kątem szkód i bezpieczeństwa
Krytyka pod kątem szkód polega na poproszeniu modelu o sprawdzenie odpowiedzi pod kątem potencjalnych negatywnych konsekwencji, zanim zostanie ona pokazana użytkownikom. Jest to podstawa stosowania zasad CAI w środowisku produkcyjnym.
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].textKrytyka według wielu kryteriów
W przypadku wyników o wysokiej stawce przeprowadź krytykę według wielu kryteriów w jednym podejściu, wyraźnie je wymieniając. Jest to wydajniejsze niż wykonywanie osobnych wywołań krytyki dla każdego kryterium.
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].textEtap poprawy: najlepsze praktyki
Prompt poprawiający powinien realizować trzy zadania:
- Przypomnieć modelowi pierwotną prośbę (kontekst)
- Przedstawić ustalenia krytyki
- Poprosić o poprawioną odpowiedź uwzględniającą wskazane problemy
Nie proś modelu o ponowne wyjaśnianie krytyki podczas poprawy — poproś go po prostu o naprawienie problemów. Zwięzły, skoncentrowany na działaniu prompt poprawiający daje lepsze wyniki.
# 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
)Łączenie wielu rund poprawy
Jedna runda krytyki i poprawy często nie wystarcza w przypadku bardzo złożonych wymagań jakościowych. Można połączyć wiele rund, z których każda stosuje inną zasadę lub sprawdza pozostałe problemy.
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 responseSamokrytyka przy generowaniu kodu
Samokrytyka jest szczególnie skuteczna przy generowaniu kodu. Model najpierw pisze kod, a następnie sprawdza go pod kątem błędów, przypadków brzegowych i problemów z bezpieczeństwem — często wykrywając błędy, które przeoczył za pierwszym razem.
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].textSelf-consistency jako alternatywa
Self-consistency to inne podejście: wygeneruj tę samą odpowiedź N razy, a następnie wybierz wynik większością głosów lub poproś model o syntezę najlepszej odpowiedzi z wielu wersji roboczych.
Używaj self-consistency w przypadku pytań z jednoznacznie poprawnymi odpowiedziami. Stosuj krytykę i poprawę, gdy jakość ma wiele wymiarów (dokładność + ton + bezpieczeństwo).
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?')Kiedy krytyka szkodzi: ryzyko nadmiernej krytyki
Samokrytyka nie zawsze przynosi korzyści. Zwróć uwagę na następujące tryby niepowodzenia:
- Krytyka schlebiająca: model stwierdza, że jego odpowiedź jest świetna, nawet gdy jest błędna
- Nadmierna ostrożność: podczas poprawy model usuwa pomocne informacje, ponieważ wydają się ryzykowne
- Halucynowane poprawki: poprawiona wersja wprowadza nowe błędy, których nie było w oryginale
Można temu przeciwdziałać, używając innego modelu do krytyki, opierając krytykę na konkretnych faktach oraz sprawdzając poprawione wyniki względem znanych poprawnych odpowiedzi.
Pomiar skuteczności krytyki
Śledź, czy krytyka rzeczywiście poprawia wyniki, porównując odpowiedzi wstępne i poprawione ze wzorcem referencyjnym. Dzięki temu dowiesz się, czy dodatkowe wywołania LLM są warte ponoszonych kosztów.
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_initialSprawdź wiedzę: moment przeprowadzania samokrytyki
Który wzorzec najlepiej nadaje się do wykrywania błędów rzeczowych w odpowiedzi przed pokazaniem jej użytkownikom?
Podsumowanie: wzorce samokrytyki i rewizji
Prompty samokrytyki proszą model o sprawdzenie własnego wyniku pod kątem określonych kryteriów — dokładności, kompletności, bezpieczeństwa lub przejrzystości — a następnie o przygotowanie ulepszonej wersji. Skuteczne wzorce obejmują krytykę pod kątem dokładności (sprawdź, czy nie ma błędów rzeczowych), kontrolę kompletności (czy uwzględniono wszystkie części?), krytykę pod kątem szkodliwości (czy może to umożliwić szkodliwe działania?) oraz przegląd kodu (sprawdź błędy i przypadki brzegowe). W przypadku wyników o wysokiej stawce można łączyć wiele rund. Należy zmierzyć rzeczywistą poprawę, aby potwierdzić, że dodatkowy koszt jest uzasadniony.
Często zadawane pytania
Czy lekcja „Wzorce samokrytyki i rewizji” jest bezpłatna?
Tak — pełny tekst „Wzorce samokrytyki i rewizji” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu AI Prompt Engineering, przejdź na CoddyKit PRO. Kurs AI Prompt Engineering zawiera 4 lekcji w sumie.
Co nauczysz się w „Wzorce samokrytyki i rewizji”?
Tworzenie promptów skłaniających modele do oceny i przepisywania własnych wyników zgodnie z konstytucją. Ćwiczysz AI Prompt Engineering z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć AI Prompt Engineering?
Nie wymagamy żadnego doświadczenia. AI Prompt Engineering w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „Wzorce samokrytyki i rewizji”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji AI Prompt Engineering?
Tak. Każda lekcja AI Prompt Engineering zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Zasady CAI i prompty krytyki
- Wzorce samokrytyki i rewizji
- Napięcie między nieszkodliwością a użytecznością
- Implementowanie CAI w aplikacjach