AI Prompt Engineering · Урок

Запросы для оценки по критериям

Структурированные критерии оценки: точность, беглость, релевантность и безопасность (шкала от 1 до 5).

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

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

Что такое оценивание по системе критериев?

Оценивание по системе критериев предоставляет судье на основе LLM структурированный набор критериев с явными определениями каждого уровня оценки. Вместо вопроса «насколько это хорошо?» задаётся вопрос «как это оценивается по каждому из этих конкретных измерений?»

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

Структура системы критериев

Хорошо разработанная система критериев состоит из трёх компонентов:

  1. Названия критериев: какие измерения оценивать (точность, полнота, ясность)
  2. Опорные описания оценок: явные определения того, что означает каждая оценка для данного критерия
  3. Вес или приоритет: какие критерии наиболее важны для этого сценария использования

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

Запрос с системой из трёх критериев

Ниже приведён конкретный шаблон запроса с системой критериев для оценивания ответов ИИ по точности, полноте и ясности. Судья возвращает структурированные данные с оценками по каждому критерию.

import anthropic
import json

client = anthropic.Anthropic(api_key='sk-ant-...')

RUBRIC_PROMPT = (
    'Score this response on a scale of 1-5 for each criterion:\n\n'
    'ACCURACY: Is the response factually correct?\n'
    '  1=Contains significant factual errors\n'
    '  3=Mostly correct with minor inaccuracies\n'
    '  5=Completely accurate with no errors\n\n'
    'COMPLETENESS: Did it answer everything asked?\n'
    '  1=Missed most of the question\n'
    '  3=Answered the main question but missed sub-parts\n'
    '  5=Addressed every part of the question\n\n'
    'CLARITY: Is it easy to understand?\n'
    '  1=Confusing, hard to follow\n'
    '  3=Understandable but could be clearer\n'
    '  5=Exceptionally clear and well-organized\n\n'
    'Question: {question}\n'
    'Response: {response}\n\n'
    'Return JSON: {{"accuracy": N, "completeness": N, "clarity": N, '
    '"overall": N, "notes": "one sentence"}}'
)

def rubric_judge(question, response):
    prompt = RUBRIC_PROMPT.format(question=question, response=response)
    r = client.messages.create(
        model='claude-opus-4-5',
        max_tokens=200,
        messages=[{'role': 'user', 'content': prompt}]
    )
    return json.loads(r.content[0].text)

result = rubric_judge(
    question='What is a REST API?',
    response='A REST API is a way for applications to communicate over HTTP.'
)
print(result)

Взвешенное оценивание

Не все критерии одинаково важны. Для бота поддержки клиентов полезность важнее литературного стиля. Взвешенное оценивание позволяет выразить эти приоритеты при вычислении итоговой оценки.

import anthropic
import json

client = anthropic.Anthropic(api_key='sk-ant-...')

def weighted_rubric_judge(question, response, weights):
    """
    weights: dict of criterion -> weight (should sum to 1.0)
    Example: {'accuracy': 0.5, 'completeness': 0.3, 'clarity': 0.2}
    """
    RUBRIC = (
        'Score this response 1-5 on:\n'
        'Accuracy: Is it factually correct?\n'
        'Completeness: Does it cover the full question?\n'
        'Clarity: Is it easy to understand?\n\n'
        'Q: {q}\nA: {a}\n\n'
        'Return JSON: {{"accuracy":N,"completeness":N,"clarity":N}}'
    )
    r = client.messages.create(
        model='claude-opus-4-5',
        max_tokens=100,
        messages=[{'role': 'user', 'content': RUBRIC.format(q=question, a=response)}]
    )
    scores = json.loads(r.content[0].text)

    # Calculate weighted average
    weighted_score = sum(
        scores[criterion] * weight
        for criterion, weight in weights.items()
        if criterion in scores
    )
    print(f'Individual scores: {scores}')
    print(f'Weighted score: {weighted_score:.2f}/5')
    return weighted_score

weighted_rubric_judge(
    'How do I reverse a string in Python?',
    'Use slicing: s[::-1]',
    weights={'accuracy': 0.5, 'completeness': 0.3, 'clarity': 0.2}
)

Критерий: фактическая точность

