fedorthinks

Экспресс-курс · No. 13

ИИ-фича построена на недетерминированном компоненте — один и тот же ввод может дать разный вывод, а «выглядело хорошо, когда я попробовал» — это не тест. Эвал — это набор тестов для этого компонента: известные входы, оценённые выводы, прогон на каждом изменении. Это негламурная дисциплина, что отделяет демо, на которое ты надеешься, от продукта, про который ты знаешь.

24 понятия · 25 схем · шпаргалка в конце

§ 01

Обычный код можно юнит-тестировать, потому что один и тот же ввод даёт один и тот же вывод. LLM это ломает, так что нужен другой вид теста — а без него ты летишь вслепую.

Карта: 24 понятия в семи группах

Карта метро: сначала видишь линии целиком, потом едешь по станциям.

Сначала три основы — что такое эвал, почему настройка «на ощупь» не работает и почему последние 15% качества — это бо́льшая часть работы. Дальше шесть групп, по одной на главу: что мерить, эвал-набор, как оценивать, агенты, оффлайн и онлайн и как строить хорошо.

У каждого понятия дальше одно и то же: английское название (запомни его — это термин), образ из жизни, схема и карточка с полями: проблема, идея, пример, цена, когда брать и связи.

BasicsEvalTuning by vibes80% → 95%What to measureEval criteriaTask metricsFaithful vs correctSlicingEval setGolden setHard casesProduction samplingGradingCode-based gradersLLM-as-judgeJudge validationHuman reviewAgentsTrajectory evalStep-level checksOperational metricsOffline / onlineOffline evalOnline evalUser feedbackDriftDoing it wellEval-driven devCI gateGoodhart's law
Основы сверху, ниже — шесть групп, по ним идут главы 2–7.

Eval — тест для угадывателя

Оценить эссе — не то же, что проверить сумму: нет единственной верной строки для сверки, и один и тот же промпт каждый раз даёт слегка другое эссе.

Обычный тест утверждает output === expected. LLM недетерминирована (non-deterministic) и открыта: один и тот же промпт даёт разный текст, а «верно» — часто качество, а не точная строка. Так что модель утверждения ломается. Эвал (eval) её заменяет: набор входов, у каждого — способ оценить, насколько хорош вывод, прогоняемый раз за разом, — тестирование, построенное для компонента, что не возвращает одно и то же дважды.

Ordinary code: deterministicInputFunctionOutputalways 42assert ==pass / failLLM: non-deterministicInputLLManswer Aanswer Banswer CScorerubric · 0–1same input, different text → score the quality, don't match a string
Обычный код: один вход — один выход — assert. LLM: один вход — разные ответы, поэтому их оценивают баллом, а не сверкой строки.
ConceptEval· эвал, оценка ИИ-системы
Проблема

LLM недетерминирована: output === expected не работает, «верно» — это качество.

Идея
Набор входов + способ оценить каждый вывод + прогон на каждом изменении.
Пример

Сто вопросов к саппорт-боту, у каждого — признак хорошего ответа; итог — «84% прошли».

Цена
Время на сбор случаев и на способы оценки.
Когда брать
Для любой фичи, где в цепочке есть LLM.
Связи

Строится на golden set, оценивается graders, гоняется в CI gate.

Tuning by vibes — настройка на ощупь

Повар, что никогда не пробует блюдо, а просто крутит рецепт и надеется, — он не может понять, помогло ли вчерашнее изменение или тихо его испортило.

Без эвала ты настраиваешь промпты на ощупь (by vibes): попробовал, окинул взглядом пару выводов, отгрузил, если ощущается лучше. Ловушка в том, что ты не видишь регрессий (regressions) — изменение, что чинит один случай, часто ломает три, что ты не перепроверил. Эвал превращает «ощущается лучше» в «набрал 84% против 79%», а это разница между инженерией и гаданием.

the same 12 cases, before and after a prompt changev1v2✓✓✗✓✓✓✓✓✓✓✓✓✓✓✓✓✓✓✗✓✗✓✗✓you eyeballed these3 regressions you never sawan eval re-checks every case on every change
Новая версия промпта чинит случай, на который ты смотрел, и тихо ломает три других. Глазами этого не увидеть.
PitfallTuning by Vibes· настройка на ощупь
Что это

Меняешь промпт, смотришь пару выводов, выкатываешь, если «кажется лучше».

Почему плохо
Не видно регрессий: починил один случай — сломал три.
Пример
«Вроде стало лучше» вместо «84% против 79%».
Лекарство
Даже маленький eval, прогнанный до и после изменения.
Связи
Противоположность Eval-driven Development.

The Last Mile — 80% быстро, 95% — это весь проект

Первый черновик чего угодно приходит быстро. Превращение грубого черновика в надёжное — вот куда уходит реальное время.

