Упражнение: критерии для грейдера

Чему научитесь

Видео 4:44

К концу упражнения вы сможете:

На странице урока только видео. Ниже — его содержание по субтитрам.

Смотреть урок на Skilljar Exercise on prompt evals · 4:44

Задача

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

На первый взгляд это кажется сложным, но на деле достаточно двух шагов:

Этого достаточно, чтобы грейдер лучше понимал, каким должно быть хорошее решение.

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

Решение

Шаг 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.