Фактическая точность — важнейший критерий для задач, требующих глубоких знаний. Отдельная система критериев для точности инструктирует судью специально проверять неверные факты, устаревшие сведения и неподкреплённые утверждения.

ACCURACY_RUBRIC = (
    'Evaluate FACTUAL ACCURACY of the following response.\n\n'
    'Score 1-5:\n'
    '1 = Multiple factual errors that fundamentally mislead the reader\n'
    '2 = At least one significant factual error (wrong date, number, or core fact)\n'
    '3 = Factually correct but includes minor imprecisions or over-generalizations\n'
    '4 = Factually correct with appropriate hedging of uncertain claims\n'
    '5 = Factually precise, no errors, and correctly acknowledges uncertainty where present\n\n'
    'Check specifically for:\n'
    '- Wrong dates, statistics, or numerical values\n'
    '- Misattributed quotes or inventions\n'
    '- Outdated information presented as current\n'
    '- Claims stated with false confidence (should be hedged)\n\n'
    'Q: {question}\nA: {response}\n\n'
    'Score and list any errors found:'
)
print(ACCURACY_RUBRIC[:400])

Критерий: полнота

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

COMPLETENESS_RUBRIC = (
    'Evaluate COMPLETENESS of this response.\n\n'
    'First, list every distinct question or requirement in the original query.\n'
    'Then, check whether the response addressed each one.\n\n'
    'Score 1-5:\n'
    '1 = Only addressed 0-20% of what was asked\n'
    '2 = Addressed 20-50% — missed major components\n'
    '3 = Addressed 50-80% — answered main question but missed sub-parts\n'
    '4 = Addressed 80-95% — minor omissions only\n'
    '5 = Addressed 100% — every requirement was met\n\n'
    'Q: {question}\nA: {response}\n\n'
    'Requirements checklist and completeness score:'
)

# This rubric forces the judge to decompose the question first,
# which is much more reliable than asking 'was it complete?'
print(COMPLETENESS_RUBRIC[:400])

Критерий: ясность

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

CLARITY_RUBRIC = (
    'Evaluate CLARITY of this response for a {audience} audience.\n\n'
    'Score 1-5:\n'
    '1 = Incomprehensible — cannot extract meaning\n'
    '2 = Very hard to follow — excessive jargon, poor structure\n'
    '3 = Understandable with effort — some confusing parts\n'
    '4 = Clear and well-organized — easy to read\n'
    '5 = Exceptionally clear — ideal structure, appropriate vocabulary, '
    'no unnecessary complexity\n\n'
    'Consider:\n'
    '- Is the vocabulary appropriate for the audience?\n'
    '- Is the response logically organized?\n'
    '- Are sentences a readable length?\n'
    '- Is the main point stated early and clearly?\n\n'
    'Q: {question}\nA: {response}\n\n'
    'Clarity score and key issues:'
)

# Parameterize the audience for context-aware clarity assessment
print(CLARITY_RUBRIC.format(
    audience='non-technical business stakeholder',
    question='What is an API?',
    response='REST APIs use HTTP to transfer data between client and server.'
)[:300])

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

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

# Customer support response rubric
SUPPORT_RUBRIC = (
    'Evaluate this customer support response:\n\n'
    'EMPATHY (1-5): Does it acknowledge the customer emotion?\n'
    'RESOLUTION (1-5): Does it provide a clear solution or next step?\n'
    'TONE (1-5): Is it professional, warm, and not condescending?\n'
    'EFFICIENCY (1-5): Does it avoid unnecessary words or boilerplate?\n\n'
    'Customer message: {customer_message}\n'
    'Support response: {support_response}\n\n'
    'Scores and notes (JSON):'
)

# Code review rubric
CODE_REVIEW_RUBRIC = (
    'Evaluate this code explanation:\n\n'
    'CORRECTNESS (1-5): Is the code technically correct?\n'
    'EDGE_CASES (1-5): Does it handle edge cases (empty input, errors)?\n'
    'EFFICIENCY (1-5): Is it reasonably efficient (no obvious O(n^2) where O(n) is easy)?\n'
    'READABILITY (1-5): Is the code easy to read and understand?\n\n'
    'Task: {task}\n'
    'Code: {code}\n\n'
    'Scores and notes (JSON):'
)
print('Specialized rubrics produce better signal for your domain')