Вот тяжёлая правда, ради которой эвалы и существуют: демо, что верно в 80% случаев, занимает вечер; вытягивание оттуда до 95% — это бо́льшая часть работы. Этот последний отрезок, последняя миля (last mile), находится случай за случаем — краевые входы, редкие сбои, — и найти и починить их можно, только если меришь. Эвал — это прибор, что делает долгий подъём видимым.

80%95%0found case by case:edge inputs, rare failuresan afternoonmost of the workeffort →quality ↑
До 80% — быстрый подъём за вечер. От 80% до 95% — долгая работа, случай за случаем.
ConceptThe Last Mile· 80% → 95%, последняя миля
Что это

Первые 80% качества приходят быстро, оставшиеся 15% — бо́льшая часть работы.

Почему так

Остаток — это краевые входы и редкие сбои, их находят только по одному.

Пример
Демо за вечер работает; продукт на нём — недели доводки.
Следствие
Без измерения этот подъём не виден и не управляем.
Связи
Его делают видимым eval, hard cases и slicing.

Эвал — это сеть от регрессий и твоя спека

Страховка позволяет скалолазу попробовать тяжёлый ход, потому что срыв не будет смертельным, — она делает смелые изменения безопасными.

Как только у тебя есть эвал, ты можешь поменять промпт, заменить модель или перестроить конвейер и сразу увидеть, помогло это или навредило. Он ловит регрессии раньше пользователей и тихо становится настоящей спецификацией (spec) «как выглядит хорошо» для твоей фичи. Без него каждое изменение — азартная игра; с ним улучшение становится циклом, что ты реально можешь крутить.

Prompt editModel swapPipeline changeEvalsame golden setHelpedship itHurtregression caughtnow
Любое изменение — промпт, модель, конвейер — проходит через тот же эвал и сразу показывает: помогло или навредило.

Недетерминированный компонент не юнит-тестируется. Эвал оценивает его вместо этого — а без него каждое изменение это догадка.

§ 02

«Оно хорошее?» не измеримо. Первая реальная работа эвалов — превратить этот смутный вопрос в конкретные вещи, что ты можешь оценить, выбранные под работу, что делает твоя фича.

Eval Criteria — преврати «хорошо» в конкретные проверки

Экзамен по вождению не спрашивает «ты хороший водитель?» — он оценивает конкретное: подал ли сигнал, держался ли полосы, полностью ли остановился, припарковался ли в линиях.

«Качество» слишком смутно, чтобы оптимизировать. Разбей его на измеримые свойства — критерии оценки (eval criteria): был ли ответ верен, был ли заземлён в источнике, валиден ли формат, вызвал ли нужный инструмент, верны ли длина и тон? Каждое — то, что можно оценить. Навык — выбрать те немногие свойства, что реально важны для твоей задачи, а не мерить всё.

Is it good?not measurableCorrect?scoreGrounded in source?scoreValid format?scoreRight tool called?scoreRight length & tone?score
Смутное «оно хорошее?» распадается на конкретные проверки, и у каждой свой балл.
ConceptEval Criteria· критерии оценки, измеримые свойства
Проблема
«Оно хорошее?» нельзя измерить и нельзя оптимизировать.
Идея

Разбить качество на свойства: верность, заземлённость, формат, инструмент, длина и тон.

Пример
«JSON валиден по схеме», «ответ опирается на найденный документ».
Цена
Нужно решить, что важно, — и честно отказаться от остального.
Связи

Выбор критериев — это task-specific metrics; проверяют их graders.

Task-specific Metrics — метрика под работу

Переводчика судишь по верности и беглости, кассира — по скорости и точности; не тот аршин — бесполезная оценка.

Разным фичам нужны разные метрики (metrics). RAG-система: извлекла ли нужные чанки и верен ли ответ им? Классификатор: точность (accuracy) против меток. Агент: выбрал ли нужные инструменты и достиг ли цели? Сводка: верна, полна, кратка. Бери метрики, что отображают, что сбой реально значит для твоей задачи, иначе будешь оптимизировать цифру, что не важна.

RAGright chunks retrieved · answer faithful to themClassifieraccuracy against labelsAgentright tools picked · goal reachedSummaryfaithful · complete · concise
Тип фичи определяет метрику: у RAG, классификатора, агента и сводки разные аршины.
PracticeTask-specific Metrics· метрики под задачу
Проблема
Общая метрика «для всего» меряет не то, что ломается у тебя.
Идея
Метрика отражает, что значит сбой для этой конкретной фичи.
Пример

RAG — нужные чанки и верность им; классификатор — accuracy; агент — инструменты и цель.

Цена
Под каждую фичу метрики приходится продумывать отдельно.
Связи
Конкретизирует eval criteria; агентам добавляет trajectory.

Faithfulness vs Correctness — верность и правильность

Студент может написать красиво аргументированный ответ, что неверен, или неуклюжий, что верен. Стиль и истина — отдельные оценки.

