Capstone: catch the planted regression
Assemble the eval harness end to end — dataset, calibrated judge, statistical gate, CI — and verify it with a mutation test of planted regressions.
Lesson content is currently available in Russian.
What you will learn
- →Собирать eval-harness end-to-end: датасет, judge, статистический гейт, CI.
- →Проверять harness мутационным тестированием с подсаженными регрессиями.
- →Измерять качество самого harness: catch rate, ложные тревоги, время и стоимость.
Контракт капстоуна и архитектура harness
Задача капстоуна: собрать eval-harness для своего LLM-приложения (или учебного RAG-бота над документацией любого проекта) и доказать, что он работает, — то есть ловит регрессии, которые в него подсадили намеренно. Компоненты, каждый из которых вы уже строили в курсе:
- Golden-датасет: ≥ 50 кейсов в JSONL, версионирован, стратифицирован по сегментам, включает регрессионные кейсы и happy path (урок 2).
- Раннер: promptfoo или свой скрипт; temperature 0, пиненая версия модели, кэш.
- Три слоя проверок: детерминированные ассерты (формат, обязательные и запрещённые элементы); калиброванный judge с бинарной рубрикой и κ ≥ 0.6 против ваших меток (урок 3); статистический гейт — непрегрессия против baseline-прогона с бутстрап-CI разности (урок 6).
- CI-workflow: smoke на PR (≤ 10 минут), full по требованию; гейты: 100% на регрессионных кейсах, непрегрессия по сегментам (урок 4).
- Отчёт: pass rate по сегментам с SEM, список перевернувшихся кейсов с диффами, стоимость прогона.
Контракт: любой PR, меняющий промпт, модель, параметры или retrieval, блокируется при срабатывании гейта. Формулировка «harness работает» отныне означает не «он запускается», а «он ловит то, что должен ловить, и молчит, когда ломать нечего». Это и будем измерять.
Подсадка регрессий: мутационное тестирование эвалов
Как проверяют тесты в классической разработке? Мутационным тестированием: вносят в код заведомые поломки и смотрят, покраснеют ли тесты. Тот же приём — единственный честный способ проверить eval-harness. Напарник (или вы сами через неделю, в отдельной ветке, не подглядывая) подсаживает 5 регрессий из каталога:
1. Формат: удалить из промпта инструкцию о формате дат/валюты/структуры ответа.
2. Edge-case: сломать обработку граничного входа (пустой запрос, другой язык,
вопрос вне домена — там, где промпт содержал специальную ветку).
3. Модель: подменить на заметно более слабую/дешёвую в конфиге.
4. Retrieval: top_k с 5 до 1, или отключить реранкер, или испортить шаблон,
в который вставляется контекст.
5. Verbosity-ловушка: инструкция «отвечай максимально подробно и развёрнуто» —
ответы длиннее, содержания не больше; проверка judge на verbosity bias.
Каждая мутация оформляется отдельным PR — harness должен отработать в своём штатном режиме, как на реальном изменении. Правило разбора: если мутация прошла зелёной, у harness слепое пятно, и чинится оно добавлением кейсов или ассертов, а не «починкой» конкретной мутации задним числом. Мутация 5 — самая коварная: ассерты формата она не трогает, средний judge-скор может даже вырасти; ловится либо пунктом рубрики о многословии, либо отдельной метрикой длины ответа с гейтом на её рост.
Метрики самого harness: catch rate и ложные тревоги
У harness, как у любого детектора, две характеристики: чувствительность и специфичность. Чувствительность — catch rate: доля пойманных мутаций из подсаженных. Цель капстоуна — не меньше 4 из 5. Специфичность проверяется «невинными» диффами: 3–5 PR с изменениями, не влияющими на поведение, — рефакторинг кода вокруг промпта, правка комментариев, эквивалентная перефразировка инструкции без смены смысла. Harness не должен на них краснеть: гейт, который блокирует безобидные PR, команда за месяц приучится игнорировать — и он умрёт социально раньше, чем технически.
Обязательный разбор: какой слой поймал какую мутацию. Типичная картина: формат ловят детерминированные ассерты (мутация 1), граничные кейсы — сегментные пороги (мутация 2, если в датасете есть сегмент edge — проверьте!), слабую модель — судья и статистический гейт на полном сете (мутация 3), retrieval — faithfulness-рубрика (мутация 4), verbosity — метрика длины (мутация 5). Если всё поймал один слой — остальные не работают или избыточны; если мутацию 3 поймал только full-прогон, а smoke пропустил — это нормально и означает, что вы правильно понимаете разрешающую способность маленького набора.
Операционные лимиты: smoke ≤ 10 минут и с посчитанной стоимостью в долларах; full — с бюджетом, известным заранее. Harness, о цене которого никто не знает, однажды молча отключат.
Отчёт, приёмка и жизнь после капстоуна
Финальный артефакт капстоуна — отчёт, по которому другой инженер поймёт и повторит вашу работу. Состав: (1) таблица мутаций — «мутация → пойман/пропущен → каким слоем → каким кейсом/гейтом»; (2) результаты невинных диффов — ложных тревог нет или разобраны; (3) метрики harness — catch rate, время и стоимость smoke и full; (4) калибровка judge — каппа против ваших ручных меток, дата калибровки, модель судьи; (5) выводы — найденные слепые пятна и добавленные после них кейсы. Отдельной строкой — версия датасета, промпта, моделей системы и судьи: без этого отчёт нельзя воспроизвести.
Критерии приёмки капстоуна: catch rate ≥ 4/5; ноль неразобранных ложных тревог; smoke укладывается в лимит; в датасете ≥ 50 кейсов с сегментами и регрессионными кейсами; судья калиброван (κ ≥ 0.6); статистический гейт использует парное сравнение с CI, а не голые проценты.
Что дальше, за пределами курса: онлайн-скоринг сэмпла продакшена тем же judge и алерты на дрейф; автопополнение датасета из инцидентов как штатный процесс; квартальная сверка распределения сегментов с живым трафиком; error bars во всех отчётах о качестве — по умолчанию, а не по праздникам. Главный вывод курса: эвалы — не разовый артефакт перед релизом, а контур обратной связи, такой же постоянный, как тесты и мониторинг. Прод рождает кейсы — кейсы охраняют прод.
Practice
Капстоун: harness против пяти мутаций
Соберите полный harness по контракту урока: датасет ≥ 50 кейсов, раннер, три слоя проверок, CI-workflow с гейтами и отчётом. Передайте напарнику каталог мутаций (или выполните роль напарника сами в отдельной ветке через несколько дней): 5 подсаженных регрессий пятью PR плюс 3 невинных диффа. Прогоните все 8 PR через harness, разберите результаты по слоям, устраните найденные слепые пятна добавлением кейсов.
Deliverable
Репозиторий с harness и финальный отчёт: таблица мутаций со слоями поимки, catch rate ≥ 4/5, разбор ложных тревог, стоимость и время прогонов, калибровка judge и список кейсов, добавленных после разбора слепых пятен.
Checkpoint
Представьте свой harness команде: почему ему можно доверять блокировку PR и как вы это доказали.
- ✓ Доказательство — мутационный тест: названы подсаженные регрессии, catch rate и слой, поймавший каждую.
- ✓ Показана специфичность: невинные диффы прошли зелёными, ложные тревоги разобраны.
- ✓ Harness воспроизводим: версии датасета, промпта и моделей зафиксированы, стоимость и время прогонов известны, judge калиброван с κ ≥ 0.6.
Check yourself
Sources