← AI evals engineering: testing systems that never repeat themselves
03 / 07 · 55 min

LLM-as-judge: when it works and when it lies

Direct scoring vs pairwise, position/verbosity/self-enhancement bias, calibrating the judge against human labels, and binary rubrics you can trust.

Lesson content is currently available in Russian.

What you will learn

  • →Выбирать между direct scoring и pairwise comparison под конкретную задачу.
  • →Распознавать и гасить position, verbosity и self-enhancement bias.
  • →Калибровать judge по человеческой разметке и доводить согласие до κ ≥ 0.6.

Что judge умеет, а что нет

Идея LLM-as-judge проста: одна модель оценивает выход другой по заданному критерию. Насколько этому можно верить — вопрос эмпирический, и на него есть измеренный ответ. В работе «Judging LLM-as-a-Judge with MT-Bench and Chatbot Arena» (Zheng et al., 2023) сильный judge (GPT-4) согласился с вердиктами людей более чем в 80% случаев — примерно столько же, сколько люди соглашаются друг с другом. То есть для субъективных свойств — тон, полнота, следование инструкции, полезность — правильно настроенный judge даёт оценку уровня среднего человеческого эксперта, но за секунды и центы.

Два режима работы. Direct scoring: judge получает один ответ и рубрику, выносит вердикт (pass/fail или балл). Подходит для CI-гейтов и мониторинга — оценка каждого ответа независима, датасет можно гонять инкрементально. Pairwise comparison: judge получает два ответа на один вопрос и выбирает лучший (или ничью). Стабильнее для сравнения моделей и промптов между собой, потому что относительное суждение «А лучше Б» проще абсолютного «А тянет на 7/10», но результат — рейтинг, а не порог для гейта.

Чего judge не умеет: надёжно проверять арифметику и вычисления (сам ошибается), свежие факты без предоставленного reference, корректность кода без запуска. Правило: judge оценивает только то, что видно из текста ответа и данного ему контекста. Всё исполняемое проверяйте исполнением, всё фактологическое — reference-ответом в промпте judge.

Каталог bias: как judge врёт

Judge — это модель со своими систематическими искажениями. Их надо знать поимённо:

  • Position bias. В pairwise-режиме judge предпочитает ответ на определённой позиции (чаще первый). В MT-Bench при перестановке ответов местами даже сильные модели меняли вердикт: только GPT-4 удержал консистентность около 65%, слабые судьи — заметно ниже. Митигация: каждую пару прогонять дважды с обменом позиций; расхождение вердиктов считать ничьёй.
  • Verbosity bias. Длинный ответ получает больше баллов независимо от содержания. В MT-Bench это проверяли «repetitive list»-атакой: ответ, раздутый повторами, обманывал часть судей. Митигация: явный пункт рубрики «многословие без новой информации — недостаток» и контроль длины как отдельная метрика вне judge.
  • Self-enhancement bias. Модель систематически завышает оценки ответам, сгенерированным ею же или моделью того же семейства. Митигация: judge из другого семейства, чем оцениваемая модель (оцениваете GPT — судите Claude, и наоборот).
  • Сползание шкалы. На шкале 1–10 судьи кластеризуют оценки вокруг 6–8, различающая способность падает. Митигация: бинарные вердикты с обязательным объяснением или маленькие шкалы с якорями (1 = есть выдуманный факт, 3 = всё подтверждено контекстом).

Общий приём против всех сразу: заставляйте judge сначала письменно разобрать ответ по критериям (chain-of-thought) и только затем выносить вердикт, а при наличии эталона — давайте reference-guided режим: сравнение с эталоном устойчивее свободной оценки.

Калибровка: judge — тоже модель, которую надо эвалить

Самая частая ошибка — принять вердикты judge на веру. Judge — это ещё одна LLM-система, и у неё должен быть собственный эвал: согласие с человеком. Процедура калибровки: возьмите 50–100 кейсов с человеческими бинарными метками из прошлого урока, прогоните judge и постройте confusion matrix против человека. Смотрите не только accuracy: важны TPR (какую долю настоящих fail judge ловит) и TNR (какую долю настоящих pass не бракует зря). Judge, пропускающий 40% реальных дефектов, бесполезен как гейт, даже если общая точность выглядит прилично. Сводная метрика — та же каппа Коэна: κ ≥ 0.8 — judge можно доверить гейт, 0.6–0.8 — рабочий уровень с выборочным человеческим контролем, ниже — рубрика требует переработки.