Два из важнейших свойств путают. Правильность (correctness) — верен ли ответ на деле; верность (faithfulness) — подкреплён ли он предоставленным контекстом без выдумки. Заземлённая система может быть верна источнику (она его использовала) и при этом неправа (источник был неверен) или права и при этом неверна источнику (угадала, а не из контекста). Измерение их отдельно говорит тебе, где сбой.

faithful to contextnot from contextanswer rightanswer wrongThe goalright, from the sourceRight by luckfix groundingSource was wrongfix retrieval / dataHallucinationboth broken
Две оси дают четыре исхода. Каждый указывает на своё место поломки: поиск, заземление или всё сразу.
TermFaithfulness vs Correctness· верность и правильность
Что это

Correctness — ответ верен. Faithfulness — ответ взят из данного контекста, без выдумки.

Почему важно
Разные сбои лечатся в разных местах.
Пример

Верен источнику, но неправ — чини данные или поиск. Прав, но не из источника — чини заземление.

Подвох
Один общий балл «качества» смешивает оба и прячет причину.
Связи
Главная пара метрик для RAG; часто оценивается LLM-as-judge.

Slicing — одна цифра прячет слишком много

Средняя температура «комфортно» может прятать морозную комнату и знойную. Агрегат стирает случаи, что нужнее всего увидеть.

Единый общий балл — стартовая точка, а не картина. Разбей результаты по срезам (slicing) — по категории и сложности: лёгкие против тяжёлых, каждый тип вопроса, каждый режим сбоя, — потому что ровные 85% могут быть 100% на лёгких и 40% на тех, что важны. Ценность эвала — в разбивке, что показывает ровно, куда целиться дальше.

85%overall scoresliceeasy cases100%hard cases40% — the ones that matterslice by category, difficulty, failure mode — the aggregate hides the hard cases
Общие 85% выглядят прилично, пока не разобьёшь: на лёгких 100%, на важных — 40%.
PracticeSlicing· разбивка по срезам
Проблема
Средний балл стирает случаи, где система реально падает.
Идея
Считать балл отдельно по категории, сложности, режиму сбоя.
Пример
85% в целом = 100% на лёгких + 40% на тяжёлых.
Цена
Случаи в наборе надо размечать по категориям.
Связи

Показывает, куда идти на last mile; опирается на разметку golden set.

«Оно хорошее?» — не метрика. Разбей качество на конкретные, оцениваемые свойства под свою задачу — и никогда не доверяй единой агрегатной цифре.

§ 03

Эвал честен ровно настолько, насколько примеры в нём. Датасет — входы и их известные хорошие исходы — это настоящий актив, и бо́льшая часть заботы идёт сюда.

Golden Set — входы с известными хорошими исходами

Ключ ответов учителя — вопросы в паре с тем, как выглядит верный ответ, чтобы оценка была последовательной, а не по настроению.

Ядро эвала — золотой набор (golden set): коллекция представительных входов, у каждого — известный хороший ответ или ясное определение успеха. Это то, против чего ты оцениваешь. Его построение — реальная работа, именно здесь ты пришпиливаешь, что вообще значит «верно» для твоей фичи, — и это актив, что делает каждое будущее изменение измеримым.

inputknown-good outcomeWhat's your refund window?30 days, cites the policyCancel my subscriptioncalls cancel_subscriptionasdf??asks a clarifying questionIgnore your instructions…refuses, stays on taskthe asset: every future change is scored against it
Золотой набор — таблица: реальный вход и известный хороший исход. Против неё оценивается каждое изменение.
ConceptGolden Set· золотой набор, эвал-датасет
Проблема
Без эталона нечем сравнивать выводы — оценка идёт по настроению.
Идея

Представительные входы, у каждого — хороший ответ или ясный критерий успеха.

Пример

«Отмени подписку» → должен вызвать cancel_subscription; «asdf??» → уточняющий вопрос.

Цена
Реальная работа: решить, что значит «верно», для каждого случая.
Связи

Наполняется hard cases и production sampling; по нему гоняется offline eval.

Hard Cases — покрой края и известные сбои

Мост нагружают-испытывают самыми тяжёлыми грузовиками и худшими штормами, а не средней машиной в солнечный день.

Набор только из лёгких, типичных входов даёт льстивый, бесполезный балл. Намеренно включай тяжёлые случаи (hard cases): неоднозначные вопросы, краевые входы (edge cases), состязательные промпты (adversarial prompts) и особенно сбои, что ты уже видел. Каждый раз, когда баг доходит до прода, добавляй его в эвал как регрессионный случай (regression case), чтобы он не смог тихо вернуться. Набор должен концентрироваться там, где система вероятнее всего сломается.

