Упражнение: критерии для грейдера
Чему научитесь
Видео 4:44
К концу упражнения вы сможете:
- добавить в датасет критерии хорошего решения;
- передать эти критерии грейдеру на модели.
На странице урока только видео. Ниже — его содержание по субтитрам.
Смотреть урок на Skilljar Exercise on prompt evals · 4:44Задача
Упражнение на улучшение процесса оценки промпта. Нужно немного улучшить грейдер на модели — дать ему больше контекста о том, как должно выглядеть хорошее решение.
На первый взгляд это кажется сложным, но на деле достаточно двух шагов:
- Шаг 1. Вернитесь к промпту, который генерирует датасет, и попросите включать в каждый тестовый случай критерии решения. В тестовых случаях должен появиться новый ключ
solution_criteria— например, описание того, какими характеристиками должно обладать хорошее решение. - Шаг 2. Подставьте эти критерии в промпт
grade_by_model: найдите место, где в промпт попадает оцениваемое решение, и сразу после него добавьте сгенерированные критерии.
Этого достаточно, чтобы грейдер лучше понимал, каким должно быть хорошее решение.
Здесь в ролике предлагают поставить видео на паузу и попробовать самим.
Решение
Шаг 1. Критерии в датасете
В ноутбуке находим функцию generate_dataset и большой промпт внутри неё. Там, где мы описываем каждый тестовый случай, говорим, что помимо задачи (task) и формата (format) нужны ещё и критерии решения, и даём строку-подсказку о том, что должно быть в этом ключе — ключевые критерии для оценки решения:
Example output:
```json
[
{
"task": "Description of task",
"format": "python" or "json" or "regex",
"solution_criteria": "Key criteria for evaluating the solution"
},
...additional
]
```
Перезапускаем ячейку с функцией и ячейку генерации датасета. Через пару секунд в обновлённом dataset.json у задач по-прежнему есть формат, а теперь ещё и критерии решения. У вас они будут свои, но дают представление о том, каким должно быть хорошее решение.
Шаг 2. Критерии в грейдере
Находим функцию grade_by_model и промпт внутри неё. Туда уже подставляются исходная задача и сгенерированный ответ. Сразу после них добавляем фразу для модели — критерии, по которым нужно оценивать решение, — оборачиваем их в теги и подставляем из тестового случая значение solution_criteria:
eval_prompt = f"""
You are an expert code reviewer. Evaluate this AI-generated solution.
Task: {test_case["task"]}
Solution: {output}
Criteria you should use to evaluate the solution:
<criteria>
{test_case["solution_criteria"]}
</criteria>
Provide your evaluation as a structured JSON object with:
...
"""
Тестовый случай — это как раз такой объект из датасета, и в нём теперь есть ключ solution_criteria: его предложение мы и вставляем в промпт. Зачем теги, автор обещает объяснить в блоке про prompt engineering.
Перезапускаем ячейку, затем конвейер оценки — получаем обновлённый балл. Печатаем результаты (print(json.dumps(results, indent=2))): видим ответ модели, тестовый случай с задачей и критериями, балл (в ролике — 9) и, надеемся, более развёрнутое обоснование от грейдера, раз теперь у него есть критерии решения.
Дальше
Блок пройден. В оригинале после этого урока идёт официальный квиз Skilljar — Quiz on prompt evaluation (6 вопросов, проходится на Skilljar). Проверить себя можно и нашим пробным экзаменом по оценке промптов.
Оригинал урока: Exercise on prompt evals.