Что улучшать при низком согласии, по убыванию эффекта. Первое — бинаризация и конкретика рубрики: вместо «оцени качество ответа» — один проверяемый критерий на одну рубрику. Второе — few-shot примеры граничных случаев прямо в промпт judge: пары «этот ответ pass, потому что…» / «этот fail, потому что…» из ваших размеченных данных. Третье — chain-of-thought перед вердиктом. Четвёртое — reference-ответ, если он есть в датасете.

И два эксплуатационных правила: смена модели judge (или мажорное обновление провайдера) — повод перекалиброваться, потому что пороги строгости у моделей разные; и держите постоянный сэмпл человеческого контроля (5–10% вердиктов), чтобы заметить дрейф judge раньше, чем он испортит месяц метрик.

Рубрика и конфиг на практике

Рабочая рубрика — это один критерий, определение pass и fail и граничные примеры. Шаблон:

Критерий: ответ опирается только на предоставленную политику возврата.
PASS: каждое утверждение о сроках и условиях подтверждается текстом политики;
      при отсутствии информации ответ честно направляет в поддержку.
FAIL: любое условие, срок или исключение, которого нет в политике;
      обещание возврата вне описанных правил.
Сначала перечисли все фактические утверждения ответа и источник каждого,
затем вынеси вердикт PASS или FAIL.

В promptfoo это ассерт llm-rubric, а модель судьи задаётся отдельно от тестируемой — берите другое семейство:

defaultTest:
  options:
    provider: anthropic:claude-sonnet-4-20250514  # judge не из семейства тестируемой модели
tests:
  - vars:
      question: "Можно ли вернуть заказ через 40 дней?"
    assert:
      - type: llm-rubric
        value: "PASS только если ответ верно называет срок 30 дней и не выдумывает исключений; иначе FAIL."

Для RAG-систем не изобретайте рубрики с нуля: Ragas даёт декомпозицию на faithfulness (доля утверждений ответа, подтверждённых контекстом), answer relevancy и context precision/recall — это готовые reference-free метрики с внятной семантикой. Подход G-Eval (Liu et al., 2023) добавляет форму: judge получает критерий, сам разворачивает его в шаги проверки (auto-CoT) и заполняет структурированную форму — на бенчмарках суммаризации это дало лучшую корреляцию с человеком, чем прямые оценки. И считайте экономику: judge удваивает стоимость прогона, поэтому кэшируйте вердикты для неизменённых пар «ответ + рубрика».

Practice

Калибровка судьи до κ ≥ 0.6

Возьмите 40 кейсов с вашими ручными бинарными метками. Напишите бинарную рубрику по шаблону урока и прогоните judge (модель другого семейства, чем тестируемая). Постройте confusion matrix, посчитайте TPR, TNR и каппу против своих меток. Улучшайте рубрику (конкретика, few-shot граничные примеры, CoT) до κ ≥ 0.6. Затем проверьте position bias: 10 pairwise-сравнений в обоих порядках.

Deliverable

Рубрика до/после, таблица итераций калибровки (κ, TPR, TNR на каждом шаге) и результат swap-теста: доля пар, где judge сменил вердикт при перестановке позиций.

Checkpoint

Обоснуйте, почему вашему judge можно доверять гейт в CI: какие bias вы проверили и чем подтверждено согласие с человеком.

  • ✓ Названы position, verbosity и self-enhancement bias и конкретные митигации для каждого.
  • ✓ Показана калибровка: confusion matrix против человеческих меток, TPR/TNR и каппа с интерпретацией порогов.
  • ✓ Рубрика бинарная, с критерием, определениями pass/fail и граничными примерами; judge — другого семейства, чем тестируемая модель.

Check yourself

Что показало исследование MT-Bench о согласии GPT-4-судьи с людьми?

01Что показало исследование MT-Bench о согласии GPT-4-судьи с людьми?

Как гасят position bias в pairwise-сравнениях?

02Как гасят position bias в pairwise-сравнениях?

Почему judge для оценки ответов GPT-модели лучше брать из другого семейства?

03Почему judge для оценки ответов GPT-модели лучше брать из другого семейства?

Judge показал каппу 0.45 против человеческих меток. Что делать в первую очередь?

04Judge показал каппу 0.45 против человеческих меток. Что делать в первую очередь?

Что из перечисленного НЕ стоит доверять judge?

05Что из перечисленного НЕ стоит доверять judge?

Sources

LLM-as-judge: when it works and when it lies · AI evals engineering: testing systems that never repeat themselves · VORCL