Модуль XII — качество, оценки и тестирование
Модуль XII отвечает на один вопрос — по-прежнему ли мой агент делает то, что нужно? — оценивая кандидатные выходы по версионированным эталонным наборам и выдавая результат как канонические межмодульные свидетельства. Это модуль слоя Intelligence: он измеряет, он не запускает субъекта и не воздействует на инфраструктуру. Эта страница — справочник по тому, что модуль оценок делает сегодня, и по его честным ограничениям.
Что он измеряет (и что никогда не запускает)
Заголовок раздела «Что он измеряет (и что никогда не запускает)»XII — слой измерения, а не слой исполнения. Кандидатный выход поступает к нему уже
произведённым — из тестовой песочницы (модуль XVII), из CI, встроенным в запрос или как
выборочный сигнал реальной сессии — и XII оценивает его по случаям набора. Единственная
модель, которую XII когда-либо вызывает, — это судья (для оценщика llm_judge); он
никогда сам не запускает агента-субъекта или модель. Производство выходов — задача
песочницы, а не XII.
Набор оценщиков подключаемый. Детерминированные, чистые встроенные оценщики покрывают
распространённые контракты — exact, contains, not_contains, regex, json_valid,
json_equal и numeric_range. Рядом с ними стоит оценщик llm_judge, который
вызывает модель через порт Judge для оценки по рубрике.
Наборы, прогоны и канонический артефакт
Заголовок раздела «Наборы, прогоны и канонический артефакт»Набор (suite) — это версионированный эталонный датасет: он содержит свои случаи,
оценщик по умолчанию, порог прохождения и порог регрессии. Случаи только добавляются и
неизменяемы в пределах версии — исправление случая создаёт новый suite_version, а не
правку на месте, так что датасет, породивший любой прошлый вердикт, всегда можно
восстановить.
Прогон (run) оценивает каждый случай набора, агрегирует score и pass_rate и
сохраняет три вещи: только-добавляемые свидетельства по каждому случаю, изменяемый агрегат
прогона и один основной EvalResult — канонический артефакт (Suite, SubjectKind,
SubjectID, Score, Passed, OccurredAt, Metrics), который compliance (XIII) и UI
читают не зная собственных таблиц XII. Прогоны выполняются синхронно; SSE-поток по
прогону воспроизводит сохранённый прогон (кадры по случаям, затем сводка), он не
воздействует. Регрессия относительно базовой линии устанавливает regressed и пишет
основной Finding (Kind = eval_regression), по возможности эмитируемый в шину как
finding.reported, чтобы модули доставки (здоровье/уведомления)
его маршрутизировали. На стороне чтения scorecards агрегируют долю прохождения,
средний балл и тренд по субъекту и экспортируются в CSV/JSON.
Минимум данных по построению
Заголовок раздела «Минимум данных по построению»Кандидатный выход никогда не сохраняется — из любого источника. Результат по случаю
хранит лишь односторонний хеш деталей и усечённую, очищенную метку для UI; маскирование
выполняется обработчиком до сохранения, никогда не предполагается со стороны хранилища.
Монитор оценивает поведенческие сигналы реальной сессии — её состояние, число
находок, максимальную серьёзность и показатели токенов/стоимости (взятые из основных
сигналов Session, Finding и CostRecord) — и никогда сырой текст выхода, который
платформа вообще не сохраняет. Эталонные фикстуры — единственное ограниченное исключение:
санкционированный оператором, добровольный, непроизводственный контент, усечённый
обработчиком до записи, чтобы набор действительно можно было прогнать.
Калибровка судьи, смягчение смещения и регрессионный гейт CI
Заголовок раздела «Калибровка судьи, смягчение смещения и регрессионный гейт CI»Вердиктам судьи доверяют только после измерения. Размеченный человеком калибровочный
набор (построенный в управляемой сессии olivares evals label) питает калибровочный
прогон, который измеряет судью относительно человеческого эталона: процент согласия с
его 95%-м интервалом Уилсона, каппа Коэна (одного согласия недостаточно при дисбалансе
классов), чувствительность/специфичность с их знаменателями и корреляцию смещения по
многословию. Отчёт — только-добавляемое свидетельство; цель — согласие ≥ 0,85 и
определённая каппа ≥ 0,6 — может быть повышена по прогону, но никогда не понижена. Набор,
человеческие метки которого все «pass», не может измерить скорректированное на случайность
согласие и ничего не сертифицирует.
Смягчение смещения встроено и измеряется: промпт судьи заставляет рассуждать до
вердикта (анализ отбрасывается на лету — минимум данных) и предписывает не вознаграждать
длину; добровольный попарный режим A/B-сравнения судит каждый общий случай дважды с
переставленным порядком предъявления, объявляет победителя только когда оба порядка
согласны и сообщает измеренную долю position_consistency.
Регрессионный гейт (POST /gate, CLI evals gate) превращает всё это в блокирующий
вердикт CI: регрессия относительно базовой линии, доля прохождения ниже порога набора или
некалиброванный судья проваливают гейт (выход 1); отсутствующая учётная запись судьи
деградирует до объявленного предупреждения, никогда не молчаливого прохождения. Стоимость
судьи в CI контролируется детерминированной выборкой случаев по сидам, кешем вердиктов с
ключом по содержимому + пину модели судьи + версии промпта и предполётной проверкой бюджета
FinOps, которая отказывается тратить сверх лимита. Единственный выход из проваленного гейта
— управляемое переопределение (admin-уровень, письменная причина, аудируемое), которое
меняет эффективный вердикт, перепроверяемый CI, но не записанный. Каждая сообщённая доля
поставляется со своим знаменателем и 95%-м интервалом; полную методологию и источники см. в
docs/EVAL-METHODOLOGY.md в репозитории.
Связанное
Заголовок раздела «Связанное»- Каталог модулей — где находится XII и разделение Govern/Actuate.
- Справочник шины событий — событие
finding.reported, которое эмитирует регрессия. - Обзор архитектуры — слой Intelligence.
- Управление и одобрение — действие по находке регрессии.
- Честность и ограничения — швы с отказом по умолчанию по всему продукту.