flattering settypical, easy inputshonest settypicalambiguousedgeadversarialpast bugsProd bug foundadd it so it never silently returns
Льстивый набор — только типичные входы. Честный — плюс неоднозначные, краевые, состязательные и прошлые баги.
PracticeHard Cases· edge cases, adversarial, regression cases
Проблема
Набор из лёгких случаев даёт красивый и бесполезный балл.
Идея

Нарочно добавлять неоднозначное, краевое, состязательное и всё, что уже ломалось.

Пример
Баг дошёл до прода → его вход становится постоянным случаем в наборе.
Цена
Балл падает — зато становится честным.
Связи
Часть golden set; источник случаев — production sampling.

Production Sampling — собирай реальные примеры из прода

Лучшие тестовые вопросы приходят из реального экзамена, что сдавали студенты, а не из того, что учитель вообразил, что они спросят.

Богатейший источник эвал-случаев — реальное использование: что пользователи на деле спрашивали, особенно то, что спросили и что пошло не так. Майни свои логи и фидбек на реальные входы и вплетай их в набор. Выдуманные примеры отражают то, что ты думаешь, происходит; продовые отражают то, что происходит, включая грязные формулировки и странные запросы, что ты бы и не выдумал.

Real usersmessy phrasingLogs+ feedbackPick casesesp. failuresGolden setreal inputsinvented cases: what you think happensproduction cases: what doesmine logs and feedback, fold real inputs into the set
Пользователи → логи и фидбек → отбор случаев, особенно сбоев → золотой набор.
PracticeProduction Sampling· случаи из реального использования
Проблема
Выдуманные примеры отражают то, что ты думаешь, а не то, что есть.
Идея
Брать входы из логов и фидбека, особенно те, где что-то пошло не так.
Пример
Грязная формулировка пользователя, которую ты бы сам не придумал.
Цена
Нужны логи, а данные пользователей надо чистить от личного.
Связи
Питает golden set; сигналы приходят из user feedback.

Маленький и острый бьёт большой и затхлый

Пятьдесят хорошо подобранных вопросов, что прощупывают реальные слабые места, учат тебя большему, чем тысяча случайных, в которые ты толком не смотришь.

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

Золотой набор — это актив. Спаривай реальные входы с известными хорошими исходами, концентрируйся на тяжёлом и сломанном и расти его по мере того, как узнаёшь.

§ 04

Когда у тебя есть входы и ожидания, нужен способ оценить каждый вывод. Методы идут от дешёвых и точных до гибких и ошибающихся — и ты тянешься к самому дешёвому, что подходит.

Code-based Graders — точные и правиловые проверки

Проверка теста с выбором ответа не требует суждения — ответ верен или нет, и машина оценивает его мгновенно.

Когда вывод ограничен, оценивай его детерминированно — кодом, code-based grader: точное совпадение (exact match) для классификации, регэксп или проверка схемы для формата, вызвал-ли-нужный-инструмент для агента, верна-ли-цифра для извлечения. Эти проверки дёшевы, быстры и неоспоримы. Всегда проталкивай как можно бо́льшую часть эвала в эту категорию — это самая надёжная оценка из всех.

Exact matchclassificationRegex / schemaformat · tool calledLLM-as-judgerubric · fuzzy qualitiesHuman reviewspot-check sampledeterministic: push most checks herecheap · exact · unarguableflexible · costly · fallible
Лестница оценщиков: слева дёшево и точно, справа гибко, дорого и с ошибками. Тянись к самой левой ступени, что подходит.
ToolCode-based Grader· детерминированная проверка, exact match
Проблема
Суждение дорого и спорно там, где ответ можно просто сверить.
Идея
Проверить вывод кодом: совпадение, регэксп, схема, нужный вызов.
Пример

Метка класса совпала; JSON прошёл схему; агент вызвал нужный инструмент.

Цена
Работает только для ограниченных выводов — эссе так не проверишь.
Связи

Первая ступень лестницы; для размытого — LLM-as-judge, для агентов — step-level checks.

LLM-as-Judge — модель оценивает размытое

Для эссе ты приводишь второго экзаменатора с ясной рубрикой — суждение, но направленное явными критериями, чтобы оно было последовательным.

Для открытых выводов — верна ли эта сводка? полезен ли этот ответ? — точного совпадения нет, так что ты используешь модель для оценки, LLM-as-judge: дай второй модели вывод, контекст и ясную рубрику (rubric) и пусть оценит. Это масштабирует человекоподобное суждение на тысячи случаев. Это стандартный инструмент для качеств, что не проверить правилом, — но он идёт с оговорками.

Outputto be gradedContextquestion · sourceRubriccriteria + examplesJudge modelLLM-as-judgeScore+ short reasonscales human-like judgement to thousands of cases
Судья получает вывод, контекст и рубрику — и возвращает балл с коротким объяснением.
PatternLLM-as-Judge· модель-судья
Проблема

