Перейти к содержимому

Модуль XVII — песочница для симуляции и тестирования агентов

Модуль XVII — это песочница для тестирования: она прогоняет сценарий агента в изолированной эфемерной среде, детерминированно воспроизводит историческую сессию и сравнивает два варианта перед деплоем. Это собрат модуля XII (evals) — XVII выполняет в изоляции и производит выводы, XII измеряет их качество — и эти двое развязаны: ни один не импортирует другого. Эта страница — справочник по тому, что песочница делает сегодня, и по её честным ограничениям.

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

  • Симуляция сценария — выполнить шаги сценария против его моков, производя пошаговые выводы (опционально оценённые против набора evals).
  • Воспроизведение (Replay) — реконструировать временную шкалу входов исторической сессии и заново прогнать её детерминированно против моков, так что тот же вход даёт тот же выход.
  • Сравнение до/после деплоя — прогнать тот же сценарий против базового и кандидатного варианта, оценить оба и записать вердикт (improved / regressed / unchanged / inconclusive) с дельтой.

Модуль владеет четырьмя сущностями: изменяемым scenario, изменяемым run (running → терминальный), пошаговым output в режиме только добавление и сравнением до/после деплоя comparison в режиме только добавление. Каждый прогон записывает, какой раннер его выполнил, был ли этот раннер isolated, было ли эфемерное состояние destroyed, пошаговые счётчики и — если был подключён скорер — набор, оценку и вердикт прохождения.

Изоляция — это свойство протокольного контракта, аттестованное на каждый прогон, а не заявление. Стандартный внутрипроцессный раннер изолирован по построению: он получает только спецификацию шагов-и-моков и не держит хендла ни к хранилищу, ни к сети, ни к какому секрету; шаг, запрашивающий ресурс, отсутствующий в моках, выдаёт детерминированный маркер промаха мока и никогда не достигает реального ресурса; состояние живёт в вызове и отбрасывается при возврате, поэтому прогон записывает destroyed. При обеспечении оператором за тем же интерфейсом стоит рантайм уровня ОС — эфемерный, упрочнённый инстанс с контролируемым egress, чей бэкенд (gVisor или микроВМ Firecracker) выбирается политикой и проходит гейт предполётной проверки. Каждый прогон записывает реальный бэкенд и его флаг isolated, так что деградировавший или переносимый бэкенд виден и аудируем, а не скрыт.

Песочница не излучает на шину событий; она производит сохранённые доказательства, которые другие модули читают без связывания с ней. Её выводы оцениваются модулем XII через адаптер, подключённый только в корне композиции — два собрата делят тонкий контракт порта, а не импорт. Её сравнение до/после деплоя — это доказательство для решения, которое модуль деплоя читает, чтобы гейтить продвижение, и оно питает базис регрессии, отслеживаемый XII. Запуск прогона, воспроизведения или сравнения — это привилегированное, тенантно-ограниченное, аудируемое действие (editor и выше для запуска; сравнение деплоя — это административное решение).