AI Prompt Engineering · Урок

Шаблоны самокритики и переработки

Побуждение моделей оценивать и переписывать собственные результаты в соответствии с конституцией.

Урок 2 из 413 шагов

«Шаблоны самокритики и переработки» — бесплатный урок AI Prompt Engineering на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AI Prompt Engineering, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AI Prompt Engineering содержит 4 уроков всего.

Самокритика как техника составления запросов

Даже без формального процесса обучения CAI можно попросить любую достаточно мощную LLM критиковать и улучшать собственные результаты. Этот шаблон самокритики значительно повышает качество задач, где важны точность, полнота или безопасность.

Ключевая идея: модели знают больше, чем показывают при первой попытке. Запрос на критику помогает раскрыть эти знания.

Базовый шаблон критики точности

Самая простая самокритика — попросить модель проверить свой ответ на фактическую точность и исправить все ошибки.

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

Шаблон проверки полноты

При критике полноты модель просят проверить, полностью ли её ответ охватывает каждую часть вопроса. Это особенно полезно для многочастных вопросов, в ответах на которые при первой попытке часто пропускаются отдельные подвопросы.

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].text

Шаблон критики вреда и безопасности

При критике на предмет вреда модель просят проверить свой ответ на потенциальные негативные последствия, прежде чем показывать его пользователям. Это основа применения принципов CAI в рабочей среде.

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].text

Критика по нескольким критериям

Для результатов в критически важных сценариях проводите критику сразу по нескольким критериям, явно перечислив их. Это эффективнее, чем отдельные вызовы критики для каждого критерия.

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].text

Этап исправления: рекомендации

Запрос на исправление должен делать три вещи:

  1. напоминать модели исходный запрос (контекст)
  2. представлять результаты критики
  3. просить создать исправленный ответ, устраняющий выявленные проблемы

Не просите модель ещё раз объяснять критику при исправлении — просто попросите её устранить проблемы. Если запрос на исправление ориентирован на действие, результаты будут лучше.

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

Объединение нескольких раундов исправления

Одного раунда критики и исправления часто недостаточно для очень сложных требований к качеству. Можно объединить несколько раундов, в каждом применяя отдельный принцип или проверяя оставшиеся проблемы.

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 response

Самокритика при генерации кода

Самокритика особенно эффективна при генерации кода. Сначала модель пишет код, затем проверяет его на наличие ошибок, пограничных случаев и проблем безопасности — часто обнаруживая ошибки, которые она пропустила с первого раза.

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].text

Самосогласованность как альтернатива

Самосогласованность — это другой подход: создать один и тот же ответ N раз, а затем провести голосование большинством или попросить модель синтезировать лучший ответ из нескольких черновиков.

Используйте самосогласованность для вопросов с однозначными правильными ответами. Применяйте критику и исправление, когда качество многомерно и включает точность, тон и безопасность.

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

Когда критика вредит: риск чрезмерной критики

Самокритика не всегда полезна. Следите за следующими типами сбоев:

  • Льстивая критика: модель говорит, что её ответ превосходен, даже если он неверен
  • Чрезмерная осторожность: во время исправления модель удаляет полезную информацию, потому что та кажется рискованной
  • Выдуманные исправления: исправленный ответ создаёт новые ошибки, которых не было в исходном

Снизить риск можно, используя другую модель для критики, основывая критические замечания на конкретных фактах и проверяя исправленные результаты по заведомо правильным ответам.

Измерение эффективности критики

Отслеживайте, действительно ли критика улучшает результаты, сравнивая первоначальные и исправленные ответы с эталоном. Так вы поймёте, оправданы ли дополнительные вызовы LLM с учётом их стоимости.

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_initial

Проверка знаний: время проведения самокритики

Какой шаблон лучше всего подходит для выявления фактических ошибок в ответе до того, как показать его пользователям?

Итоги: шаблоны самокритики и доработки

Запросы для самокритики предлагают модели проверить собственный результат по конкретным критериям — точности, полноте, безопасности или ясности — и затем подготовить улучшенную версию. Эффективные шаблоны: проверка точности с помощью critique (проверить наличие фактических ошибок), проверка полноты (вы охватили все части?), проверка на вред с помощью critique (может ли это способствовать вредным действиям?) и проверка кода (проверить ошибки и крайние случаи). Для результатов с высокой ценой ошибки используйте несколько раундов. Измеряйте реальное улучшение, чтобы убедиться, что дополнительные затраты оправданы.

Можно начать бесплатно

Изучай AI Prompt Engineering с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
53
Уроки
199

Часто задаваемые вопросы

Урок «Шаблоны самокритики и переработки» бесплатный?

Да — полный текст урока «Шаблоны самокритики и переработки» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AI Prompt Engineering, подпишись на CoddyKit PRO. Курс AI Prompt Engineering содержит 4 уроков всего.

Чему я научусь в уроке «Шаблоны самокритики и переработки»?

Побуждение моделей оценивать и переписывать собственные результаты в соответствии с конституцией. Ты практикуешь AI Prompt Engineering с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать AI Prompt Engineering?

Предыдущий опыт не требуется. AI Prompt Engineering на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Шаблоны самокритики и переработки»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке AI Prompt Engineering?

Да. Каждый урок AI Prompt Engineering включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Принципы CAI и запросы для критики
  2. Шаблоны самокритики и переработки
  3. Противоречие между безвредностью и полезностью
  4. Реализация CAI в приложениях
← Назад к AI Prompt Engineering