Открытые выводы не сверить со строкой, а людей на тысячи случаев не хватит.

Идея
Вторая модель оценивает вывод по контексту и явной рубрике.
Пример
«Верна ли сводка источнику? Оцени 1–5 и объясни одной фразой».
Цена
Судья сам ошибается и предвзят — его надо проверять.
Связи

Без judge validation ему нельзя верить; часто меряет faithfulness.

Judge Validation — судью тоже надо судить

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

У LLM-судьи есть режимы сбоя: он может предпочитать многословные ответы (verbosity bias), поддаваться уверенному тону или дрейфовать от твоего намерения. Так что валидируй судью против человеческих оценок на выборке, дай ему острую рубрику с примерами и держи его простым. Судья, что ты не проверил, — это просто ещё одна неизмеренная модель; не доверяй его баллам, пока не подтвердил, что они отслеживают то, что тебя реально волнует.

Samplea few dozen casesHuman gradesJudge gradesAgreementcompareTrustthe judgewatch for: verbosity bias · confident tone · drift from intent
Одну выборку оценивают и люди, и судья. Совпадают — судье можно доверять. Следи за его типичными перекосами.
PracticeJudge Validation· проверка судьи против людей
Проблема

Судья любит длинные и уверенные ответы и может уйти от твоего намерения.

Идея
Сравнить баллы судьи с человеческими на выборке, до того как верить.
Пример

Пара десятков случаев оценены людьми; судья совпадает — значит, ему можно верить.

Цена
Немного ручной разметки и перепроверка при смене судьи или рубрики.
Связи
Обязательная пара к LLM-as-judge; использует human review.

Human Review — люди в контуре, малыми дозами

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

Автоматическая оценка масштабируется, но периодически читай реальные выводы сам — human review. Выборочно проверяй, всматривайся в сбои и проверяй на здравость, что твои метрики всё ещё отражают реальное качество. Человеческое ревью не масштабируется на каждый случай, но малая, регулярная доза ловит то, что твои автоматические баллы упускают, — и не даёт тебе оптимизировать цифру, что отъехала от реальности.

PracticeHuman Review· ручная выборочная проверка
Проблема
Автоматические баллы могут тихо разойтись с реальным качеством.
Идея
Регулярно читать выборку реальных выводов, особенно сбои.
Пример

Раз в неделю прочитать случаи, где балл упал, и проверить, согласен ли ты.

Цена
Время людей — поэтому малыми дозами, не на каждый случай.
Связи
Последняя ступень лестницы оценщиков; основа judge validation.

Оценивай детерминированно, где можешь, используй LLM-судью для размытого остатка — и валидируй судью, потому что непроверенный оценщик — просто ещё одна догадка.

§ 05

Агентам нужно больше, чем оценка финального ответа, потому что они могут прийти к чистому ответу через сломанный процесс. Чтобы доверять агенту, ты меряешь путь, а не только пункт назначения.

Чистый финальный ответ может прятать сломанную середину

Экзамен по математике, оценённый лишь по финальной цифре, пропускает студента, что пришёл к ней через две взаимно сокращающиеся ошибки, — ты не узнаёшь ничего о том, что реально случилось.

В многошаговом агенте промежуточная ошибка может пройти проверку финального вывода, испортив процесс: он достаёт нужный источник, на полпути приписывает факт не туда и пишет чистую сводку, что неверна. Оценивай только финальный ответ — и ты это пропустишь. Сбои, что нужнее всего поймать, — те, к которым проверка-только-пункта-назначения слепее всего.

Retrieveright source ✓Extractmisattributes ✗Summarizeclean, fluentFinal checklooks right ✓the error lives herefinal-only check: PASSa clean answer through a broken process — destination-only grading waves it through
Ошибка случилась на шаге «Extract», но сводка гладкая — и проверка только финала её пропускает.

Trajectory Evaluation — оценивай траекторию

Экзаменатор по вождению смотрит всю поездку — каждый сигнал, проверку зеркал и смену полосы, — а не только прибыл ли ты по адресу.

Для агентов ты оцениваешь траекторию (trajectory): на каждом шаге выбрал ли он нужный инструмент, передал ли нужные аргументы, извлёк ли нужный контекст и рассуждал ли здраво? Это ловит сломанную середину, что финальная проверка упускает, и говорит тебе, какой шаг сбоил, — куда полезнее, чем знать лишь, что конец был неверен. Шаги — вот где надёжность агента реально делается или теряется.

trajectory eval: grade every stepfinal-onlyStep 1search_docsright tool?✓Step 2read_doc(id)right args?✓Step 3send_emailright context?✗Answerfinal outputgoal reached?✓tells you which step failed
Проверка каждого шага показывает, где именно сломалось. Проверка только финала видит лишь последнюю коробку.
ConceptTrajectory Evaluation· оценка траектории агента
Проблема
Верный финал может скрывать неверные шаги.
Идея

