Запросы для оценки по критериям
Структурированные критерии оценки: точность, беглость, релевантность и безопасность (шкала от 1 до 5).
«Запросы для оценки по критериям» — бесплатный урок AI Prompt Engineering на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AI Prompt Engineering, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AI Prompt Engineering содержит 4 уроков всего.
Что такое оценивание по системе критериев?
Оценивание по системе критериев предоставляет судье на основе LLM структурированный набор критериев с явными определениями каждого уровня оценки. Вместо вопроса «насколько это хорошо?» задаётся вопрос «как это оценивается по каждому из этих конкретных измерений?»
Системы критериев уменьшают смещение, повышают согласованность и делают результаты оценивания понятными и пригодными для практического применения.
Структура системы критериев
Хорошо разработанная система критериев состоит из трёх компонентов:
- Названия критериев: какие измерения оценивать (точность, полнота, ясность)
- Опорные описания оценок: явные определения того, что означает каждая оценка для данного критерия
- Вес или приоритет: какие критерии наиболее важны для этого сценария использования
Каждый компонент делает работу судьи более ограниченной и воспроизводимой.
Запрос с системой из трёх критериев
Ниже приведён конкретный шаблон запроса с системой критериев для оценивания ответов ИИ по точности, полноте и ясности. Судья возвращает структурированные данные с оценками по каждому критерию.
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 — локальная установка не требуется.
Все уроки этого курса
- Оценка результатов LLM с помощью LLM
- Запросы для оценки по критериям
- Сравнительная оценка: A и B
- Калибровка и предвзятость судей на основе LLM