Экспресс-курс · No. 13
ИИ-фича построена на недетерминированном компоненте — один и тот же ввод может дать разный вывод, а «выглядело хорошо, когда я попробовал» — это не тест. Эвал — это набор тестов для этого компонента: известные входы, оценённые выводы, прогон на каждом изменении. Это негламурная дисциплина, что отделяет демо, на которое ты надеешься, от продукта, про который ты знаешь.
24 понятия · 25 схем · шпаргалка в конце
Обычный код можно юнит-тестировать, потому что один и тот же ввод даёт один и тот же вывод. LLM это ломает, так что нужен другой вид теста — а без него ты летишь вслепую.
Карта: 24 понятия в семи группах
Карта метро: сначала видишь линии целиком, потом едешь по станциям.
Сначала три основы — что такое эвал, почему настройка «на ощупь» не работает и почему последние 15% качества — это бо́льшая часть работы. Дальше шесть групп, по одной на главу: что мерить, эвал-набор, как оценивать, агенты, оффлайн и онлайн и как строить хорошо.
У каждого понятия дальше одно и то же: английское название (запомни его — это термин), образ из жизни, схема и карточка с полями: проблема, идея, пример, цена, когда брать и связи.
Eval — тест для угадывателя
Оценить эссе — не то же, что проверить сумму: нет единственной верной строки для сверки, и один и тот же промпт каждый раз даёт слегка другое эссе.
Обычный тест утверждает output === expected. LLM недетерминирована (non-deterministic) и открыта: один и тот же промпт даёт разный текст, а «верно» — часто качество, а не точная строка. Так что модель утверждения ломается. Эвал (eval) её заменяет: набор входов, у каждого — способ оценить, насколько хорош вывод, прогоняемый раз за разом, — тестирование, построенное для компонента, что не возвращает одно и то же дважды.
- Проблема
LLM недетерминирована:
output === expectedне работает, «верно» — это качество.- Идея
- Набор входов + способ оценить каждый вывод + прогон на каждом изменении.
- Пример
Сто вопросов к саппорт-боту, у каждого — признак хорошего ответа; итог — «84% прошли».
- Цена
- Время на сбор случаев и на способы оценки.
- Когда брать
- Для любой фичи, где в цепочке есть LLM.
- Связи
Строится на golden set, оценивается graders, гоняется в CI gate.
Tuning by vibes — настройка на ощупь
Повар, что никогда не пробует блюдо, а просто крутит рецепт и надеется, — он не может понять, помогло ли вчерашнее изменение или тихо его испортило.
Без эвала ты настраиваешь промпты на ощупь (by vibes): попробовал, окинул взглядом пару выводов, отгрузил, если ощущается лучше. Ловушка в том, что ты не видишь регрессий (regressions) — изменение, что чинит один случай, часто ломает три, что ты не перепроверил. Эвал превращает «ощущается лучше» в «набрал 84% против 79%», а это разница между инженерией и гаданием.
- Что это
Меняешь промпт, смотришь пару выводов, выкатываешь, если «кажется лучше».
- Почему плохо
- Не видно регрессий: починил один случай — сломал три.
- Пример
- «Вроде стало лучше» вместо «84% против 79%».
- Лекарство
- Даже маленький eval, прогнанный до и после изменения.
- Связи
- Противоположность Eval-driven Development.
The Last Mile — 80% быстро, 95% — это весь проект
Первый черновик чего угодно приходит быстро. Превращение грубого черновика в надёжное — вот куда уходит реальное время.
Вот тяжёлая правда, ради которой эвалы и существуют: демо, что верно в 80% случаев, занимает вечер; вытягивание оттуда до 95% — это бо́льшая часть работы. Этот последний отрезок, последняя миля (last mile), находится случай за случаем — краевые входы, редкие сбои, — и найти и починить их можно, только если меришь. Эвал — это прибор, что делает долгий подъём видимым.
- Что это
Первые 80% качества приходят быстро, оставшиеся 15% — бо́льшая часть работы.
- Почему так
Остаток — это краевые входы и редкие сбои, их находят только по одному.
- Пример
- Демо за вечер работает; продукт на нём — недели доводки.
- Следствие
- Без измерения этот подъём не виден и не управляем.
- Связи
- Его делают видимым eval, hard cases и slicing.
Эвал — это сеть от регрессий и твоя спека
Страховка позволяет скалолазу попробовать тяжёлый ход, потому что срыв не будет смертельным, — она делает смелые изменения безопасными.
Как только у тебя есть эвал, ты можешь поменять промпт, заменить модель или перестроить конвейер и сразу увидеть, помогло это или навредило. Он ловит регрессии раньше пользователей и тихо становится настоящей спецификацией (spec) «как выглядит хорошо» для твоей фичи. Без него каждое изменение — азартная игра; с ним улучшение становится циклом, что ты реально можешь крутить.
Недетерминированный компонент не юнит-тестируется. Эвал оценивает его вместо этого — а без него каждое изменение это догадка.
«Оно хорошее?» не измеримо. Первая реальная работа эвалов — превратить этот смутный вопрос в конкретные вещи, что ты можешь оценить, выбранные под работу, что делает твоя фича.
Eval Criteria — преврати «хорошо» в конкретные проверки
Экзамен по вождению не спрашивает «ты хороший водитель?» — он оценивает конкретное: подал ли сигнал, держался ли полосы, полностью ли остановился, припарковался ли в линиях.
«Качество» слишком смутно, чтобы оптимизировать. Разбей его на измеримые свойства — критерии оценки (eval criteria): был ли ответ верен, был ли заземлён в источнике, валиден ли формат, вызвал ли нужный инструмент, верны ли длина и тон? Каждое — то, что можно оценить. Навык — выбрать те немногие свойства, что реально важны для твоей задачи, а не мерить всё.
- Проблема
- «Оно хорошее?» нельзя измерить и нельзя оптимизировать.
- Идея
Разбить качество на свойства: верность, заземлённость, формат, инструмент, длина и тон.
- Пример
- «JSON валиден по схеме», «ответ опирается на найденный документ».
- Цена
- Нужно решить, что важно, — и честно отказаться от остального.
- Связи
Выбор критериев — это task-specific metrics; проверяют их graders.
Task-specific Metrics — метрика под работу
Переводчика судишь по верности и беглости, кассира — по скорости и точности; не тот аршин — бесполезная оценка.
Разным фичам нужны разные метрики (metrics). RAG-система: извлекла ли нужные чанки и верен ли ответ им? Классификатор: точность (accuracy) против меток. Агент: выбрал ли нужные инструменты и достиг ли цели? Сводка: верна, полна, кратка. Бери метрики, что отображают, что сбой реально значит для твоей задачи, иначе будешь оптимизировать цифру, что не важна.
- Проблема
- Общая метрика «для всего» меряет не то, что ломается у тебя.
- Идея
- Метрика отражает, что значит сбой для этой конкретной фичи.
- Пример
RAG — нужные чанки и верность им; классификатор — accuracy; агент — инструменты и цель.
- Цена
- Под каждую фичу метрики приходится продумывать отдельно.
- Связи
- Конкретизирует eval criteria; агентам добавляет trajectory.
Faithfulness vs Correctness — верность и правильность
Студент может написать красиво аргументированный ответ, что неверен, или неуклюжий, что верен. Стиль и истина — отдельные оценки.
Два из важнейших свойств путают. Правильность (correctness) — верен ли ответ на деле; верность (faithfulness) — подкреплён ли он предоставленным контекстом без выдумки. Заземлённая система может быть верна источнику (она его использовала) и при этом неправа (источник был неверен) или права и при этом неверна источнику (угадала, а не из контекста). Измерение их отдельно говорит тебе, где сбой.
- Что это
Correctness — ответ верен. Faithfulness — ответ взят из данного контекста, без выдумки.
- Почему важно
- Разные сбои лечатся в разных местах.
- Пример
Верен источнику, но неправ — чини данные или поиск. Прав, но не из источника — чини заземление.
- Подвох
- Один общий балл «качества» смешивает оба и прячет причину.
- Связи
- Главная пара метрик для RAG; часто оценивается LLM-as-judge.
Slicing — одна цифра прячет слишком много
Средняя температура «комфортно» может прятать морозную комнату и знойную. Агрегат стирает случаи, что нужнее всего увидеть.
Единый общий балл — стартовая точка, а не картина. Разбей результаты по срезам (slicing) — по категории и сложности: лёгкие против тяжёлых, каждый тип вопроса, каждый режим сбоя, — потому что ровные 85% могут быть 100% на лёгких и 40% на тех, что важны. Ценность эвала — в разбивке, что показывает ровно, куда целиться дальше.
- Проблема
- Средний балл стирает случаи, где система реально падает.
- Идея
- Считать балл отдельно по категории, сложности, режиму сбоя.
- Пример
- 85% в целом = 100% на лёгких + 40% на тяжёлых.
- Цена
- Случаи в наборе надо размечать по категориям.
- Связи
Показывает, куда идти на last mile; опирается на разметку golden set.
«Оно хорошее?» — не метрика. Разбей качество на конкретные, оцениваемые свойства под свою задачу — и никогда не доверяй единой агрегатной цифре.
Эвал честен ровно настолько, насколько примеры в нём. Датасет — входы и их известные хорошие исходы — это настоящий актив, и бо́льшая часть заботы идёт сюда.
Golden Set — входы с известными хорошими исходами
Ключ ответов учителя — вопросы в паре с тем, как выглядит верный ответ, чтобы оценка была последовательной, а не по настроению.
Ядро эвала — золотой набор (golden set): коллекция представительных входов, у каждого — известный хороший ответ или ясное определение успеха. Это то, против чего ты оцениваешь. Его построение — реальная работа, именно здесь ты пришпиливаешь, что вообще значит «верно» для твоей фичи, — и это актив, что делает каждое будущее изменение измеримым.
- Проблема
- Без эталона нечем сравнивать выводы — оценка идёт по настроению.
- Идея
Представительные входы, у каждого — хороший ответ или ясный критерий успеха.
- Пример
«Отмени подписку» → должен вызвать
cancel_subscription; «asdf??» → уточняющий вопрос.- Цена
- Реальная работа: решить, что значит «верно», для каждого случая.
- Связи
Наполняется hard cases и production sampling; по нему гоняется offline eval.
Hard Cases — покрой края и известные сбои
Мост нагружают-испытывают самыми тяжёлыми грузовиками и худшими штормами, а не средней машиной в солнечный день.
Набор только из лёгких, типичных входов даёт льстивый, бесполезный балл. Намеренно включай тяжёлые случаи (hard cases): неоднозначные вопросы, краевые входы (edge cases), состязательные промпты (adversarial prompts) и особенно сбои, что ты уже видел. Каждый раз, когда баг доходит до прода, добавляй его в эвал как регрессионный случай (regression case), чтобы он не смог тихо вернуться. Набор должен концентрироваться там, где система вероятнее всего сломается.
- Проблема
- Набор из лёгких случаев даёт красивый и бесполезный балл.
- Идея
Нарочно добавлять неоднозначное, краевое, состязательное и всё, что уже ломалось.
- Пример
- Баг дошёл до прода → его вход становится постоянным случаем в наборе.
- Цена
- Балл падает — зато становится честным.
- Связи
- Часть golden set; источник случаев — production sampling.
Production Sampling — собирай реальные примеры из прода
Лучшие тестовые вопросы приходят из реального экзамена, что сдавали студенты, а не из того, что учитель вообразил, что они спросят.
Богатейший источник эвал-случаев — реальное использование: что пользователи на деле спрашивали, особенно то, что спросили и что пошло не так. Майни свои логи и фидбек на реальные входы и вплетай их в набор. Выдуманные примеры отражают то, что ты думаешь, происходит; продовые отражают то, что происходит, включая грязные формулировки и странные запросы, что ты бы и не выдумал.
- Проблема
- Выдуманные примеры отражают то, что ты думаешь, а не то, что есть.
- Идея
- Брать входы из логов и фидбека, особенно те, где что-то пошло не так.
- Пример
- Грязная формулировка пользователя, которую ты бы сам не придумал.
- Цена
- Нужны логи, а данные пользователей надо чистить от личного.
- Связи
- Питает golden set; сигналы приходят из user feedback.
Маленький и острый бьёт большой и затхлый
Пятьдесят хорошо подобранных вопросов, что прощупывают реальные слабые места, учат тебя большему, чем тысяча случайных, в которые ты толком не смотришь.
Не нужны тысячи случаев, чтобы начать, — пары десятков хорошо подобранных, покрывающих главные поведения и известные режимы сбоя, хватит, чтобы ловить большинство регрессий и направлять настройку. Начни с малого, держи честно и расти его по мере того, как узнаёшь, где система ломается. Эвал, что ты реально гоняешь, бьёт огромный, что не гоняешь.
Золотой набор — это актив. Спаривай реальные входы с известными хорошими исходами, концентрируйся на тяжёлом и сломанном и расти его по мере того, как узнаёшь.
Когда у тебя есть входы и ожидания, нужен способ оценить каждый вывод. Методы идут от дешёвых и точных до гибких и ошибающихся — и ты тянешься к самому дешёвому, что подходит.
Code-based Graders — точные и правиловые проверки
Проверка теста с выбором ответа не требует суждения — ответ верен или нет, и машина оценивает его мгновенно.
Когда вывод ограничен, оценивай его детерминированно — кодом, code-based grader: точное совпадение (exact match) для классификации, регэксп или проверка схемы для формата, вызвал-ли-нужный-инструмент для агента, верна-ли-цифра для извлечения. Эти проверки дёшевы, быстры и неоспоримы. Всегда проталкивай как можно бо́льшую часть эвала в эту категорию — это самая надёжная оценка из всех.
- Проблема
- Суждение дорого и спорно там, где ответ можно просто сверить.
- Идея
- Проверить вывод кодом: совпадение, регэксп, схема, нужный вызов.
- Пример
Метка класса совпала; JSON прошёл схему; агент вызвал нужный инструмент.
- Цена
- Работает только для ограниченных выводов — эссе так не проверишь.
- Связи
Первая ступень лестницы; для размытого — LLM-as-judge, для агентов — step-level checks.
LLM-as-Judge — модель оценивает размытое
Для эссе ты приводишь второго экзаменатора с ясной рубрикой — суждение, но направленное явными критериями, чтобы оно было последовательным.
Для открытых выводов — верна ли эта сводка? полезен ли этот ответ? — точного совпадения нет, так что ты используешь модель для оценки, LLM-as-judge: дай второй модели вывод, контекст и ясную рубрику (rubric) и пусть оценит. Это масштабирует человекоподобное суждение на тысячи случаев. Это стандартный инструмент для качеств, что не проверить правилом, — но он идёт с оговорками.
- Проблема
Открытые выводы не сверить со строкой, а людей на тысячи случаев не хватит.
- Идея
- Вторая модель оценивает вывод по контексту и явной рубрике.
- Пример
- «Верна ли сводка источнику? Оцени 1–5 и объясни одной фразой».
- Цена
- Судья сам ошибается и предвзят — его надо проверять.
- Связи
Без judge validation ему нельзя верить; часто меряет faithfulness.
Judge Validation — судью тоже надо судить
Второй рефери может быть предвзят — благоволить ответу подлиннее или тому, что звучит уверенно, — так что ты сверяешь рефери с парой человеческих решений, прежде чем ему доверять.
У LLM-судьи есть режимы сбоя: он может предпочитать многословные ответы (verbosity bias), поддаваться уверенному тону или дрейфовать от твоего намерения. Так что валидируй судью против человеческих оценок на выборке, дай ему острую рубрику с примерами и держи его простым. Судья, что ты не проверил, — это просто ещё одна неизмеренная модель; не доверяй его баллам, пока не подтвердил, что они отслеживают то, что тебя реально волнует.
- Проблема
Судья любит длинные и уверенные ответы и может уйти от твоего намерения.
- Идея
- Сравнить баллы судьи с человеческими на выборке, до того как верить.
- Пример
Пара десятков случаев оценены людьми; судья совпадает — значит, ему можно верить.
- Цена
- Немного ручной разметки и перепроверка при смене судьи или рубрики.
- Связи
- Обязательная пара к LLM-as-judge; использует human review.
Human Review — люди в контуре, малыми дозами
Даже с автоматической оценкой шеф всё равно пробует еду — быстрая выборочная проверка, что приборы тихо не разошлись.
Автоматическая оценка масштабируется, но периодически читай реальные выводы сам — human review. Выборочно проверяй, всматривайся в сбои и проверяй на здравость, что твои метрики всё ещё отражают реальное качество. Человеческое ревью не масштабируется на каждый случай, но малая, регулярная доза ловит то, что твои автоматические баллы упускают, — и не даёт тебе оптимизировать цифру, что отъехала от реальности.
- Проблема
- Автоматические баллы могут тихо разойтись с реальным качеством.
- Идея
- Регулярно читать выборку реальных выводов, особенно сбои.
- Пример
Раз в неделю прочитать случаи, где балл упал, и проверить, согласен ли ты.
- Цена
- Время людей — поэтому малыми дозами, не на каждый случай.
- Связи
- Последняя ступень лестницы оценщиков; основа judge validation.
Оценивай детерминированно, где можешь, используй LLM-судью для размытого остатка — и валидируй судью, потому что непроверенный оценщик — просто ещё одна догадка.
Агентам нужно больше, чем оценка финального ответа, потому что они могут прийти к чистому ответу через сломанный процесс. Чтобы доверять агенту, ты меряешь путь, а не только пункт назначения.
Чистый финальный ответ может прятать сломанную середину
Экзамен по математике, оценённый лишь по финальной цифре, пропускает студента, что пришёл к ней через две взаимно сокращающиеся ошибки, — ты не узнаёшь ничего о том, что реально случилось.
В многошаговом агенте промежуточная ошибка может пройти проверку финального вывода, испортив процесс: он достаёт нужный источник, на полпути приписывает факт не туда и пишет чистую сводку, что неверна. Оценивай только финальный ответ — и ты это пропустишь. Сбои, что нужнее всего поймать, — те, к которым проверка-только-пункта-назначения слепее всего.
Trajectory Evaluation — оценивай траекторию
Экзаменатор по вождению смотрит всю поездку — каждый сигнал, проверку зеркал и смену полосы, — а не только прибыл ли ты по адресу.
Для агентов ты оцениваешь траекторию (trajectory): на каждом шаге выбрал ли он нужный инструмент, передал ли нужные аргументы, извлёк ли нужный контекст и рассуждал ли здраво? Это ловит сломанную середину, что финальная проверка упускает, и говорит тебе, какой шаг сбоил, — куда полезнее, чем знать лишь, что конец был неверен. Шаги — вот где надёжность агента реально делается или теряется.
- Проблема
- Верный финал может скрывать неверные шаги.
- Идея
Оценивать каждый шаг: инструмент, аргументы, извлечённый контекст, рассуждение.
- Пример
Шаги 1–2 верны, на шаге 3 агент взял не тот контекст — эвал называет шаг 3.
- Цена
- Нужно логировать и размечать шаги, а не только ответ.
- Связи
- Состоит из step-level checks; дополняется operational metrics.
Step-level Checks — проверяй вызовы инструментов и извлечения напрямую
Аудит научного ассистента — это проверка, какие источники он реально вытянул и какие вызовы сделал, а не только чтение его финальной записки.
Бо́льшая часть поведения агента конкретна и оцениваема без суждения: вызвал ли он send_email, когда должен был, с верным получателем? извлёк ли релевантный документ? остался ли в пределах прав на инструменты? Это детерминированные проверки на шагах (step-level checks), дешёвые и точные, и они пришпиливают большую долю сбоев агента в точности.
- Что это
- Код-проверки конкретных шагов агента, без судьи.
- Как работает
Сверить: какой инструмент вызван, с какими аргументами, какой документ извлечён.
- Пример
send_emailвызван, получатель верный, прав не превышено.- Плюс
- Дёшево, точно и сразу показывает место сбоя.
- Связи
- Это code-based graders, применённые к trajectory.
Operational Metrics — меряй и скучные операционные истины
Службу доставки судят не только по тому, прибыла ли посылка, но по тому, сколько заняло, сколько попыток и сколько стоило.
Помимо правильности, отслеживай операционные метрики (operational metrics) агента: сколько шагов он взял, как часто зацикливался или повторял, задержку (latency) и стоимость (cost) на задачу. Цикл, что приходит к верному ответу за двадцать дорогих шагов, когда хватило бы трёх, — это проблема надёжности и стоимости, что твой балл финального ответа не покажет. Эти цифры вскрывают агентов, что работают, но не переживут прода.
- Проблема
- Балл за финальный ответ не видит, какой ценой он получен.
- Идея
- Считать шаги, циклы и повторы, задержку и стоимость на задачу.
- Пример
- Верный ответ за 20 дорогих шагов там, где хватило бы трёх.
- Цена
- Нужна трассировка каждого запуска.
- Связи
Дополняет trajectory evaluation; в проде за ними следит online eval.
Агент может прийти к чистому ответу через сломанный процесс. Оценивай траекторию — инструменты, извлечения, шаги, — а не только пункт назначения.
Эвалы бывают двух видов, что делают разную работу: набор тестов, что гоняешь до выкатки, и измерение, что держишь работающим в проде. Нужны оба, потому что мир — не твой тестовый набор.
Offline Eval — гейт до выкатки
Тестовый трек, где ты прогоняешь машину через испытания, прежде чем она хоть раз повезёт пассажира, — контролируемо, повторяемо, до релиза.
Оффлайн-эвал (offline eval) — это твой золотой набор, прогнанный против изменения до выкатки: набрал ли этот новый промпт или модель лучше на случаях, что ты собрал? Это контролируемо и повторяемо, место, где ты ловишь регрессии и безопасно сравниваешь варианты. Это эвал, что ты вшиваешь в цикл разработки — в идеале гейтом в CI, чтобы ничто не отгрузилось, что роняет балл.
- Проблема
Нужно знать, что изменение безопасно, до того как его увидят пользователи.
- Идея
- Прогнать золотой набор на новой версии и сравнить с базой.
- Пример
- Новый промпт: 84% против 79% у старого — можно выкатывать.
- Цена
- Видит только то, что есть в наборе, — мир шире.
- Связи
Работает на golden set; автоматизируется CI gate; пара к online eval.
Online Eval — измерение реального мира
Как бы хорош ни был тестовый трек, ты всё равно мониторишь машины, когда они на реальных дорогах, — потому что у реальных дорог есть ямы, которых у трека не было.
Прод ведёт себя так, как ни один оффлайн-набор полностью не предскажет: реальные пользователи формулируют то, чего ты не вообразил, и распределение входов смещается. Так что ты меряешь и онлайн (online eval) — выбираешь и оцениваешь живые выводы, следишь за метриками качества и собираешь сигналы пользователей. Оффлайн-набор доказывает, что изменение безопасно выкатить; онлайн-измерение говорит, что реально происходит, когда оно вышло.
- Проблема
- Реальные пользователи и входы не совпадают с тестовым набором.
- Идея
- Брать выборку живых выводов, оценивать её и следить за метриками.
- Пример
Часть ответов в проде прогоняется через судью; результат — на дашборде.
- Цена
- Инфраструктура оценки в проде и стоимость судьи на трафике.
- Связи
Ловит drift; собирает user feedback; находит новые hard cases.
User Feedback — бесплатный эвал-сигнал
Кнопка «палец вверх» и ящик жалоб — это непрерывный, бесплатный опрос о том, реально ли штука работает для тех, кто ею пользуется.
Твои пользователи оценивают тебя, собираешь ты это или нет. Лови сигналы (user feedback signals) — палец вверх/вниз, правки, повторы, отказы, эскалации — и возвращай их назад. Всплеск повторов или пальцев вниз — раннее предупреждение; конкретные сбои становятся завтрашними эвал-случаями. Это замыкает цикл: прод учит эвал-набор, как выглядит реальность, а эвал-набор защищает следующий релиз.
- Что это
- Палец вверх/вниз, правки, повторы, отказы, эскалации.
- Зачем
- Бесплатная, непрерывная оценка от тех, кто реально пользуется.
- Пример
- Всплеск повторов после релиза — раннее предупреждение.
- Подвох
- Сигналы шумные: это повод посмотреть, а не готовый балл.
- Связи
- Часть online eval; превращается в hard cases в golden set.
Drift — следи за дрейфом
Весы медленно уходят из калибровки — ничего драматичного, просто каждое показание чуть больше мимо, пока однажды цифры не станут неверными.
Система, что набирала хорошо, может деградировать тихо — это дрейф (drift): провайдер модели обновляется, твои данные смещаются, паттерны использования меняются. Без постоянного онлайн-измерения ты узнаёшь это от злых пользователей, а не с дашборда. Отслеживай качество во времени, чтобы дрейф проявлялся трендом, на который можно реагировать, а не сюрпризом. Эвал — не одноразовый гейт; это жизненный показатель, что ты держишь под наблюдением.
- Что это
- Медленное, тихое падение качества без изменений с твоей стороны.
- Причины
Обновление модели у провайдера, сдвиг данных, новые паттерны использования.
- Пример
- Каждую неделю чуть хуже — пока жалоба не придёт раньше дашборда.
- Лекарство
- Следить за качеством во времени и ставить порог-тревогу.
- Связи
- Ловится online eval; новые сбои уходят в golden set.
Оффлайн-эвалы гейтят релиз; онлайн-эвалы следят за реальностью. Первое доказывает, что изменение безопасно, второе говорит, что реально происходит.
Эвалы — это практика, а не разовое дело. Навык — начать раньше, чем чувствуешь себя готовым, вшить измерение в цикл и не дать цифре стать целью, что тебе врёт.
Eval-driven Development — сначала эвал, потом настройка
Ты калибруешь термометр, прежде чем начать крутить духовку, — иначе каждая регулировка это гадание, наряженное прогрессом.
Частая ошибка — бесконечно крутить промпт и лишь потом, может быть, строить эвал. Переверни: напиши маленький эвал до того, как оптимизируешь, чтобы каждое изменение мерилось с самого начала, — это разработка от эвала (eval-driven development). Даже десять случаев бьют ноль. Настройка без эвала ощущается продуктивной и в основном не является — ты двигаешь цифры, что не видишь.
- Проблема
- Промпт крутят неделями, а эвал — «потом, может быть».
- Идея
- Маленький эвал — до первой оптимизации; каждое изменение мерится.
- Пример
- Десять случаев сегодня, прогон перед каждой правкой промпта.
- Цена
- Час в начале, пока ничего «не работает».
- Связи
- Лекарство от tuning by vibes; дальше растёт в CI gate.
CI Gate — сделай эвал гейтом в CI
Код не мёржится, если тесты падают, — и та же дисциплина не даёт тихо-худшему промпту дойти до пользователей.
Как только у тебя есть эвал, гоняй его автоматически на каждом изменении и блокируй релиз, если балл падает ниже планки, — это гейт в CI (CI gate). Это превращает эвалы из того, что делаешь, когда вспомнишь, в защиту, что всегда включена, — ИИ-эквивалент проходящего набора тестов. «Эвалы или это не выпущено» — стандарт, что стоит держать: неизмеренное изменение ИИ-фичи это непротестированный деплой.
- Проблема
- Эвал, что гоняют «когда вспомнят», не ловит тихо-худший промпт.
- Идея
- Прогон на каждом изменении; балл ниже планки — релиз заблокирован.
- Пример
- PR с правкой промпта не мёржится, пока эвал не прошёл.
- Цена
- Время и деньги на прогон набора в каждом PR.
- Связи
- Автоматизирует offline eval; ловит регрессии до прода.
Goodhart's Law — не дай метрике стать целью
Преподавание чисто под тест рождает студентов, что блестяще сдают экзамен и не могут делать работу, — балл вырос, а то, что он мерил, нет.
Когда мера становится целью, она перестаёт быть хорошей мерой — закон Гудхарта (Goodhart's law). Можно переобучить (overfit) промпты под твои конкретные эвал-случаи и смотреть, как балл растёт, пока реальное качество стоит. Защищайся: держи часть случаев отложенными (held-out), освежай набор новыми продовыми сбоями и помни, что эвал — это прокси ценности для пользователя, а не сама ценность. Растущая цифра, что пользователи не чувствуют, — предупреждение, а не победа.
- Что это
- Когда мера становится целью, она перестаёт быть хорошей мерой.
- Как проявляется
- Промпт подогнан под эвал-случаи: балл растёт, качество — нет.
- Пример
- +10 пунктов на наборе, а пользователи разницы не замечают.
- Защита
- Отложенные случаи, свежие продовые сбои, помнить, что балл — прокси.
- Связи
- Лечится production sampling и human review.
Начни с малого, расти со сбоями
Хороший набор тестов не пишется разом — он накапливается, по случаю на баг, пока тихо не покроет всё, что когда-либо шло не так.
Не жди идеального, всеохватного эвала — никогда не выкатишь. Начни с горстки случаев для ядрового поведения и добавляй один каждый раз, когда что-то ломается. Со временем набор растёт ровно по контурам того, где твоя система реально сбоит, а это в точности там, где тебе нужно покрытие. Эвал зреет вместе с продуктом, и он никогда по-настоящему не закончен.
Как понятия связаны
Колесо, что крутится: каждый оборот делает набор честнее, а релиз — безопаснее.
Всё в курсе — части одного цикла. Критерии говорят, что мерить; golden set — на чём; graders (код, судья, человек) ставят балл. Offline eval с CI gate охраняет релиз, online eval смотрит за реальностью — фидбек и дрейф, — а найденные сбои становятся новыми случаями и возвращаются в набор. Для агентов оценивается траектория, а закон Гудхарта напоминает: балл — только прокси.
- Есть ли эвал вообще — набор входов со способом оценить выводы?
- Отображают ли метрики на работу, разбитые по сложности и типу сбоя, а не один ровный балл?
- Включает ли набор тяжёлые, странные и ранее-сломанные случаи, взятые из реального использования?
- Самый ли дешёвый надёжный метод оценки — детерминированный, где можно, валидированный судья, где нет?
- Для агентов оцениваются ли шаги, а не только финальный ответ?
- Гоняется ли это в CI, и как ты будешь мерить качество, когда оно вживую?
- Настройка промптов чтением пары выводов и выкаткой, когда ощущается лучше.
- Единый агрегатный балл без разбивки по типу случая или сложности.
- Эвал-набор только из лёгких, типичных входов — без краевых случаев, без прошлых сбоев.
- LLM-судья, что ты никогда не валидировал против человеческих оценок.
- Никакого мониторинга прода — о падении качества ты узнаешь из жалобы.
- Золотой набор реальных входов с известными хорошими исходами, сконцентрированный на тяжёлых случаях.
- Метрики, что отображают на задачу, оценённые самым дешёвым надёжным методом и разбитые.
- Оценка на уровне шагов для агентов и валидированный судья для размытых частей.
- Эвал — это гейт в CI, и регрессия добавляет случай, а не проскальзывает.
- Онлайн-измерение и фидбек пользователей возвращают новые сбои назад в набор.
Шпаргалка: все 24 понятия
Основы
- Evalэвал
Набор входов + способ оценить вывод + прогон на каждом изменении.
- Tuning by Vibesнастройка на ощупь
Посмотрел пару выводов и выкатил. Регрессий не видно.
- The Last Mile80% → 95%
80% — за вечер; до 95% — бо́льшая часть работы, случай за случаем.
Что мерить
- Eval Criteriaкритерии оценки
«Хорошо» разбито на конкретные проверяемые свойства.
- Task-specific Metricsметрики под задачу
RAG, классификатор, агент, сводка — у каждого свой аршин.
- Faithfulness vs Correctnessверность и правильность
Из контекста ли ответ — и верен ли он. Меряй отдельно.
- Slicingразбивка по срезам
Балл по категориям и сложности: средняя цифра прячет провалы.
Эвал-набор
- Golden Setзолотой набор
Реальные входы с известными хорошими исходами. Главный актив.
- Hard Casesedge, adversarial, regression
Тяжёлое, странное и уже ломавшееся — нарочно в наборе.
- Production Samplingслучаи из прода
Входы из логов и фидбека, особенно неудачные.
Как оценивать
- Code-based Graderдетерминированная проверка
Совпадение, регэксп, схема, нужный вызов. Дёшево и точно.
- LLM-as-Judgeмодель-судья
Вторая модель оценивает размытое по рубрике.
- Judge Validationпроверка судьи
Сверить баллы судьи с людьми, прежде чем верить.
- Human Reviewручная проверка
Малая регулярная доза чтения реальных выводов.
Агенты
- Trajectory Evaluationоценка траектории
Оценивать каждый шаг, а не только финальный ответ.
- Step-level Checksпроверки шагов
Код-проверки вызовов инструментов, аргументов и извлечений.
- Operational Metricsшаги, задержка, стоимость
Сколько шагов, циклов, времени и денег ушло на задачу.
Оффлайн и онлайн
- Offline Evalдо релиза
Золотой набор на новой версии — гейт до выкатки.
- Online Evalв проде
Выборка живых выводов, оценка, метрики качества.
- User Feedback Signalsсигналы пользователей
Пальцы, правки, повторы, отказы — бесплатный эвал-сигнал.
- Driftдрейф
Тихое падение качества со временем. Ловится только мониторингом.
Строить хорошо
- Eval-driven Developmentсначала эвал
Маленький эвал до первой оптимизации.
- CI Gateгейт в CI
Эвал на каждом изменении; балл упал — релиз заблокирован.
- Goodhart's Lawзакон Гудхарта
Мера, ставшая целью, перестаёт мерить. Балл — прокси.
Эвалы — не разовый тест. Это цикл — меряй, находи сбои, вплетай их назад, — что превращает недетерминированный компонент в то, чему можно доверять и что можно улучшать.