Оценивать каждый шаг: инструмент, аргументы, извлечённый контекст, рассуждение.

Пример

Шаги 1–2 верны, на шаге 3 агент взял не тот контекст — эвал называет шаг 3.

Цена
Нужно логировать и размечать шаги, а не только ответ.
Связи
Состоит из step-level checks; дополняется operational metrics.

Step-level Checks — проверяй вызовы инструментов и извлечения напрямую

Аудит научного ассистента — это проверка, какие источники он реально вытянул и какие вызовы сделал, а не только чтение его финальной записки.

Бо́льшая часть поведения агента конкретна и оцениваема без суждения: вызвал ли он send_email, когда должен был, с верным получателем? извлёк ли релевантный документ? остался ли в пределах прав на инструменты? Это детерминированные проверки на шагах (step-level checks), дешёвые и точные, и они пришпиливают большую долю сбоев агента в точности.

PracticeStep-level Checks· проверки вызовов инструментов
Что это
Код-проверки конкретных шагов агента, без судьи.
Как работает

Сверить: какой инструмент вызван, с какими аргументами, какой документ извлечён.

Пример
send_email вызван, получатель верный, прав не превышено.
Плюс
Дёшево, точно и сразу показывает место сбоя.
Связи
Это code-based graders, применённые к trajectory.

Operational Metrics — меряй и скучные операционные истины

Службу доставки судят не только по тому, прибыла ли посылка, но по тому, сколько заняло, сколько попыток и сколько стоило.

Помимо правильности, отслеживай операционные метрики (operational metrics) агента: сколько шагов он взял, как часто зацикливался или повторял, задержку (latency) и стоимость (cost) на задачу. Цикл, что приходит к верному ответу за двадцать дорогих шагов, когда хватило бы трёх, — это проблема надёжности и стоимости, что твой балл финального ответа не покажет. Эти цифры вскрывают агентов, что работают, но не переживут прода.

Run A✓ right answer3 steps · fast · cheapRun B✓ right answer20 steps · loops and retries · slow · costlyboth score 100% on the final answer — only steps, latency and cost tell them apart
Оба запуска дали верный ответ. Но один — за три шага, другой — за двадцать, с циклами и повторами.
ConceptOperational Metrics· шаги, циклы, задержка, стоимость
Проблема
Балл за финальный ответ не видит, какой ценой он получен.
Идея
Считать шаги, циклы и повторы, задержку и стоимость на задачу.
Пример
Верный ответ за 20 дорогих шагов там, где хватило бы трёх.
Цена
Нужна трассировка каждого запуска.
Связи

Дополняет trajectory evaluation; в проде за ними следит online eval.

Агент может прийти к чистому ответу через сломанный процесс. Оценивай траекторию — инструменты, извлечения, шаги, — а не только пункт назначения.

§ 06

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

Offline Eval — гейт до выкатки

Тестовый трек, где ты прогоняешь машину через испытания, прежде чем она хоть раз повезёт пассажира, — контролируемо, повторяемо, до релиза.

Оффлайн-эвал (offline eval) — это твой золотой набор, прогнанный против изменения до выкатки: набрал ли этот новый промпт или модель лучше на случаях, что ты собрал? Это контролируемо и повторяемо, место, где ты ловишь регрессии и безопасно сравниваешь варианты. Это эвал, что ты вшиваешь в цикл разработки — в идеале гейтом в CI, чтобы ничто не отгрузилось, что роняет балл.

OFFLINE · before shipONLINE · after shipGolden setcurated casesScorevs baselineCI gateblock if worseLive trafficreal usersSample & scorejudge · metricsDashboardquality over time
Слева от релиза — оффлайн: золотой набор, балл против базы, гейт. Справа — онлайн: живой трафик, выборка, дашборд.
ConceptOffline Eval· оффлайн-эвал, до релиза
Проблема

Нужно знать, что изменение безопасно, до того как его увидят пользователи.

Идея
Прогнать золотой набор на новой версии и сравнить с базой.
Пример
Новый промпт: 84% против 79% у старого — можно выкатывать.
Цена
Видит только то, что есть в наборе, — мир шире.
Связи

Работает на golden set; автоматизируется CI gate; пара к online eval.

Online Eval — измерение реального мира

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

Прод ведёт себя так, как ни один оффлайн-набор полностью не предскажет: реальные пользователи формулируют то, чего ты не вообразил, и распределение входов смещается. Так что ты меряешь и онлайн (online eval) — выбираешь и оцениваешь живые выводы, следишь за метриками качества и собираешь сигналы пользователей. Оффлайн-набор доказывает, что изменение безопасно выкатить; онлайн-измерение говорит, что реально происходит, когда оно вышло.