Проверка согласованности системы критериев

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

import anthropic
import json
import statistics

client = anthropic.Anthropic(api_key='sk-ant-...')

def test_rubric_consistency(rubric_prompt, question, response, n_trials=5):
    scores = []
    for i in range(n_trials):
        r = client.messages.create(
            model='claude-opus-4-5',
            max_tokens=100,
            messages=[{'role': 'user', 'content': rubric_prompt.format(
                question=question, response=response
            )}]
        )
        try:
            data = json.loads(r.content[0].text)
            overall = data.get('overall', sum(data.values()) / len(data))
            scores.append(overall)
        except Exception:
            scores.append(None)

    valid = [s for s in scores if s is not None]
    if valid:
        print(f'Scores: {valid}')
        print(f'Mean: {statistics.mean(valid):.2f}')
        print(f'Std dev: {statistics.stdev(valid):.2f}')
        if statistics.stdev(valid) > 0.5:
            print('WARNING: High variance — rubric may be underspecified')

    return valid

Возврат структурированных данных судьёй

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

import anthropic
import json

client = anthropic.Anthropic(api_key='sk-ant-...')

def structured_rubric_judge(question, response):
    prompt = (
        'Score this response 1-5 on three criteria and return JSON.\n\n'
        'Q: {q}\nA: {a}\n\n'
        'Return ONLY this JSON structure (no other text):\n'
        '{{\n'
        '  "accuracy": <1-5>,\n'
        '  "completeness": <1-5>,\n'
        '  "clarity": <1-5>,\n'
        '  "overall": <1-5>,\n'
        '  "primary_issue": "<what most needs improvement>",\n'
        '  "primary_strength": "<what the response does best>"\n'
        '}}'
    ).format(q=question, a=response)

    r = client.messages.create(
        model='claude-opus-4-5',
        max_tokens=200,
        messages=[{'role': 'user', 'content': prompt}]
    )

    text = r.content[0].text.strip()
    # Strip markdown code fences if present
    if text.startswith('###'):
        text = text.split('###')[1]
        if text.startswith('json'):
            text = text[4:]
    return json.loads(text.strip())

result = structured_rubric_judge(
    'Explain big O notation.',
    'Big O describes algorithm time complexity.'
)
print(json.dumps(result, indent=2))

Итеративная разработка системы критериев

Чтобы системы критериев работали хорошо, их нужно дорабатывать. Начните с простой системы из трёх критериев, примените её к 20–30 примерам и сравните результаты с оценками людей. Уточняйте определения критериев там, где расхождения между судьёй и людьми наиболее значительны.

Часто требуется следующее уточнение: критерий точности слишком широк (разделите его на фактическую точность и логическую согласованность), критерий ясности смешивает удобство чтения и краткость (разделите их) или третий уровень оценки описан недостаточно чётко (большинство ответов неоднозначно сосредотачивается на нём).

Проверка знаний: опорные описания оценок

Почему система критериев должна содержать явные описания значения каждого уровня оценки (опорные описания оценок)?

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

Оценивание по системе критериев проверяет ответы по нескольким названным критериям (точность, полнота, ясность) с помощью явных опорных описаний, определяющих значение каждого уровня оценки. Опорные описания уменьшают завышение оценок и повышают согласованность. Используйте взвешенное оценивание, чтобы выделить критерии, наиболее важные для вашего сценария использования. Системы критериев для конкретных задач (поддержка, код, творчество) превосходят общие системы в специализированных приложениях. Всегда возвращайте структурированные данные, чтобы результаты можно было обрабатывать автоматически. Проверяйте согласованность системы критериев, многократно выполняя одно и то же оценивание: большое стандартное отклонение указывает на недостаточно точно заданную систему, требующую доработки.

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

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

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

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

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

Урок «Запросы для оценки по критериям» бесплатный?

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

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

Структурированные критерии оценки: точность, беглость, релевантность и безопасность (шкала от 1 до 5). Ты практикуешь 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. Оценка результатов LLM с помощью LLM
  2. Запросы для оценки по критериям
  3. Сравнительная оценка: A и B
  4. Калибровка и предвзятость судей на основе LLM
← Назад к AI Prompt Engineering