Документация

Gating уверенности и эскалация к человеку

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

Три полосы, а не две

Реальные проекты редко сводят всё к «автоматически или нет». Три полосы — обычная форма:

Полоса Условие Действие
Авто Уверенность выше верхнего порога и дополнительные проверки пройдены Просто сделай
Эскалация Попадает в середину Передать человеку
Сброс Уверенность ниже нижнего порога Ничего не делать и не тратить внимание человека

Третью полосу легко упустить, и она самая дешёвая из трёх. «Не посмотрели» и «человек бросил взгляд» отличаются на одного человека.

Одна реализация триажа типична: пейджить только когда P(SEV1) + P(SEV2) ≥ 0.80; сбрасывать ниже 0.20 только когда проверка на действие тоже не согласна; среднюю полосу отправлять человеку.

Средняя полоса — вот где живут настоящие проблемы

Как только три полосы существуют, каждый трудный вопрос переезжает в среднюю:

Это ёмкость человека, а не свободная ёмкость. Чем шире полоса, тем больше эскалаций, тем больше разбирает человек. Доля эскалаций 9% звучит низко — пока базовая частота не тысячи в день.

Ей нужен fail-safe, иначе она тихо застревает. Как только вы передали решение человеку, ничего не происходит, пока человек не посмотрит. На дашборде это выглядит ровно как «всё в порядке». Ответ инструмента триажа резок: нет подтверждения в течение 15 минут — пейджить в любом случае. Лучше разбудить кого-то, чем дать P1 сидеть в очереди.

Само условие эскалации может отказать. Шлюз автономности внутри агента продолжает только когда Choice проходит 0.6 и Noul о безопасности автономности проходит 0.5, возвращая ход человеку в противном случае. Оба числа должны пройти — потому что «что мне делать» и «безопасно ли это» — разные вопросы, и одна уверенность не может честно ответить на оба.

Задание порога: сначала измеряйте

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

Публичный пример: при 0.7 как шлюзе низкой уверенности прогон по n=130 поймал 3 из 3 ошибок классификации при доле эскалаций 9%. Выборка мала. Её ценность не в 0.7 — а в том, что это и есть то, как такое число следует сообщать: размер выборки, доля эскалаций и что было поймано.

Задержка — недооценённый риск

Измеренные числа инструмента триажа заслуживают своей таблицы:

Метрика Значение
p50 418 мс
p95 1477 мс
Стоимость около $0.04 за тысячу
Самый медленный вызов на 151 мс ближе к собственному 2-секундному таймауту

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

Так что системы gating обычно отказывают не «суждением неверно», а таймаутом и уходом в откат. Тестируйте откат независимо от основного пути.

Два направления отката, оба верны

Когда что-то даёт ошибку, публичные реализации делятся на два лагеря, и оба правы:

  • fail-closed: судья разрешений отказывает при таймауте или ошибке. Шлюз безопасности должен работать именно так — fail-open шлюз безопасности это тихая дыра.
  • fail-open: хук остановки Claude Code разрешает при любой ошибке. Шлюз эффективности должен работать именно так — fail-closed шлюз эффективности парализует весь поток.

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

В одном предложении

В трёхполосном дизайне работа — в средней полосе: её ширина — это стоимость, её fail-safe — свойство надёжности. Проектируйте и то и другое явно, а не по умолчанию.