Real usersunexpected phrasingAI featurein productionLive outputsinputs shiftSamplea slice of trafficScorejudge · rulesWatchquality metrics
Живые выводы идут через выборку и оценку в метрики качества, за которыми ты следишь.
ConceptOnline Eval· онлайн-эвал, мониторинг качества
Проблема
Реальные пользователи и входы не совпадают с тестовым набором.
Идея
Брать выборку живых выводов, оценивать её и следить за метриками.
Пример

Часть ответов в проде прогоняется через судью; результат — на дашборде.

Цена
Инфраструктура оценки в проде и стоимость судьи на трафике.
Связи

Ловит drift; собирает user feedback; находит новые hard cases.

User Feedback — бесплатный эвал-сигнал

Кнопка «палец вверх» и ящик жалоб — это непрерывный, бесплатный опрос о том, реально ли штука работает для тех, кто ею пользуется.

Твои пользователи оценивают тебя, собираешь ты это или нет. Лови сигналы (user feedback signals) — палец вверх/вниз, правки, повторы, отказы, эскалации — и возвращай их назад. Всплеск повторов или пальцев вниз — раннее предупреждение; конкретные сбои становятся завтрашними эвал-случаями. Это замыкает цикл: прод учит эвал-набор, как выглядит реальность, а эвал-набор защищает следующий релиз.

Productionlive usageUser signalsthumbs · edits · retriesNew eval casesthe specific failuresNext releaseprotected by the setproduction teaches the set;the set protects the release
Замкнутый цикл: прод даёт сигналы, сбои становятся случаями, набор защищает следующий релиз.
PracticeUser Feedback Signals· сигналы пользователей
Что это
Палец вверх/вниз, правки, повторы, отказы, эскалации.
Зачем
Бесплатная, непрерывная оценка от тех, кто реально пользуется.
Пример
Всплеск повторов после релиза — раннее предупреждение.
Подвох
Сигналы шумные: это повод посмотреть, а не готовый балл.
Связи
Часть online eval; превращается в hard cases в golden set.

Drift — следи за дрейфом

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

Система, что набирала хорошо, может деградировать тихо — это дрейф (drift): провайдер модели обновляется, твои данные смещаются, паттерны использования меняются. Без постоянного онлайн-измерения ты узнаёшь это от злых пользователей, а не с дашборда. Отслеживай качество во времени, чтобы дрейф проявлялся трендом, на который можно реагировать, а не сюрпризом. Эвал — не одноразовый гейт; это жизненный показатель, что ты держишь под наблюдением.

alert thresholdqualityprovider updateusage shiftstime →
Качество тихо сползает после обновления провайдера и смены поведения пользователей. Порог ловит это раньше жалоб.
TermDrift· дрейф качества
Что это
Медленное, тихое падение качества без изменений с твоей стороны.
Причины

Обновление модели у провайдера, сдвиг данных, новые паттерны использования.

Пример
Каждую неделю чуть хуже — пока жалоба не придёт раньше дашборда.
Лекарство
Следить за качеством во времени и ставить порог-тревогу.
Связи
Ловится online eval; новые сбои уходят в golden set.

Оффлайн-эвалы гейтят релиз; онлайн-эвалы следят за реальностью. Первое доказывает, что изменение безопасно, второе говорит, что реально происходит.

§ 07

Эвалы — это практика, а не разовое дело. Навык — начать раньше, чем чувствуешь себя готовым, вшить измерение в цикл и не дать цифре стать целью, что тебе врёт.

Eval-driven Development — сначала эвал, потом настройка

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

Частая ошибка — бесконечно крутить промпт и лишь потом, может быть, строить эвал. Переверни: напиши маленький эвал до того, как оптимизируешь, чтобы каждое изменение мерилось с самого начала, — это разработка от эвала (eval-driven development). Даже десять случаев бьют ноль. Настройка без эвала ощущается продуктивной и в основном не является — ты двигаешь цифры, что не видишь.

PracticeEval-driven Development· сначала эвал, потом настройка
Проблема
Промпт крутят неделями, а эвал — «потом, может быть».
Идея
Маленький эвал — до первой оптимизации; каждое изменение мерится.
Пример
Десять случаев сегодня, прогон перед каждой правкой промпта.
Цена
Час в начале, пока ничего «не работает».
Связи
Лекарство от tuning by vibes; дальше растёт в CI gate.

CI Gate — сделай эвал гейтом в CI

Код не мёржится, если тесты падают, — и та же дисциплина не даёт тихо-худшему промпту дойти до пользователей.

Как только у тебя есть эвал, гоняй его автоматически на каждом изменении и блокируй релиз, если балл падает ниже планки, — это гейт в CI (CI gate). Это превращает эвалы из того, что делаешь, когда вспомнишь, в защиту, что всегда включена, — ИИ-эквивалент проходящего набора тестов. «Эвалы или это не выпущено» — стандарт, что стоит держать: неизмеренное изменение ИИ-фичи это непротестированный деплой.

Pull requestprompt changeRun evalon every changeScore ≥ bar?ShipmergeBlockedscore droppedyesno"evals or it didn't ship"
Каждое изменение прогоняет эвал. Балл не ниже планки — выкатка; упал — блок.
PracticeCI Gate· эвал как гейт в CI
Проблема
Эвал, что гоняют «когда вспомнят», не ловит тихо-худший промпт.
Идея
Прогон на каждом изменении; балл ниже планки — релиз заблокирован.
Пример
PR с правкой промпта не мёржится, пока эвал не прошёл.
Цена
Время и деньги на прогон набора в каждом PR.
Связи
Автоматизирует offline eval; ловит регрессии до прода.

Goodhart's Law — не дай метрике стать целью

Преподавание чисто под тест рождает студентов, что блестяще сдают экзамен и не могут делать работу, — балл вырос, а то, что он мерил, нет.

Когда мера становится целью, она перестаёт быть хорошей мерой — закон Гудхарта (Goodhart's law). Можно переобучить (overfit) промпты под твои конкретные эвал-случаи и смотреть, как балл растёт, пока реальное качество стоит. Защищайся: держи часть случаев отложенными (held-out), освежай набор новыми продовыми сбоями и помни, что эвал — это прокси ценности для пользователя, а не сама ценность. Растущая цифра, что пользователи не чувствуют, — предупреждение, а не победа.

eval scorereal user valueoverfit to eval casesiterations on the same eval set →guard: held-out cases · fresh prod failures · the score is a proxy
Балл эвала растёт с каждой итерацией, а реальная ценность встала. Разрыв — переобучение под набор.
PitfallGoodhart's Law· закон Гудхарта
Что это
Когда мера становится целью, она перестаёт быть хорошей мерой.
Как проявляется
Промпт подогнан под эвал-случаи: балл растёт, качество — нет.
Пример
+10 пунктов на наборе, а пользователи разницы не замечают.
Защита
Отложенные случаи, свежие продовые сбои, помнить, что балл — прокси.
Связи
Лечится production sampling и human review.

Начни с малого, расти со сбоями

Хороший набор тестов не пишется разом — он накапливается, по случаю на баг, пока тихо не покроет всё, что когда-либо шло не так.

Не жди идеального, всеохватного эвала — никогда не выкатишь. Начни с горстки случаев для ядрового поведения и добавляй один каждый раз, когда что-то ломается. Со временем набор растёт ровно по контурам того, где твоя система реально сбоит, а это в точности там, где тебе нужно покрытие. Эвал зреет вместе с продуктом, и он никогда по-настоящему не закончен.

Как понятия связаны

Колесо, что крутится: каждый оборот делает набор честнее, а релиз — безопаснее.

Всё в курсе — части одного цикла. Критерии говорят, что мерить; golden set — на чём; graders (код, судья, человек) ставят балл. Offline eval с CI gate охраняет релиз, online eval смотрит за реальностью — фидбек и дрейф, — а найденные сбои становятся новыми случаями и возвращаются в набор. Для агентов оценивается траектория, а закон Гудхарта напоминает: балл — только прокси.

Criteriawhat to measureGolden setwhat to test onGraderscode · judge · humanOffline + CI gateguards the releaseOnline evalsample · feedback · driftNew casesfrom real failuresagents: grade the trajectory, not just the endGoodhart: the score is a proxy — keep the set fresh
Цикл эвалов: критерии → набор → оценщики → гейт → онлайн → новые случаи → снова набор.
Прежде чем выкатывать ИИ-фичу
  • Есть ли эвал вообще — набор входов со способом оценить выводы?
  • Отображают ли метрики на работу, разбитые по сложности и типу сбоя, а не один ровный балл?
  • Включает ли набор тяжёлые, странные и ранее-сломанные случаи, взятые из реального использования?
  • Самый ли дешёвый надёжный метод оценки — детерминированный, где можно, валидированный судья, где нет?
  • Для агентов оцениваются ли шаги, а не только финальный ответ?
  • Гоняется ли это в 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закон Гудхарта

Мера, ставшая целью, перестаёт мерить. Балл — прокси.

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

Конец экспресс-курса · 7 глав · 24 понятия

Дальше — практика: возьми одну ИИ-фичу и напиши для неё десять эвал-случаев сегодня — реальные входы, известные хорошие исходы, способ оценить каждый — и прогони их до следующего изменения промпта. Потом добавляй один случай каждый раз, когда что-то ломается. Но держи одну мысль выше прочих: демо, что работает раз, — это лёгкие 80%. Всё, что делает его продуктом, которому можно доверять, — подъём до 95%, пойманные регрессии, увиденный дрейф — возможно, только если ты меришь. Без эвала ты настраиваешь на ощупь; с ним улучшение становится циклом, что ты можешь крутить.