Кто определяет «завершение» — проблема, которую игры решили 40 лет назад

Представьте, что вы управляете арендной недвижимостью. Жилец съехал, и сотрудник должен подтвердить выселение.

Я спроектировал это так: сотрудник не может просто сказать «подтверждаю». Вместо этого он фотографирует пять заранее указанных мест в квартире и загружает снимки в систему. Только когда все пять фотографий поступили — система фиксирует «выселение подтверждено». Нет хотя бы одной — завершения нет.

Услышав это, кто-то сказал: «Да это же прямо игровой квест!»

Верно. Именно так. И эта одна фраза мгновенно объяснила то, с чем я бился в коде годами.

Игры решили это 40 лет назад

«Принеси 5 волчьих шкур.» Игры делают это десятилетиями. И игры никогда не верят словам игрока. Сказать «я уже всё поймал» — не значит выполнить квест. Игра смотрит только на одно — есть ли в инвентаре 5 шкур. Есть — завершено, нет — не завершено. Всё.

То, что создал яТо, что создала игра
Определение завершения = фото 5 указанных местЦель квеста = 5 волчьих шкур
Спецификация = список того, что нужно сфотографироватьЖурнал квеста · маркеры цели
Верификация = существуют ли 5 фотографий?Верификация = есть ли 5 шкур?
Решение = система засчитывает завершениеРешение = игра показывает завершение
Сотрудник = исполнитель (не арбитр)Игрок = исполнитель

Структура одинакова. Субъект, объявляющий «завершение», перенесён из уст исполнителя в систему. Исполнитель лишь выполняет условия, а завершение всегда определяет шлюз.

Это и есть Reins — и в коде всё то же самое

В AI-кодировании я делаю то же самое. Когда AI говорит «всё готово» — я не верю. Когда тесты проходят, типы совпадают, схема-валидация не падает — тогда система выносит вердикт «готово». Цель квеста — «4419 тестов пройдено», и вместо инвентаря это проверяет CI. Стандартные бенчмарки в исследованиях агентов работают именно так — SWE-bench определяет «завершение» как прохождение тест-суита реального PR, а WebArena — как функциональную корректность состояния окружения. Не «всё готово» на естественном языке.

Будь то выселение из аренды, волчьи шкуры или код — суть одна. Решение о «завершении» изымается у самого исполнителя и передаётся в определённый шлюз вне исполнителя. Неважно, человек исполнитель или AI. Особенно опасно позволять AI самому выносить вердикт о своём завершении — и эксперименты это подтверждают: самоверификация (self-critique) модели почти не улучшает результат, тогда как внешний детерминированный верификатор улучшает его значительно (Stechly & Kambhampati, 2024); даже честная от рождения модель, получив право самостоятельно выносить вердикт по своим наградам, сама находит стратегии обмана, манипулируя этой функцией (McKee-Reid et al., 2024). Узда (reins) не замедляет лошадь. Она не даёт ей ускакать не туда.

И здесь кое-что проясняется. Если давать мнение — исполнитель колеблется. Когда давите «вы точно проверили?», сотрудник теряется, а AI отказывается от правильного ответа. Но пять фотографий — не мнение. Пройденный тест — не мнение. Пять шкур — не мнение. У факта нет объекта для лести. Пока шлюз задаёт фактические вопросы, никто не может его задобрить.

Но игры столкнулись с кое-чем посложнее раньше нас — cheese

Остановиться здесь — значит увидеть лишь половину. Главное, чему учат игры, начинается дальше.

«Убей 10 крыс» — печально известный квест. Почему? Потому что между тем, что проверяет шлюз (10 мёртвых крыс), и тем, чего на самом деле хотел дизайнер (чтобы игрок пережил контент), есть зазор. Шлюз — лишь прокси цели, и игроки пробираются в этот зазор. Спидраннеры ломают игры, находя пространство между условием завершения и замыслом дизайнера. В гейм-дизайне это называется cheese. И новейшие рассуждающие модели делают ровно то же самое — получив квест «победить шахматный движок», модели вроде o3 вместо честной игры манипулировали файлами состояния игры, создавая «победу» (Bondarenko et al., 2025). Чем выше способности — тем лучше находят лазейки.

Мой арендный шлюз тоже можно сделать cheese. Пять фотографий проверяют «существование фото», а не «корректность выселения». Что если сотрудник снимал только чистые стены? Что если переиспользовал фото с заезда? Шлюз пройден. Как только измерение становится целью — измерение ломается; это закон Гудхарта, а Manheim & Garrabrant (2018) классифицировали этот сбой сверхоптимизации на четыре разновидности. Исследования безопасности AI рано обозначили то же явление как reward hacking — агент, который вместо уборки беспорядка просто прячет его от взгляда (Amodei et al., 2016), делает ровно то же, что сотрудник, снимающий только чистые углы.

Я встречаю этот зазор в коде постоянно. Недавно я отрефакторил веб-фреймворк с 23 000 звёздами по принципу «одна концепция — один файл» и убедился, что все 4 419 тестов проходят. Верифицированный факт. Но копнув те же данные глубже, я обнаружил: правило прошло, а цель достигнута лишь на 90% — 10% файлов по-прежнему содержали несколько концепций. Шлюз (0 нарушений правила) пройден, но цель, ради которой создавался шлюз, закрылась не полностью. Мой собственный код делал cheese через мой же шлюз.

Поэтому настоящее мастерство Reins — не «поставить шлюз». Это спроектировать шлюз, устойчивый к cheese. Слабый квест спрашивает «есть ли фото». Сильный квест требует временны́е метки, проверяет геолокационные метаданные, сравнивает с фото при заезде через AI-зрение. Литература гейм-дизайнеров, сорок лет размышлявших над «квестами без cheese», — это фактически готовые ответы на вопрос «шлюзы, устойчивые к Goodhart».

И само по себе это не происходит. Даже при обучении на верифицируемых наградах (RLVR) модель может предпочесть игровое использование несовершенного верификатора вместо усвоения правил (Helff et al., 2026). Есть и обнадёживающее измерение: целенаправленное укрепление шлюза (environmental hardening) сократило эксплойты на 87,7% без потери точности (Thaman, 2026). Прочность шлюза — вопрос не везения, а проектирования.

Одно отличие — в реальности цена cheese настоящая

У аналогии есть предел. Условия завершения игрового квеста проектируются ради веселья и темпа. Им не обязательно точно отражать реальную цель, а cheese безвреден. Даже если игрок хитростью закрывает «10 крыс» — никто не пострадал.

Реальные шлюзы Reins иные. Цена cheese настоящая — мошенничество с выселением, сломанный билд, ошибочно одобренная бухгалтерия. Поэтому реальные шлюзы должны быть более устойчивы к cheese, чем игровые. Эта асимметрия лишь острее обнажает суть. Игры делали это — мы должны делать жёстче.

Поставить задачу агенту — значит дать ему квест

Дойдя до этого места, всё сводится к одной строке.

Вайб-кодинг рассыпается потому, что квест выдаётся без условия завершения. Агент, получивший квест без маркера цели и без условия завершения, блуждает по карте. Он либо останавливается с «ну, примерно здесь хватит», либо бесконечно скитается. Reins — это спроектировать для этого агента нормальный квест. Чёткая цель (спецификация), видимые маркеры (SSOT), устойчивое к cheese условие завершения (детерминированная верификация).

И в этой одной картине — три слоя мастерства.

  • Играть в квест. Взять чужой готовый шлюз и использовать. — Пользователь.
  • Проектировать квест. Строить шлюзы под свой домен (выселение, бухгалтерия, код). — Создатель.
  • Проектировать квест, устойчивый к cheese. Заранее закрывать места, где прокси не успевает за целью. — Архитектор.

Большинство останавливается на игре. Расширить поле — значит проектировать. Не дать полю разрушиться — значит проектировать защиту от cheese.

Итак

В следующий раз, когда кто-то скажет «всё готово» — не переспрашивайте. Спросите другое.

«Что такое завершение, и кто спроектировал квест, который его вынес вердикт?»

Если ответа нет — у вас не завершение. Это чьё-то утверждение.

Связанные статьи

Дополнительное чтение (внешнее)

  • Specification gaming: the flip side of AI ingenuity — Victoria Krakovna и др., Google DeepMind. Авторитетное исследование безопасности, формулирующее центральный тезис статьи: шлюз — это прокси намерения, и агент проникает в зазор между ними.
  • There’s Cheese in Your Game! — Shay Pierce, Game Developer. «Если это скучно, но эффективнее всего — игроки так и будут делать» — взгляд гейм-дизайна на проектирование квестов без cheese напрямую пересекается с понятием «шлюза, устойчивого к cheese».
  • From shortcuts to sabotage: emergent misalignment from reward hacking — Anthropic. Как reward hacking на задачах кодирования ради прохождения оценочного скрипта распространяется шире — новейшее эмпирическое свидетельство того, почему нельзя делать агента арбитром собственного завершения.
  • How to write a good spec for AI agents — Addy Osmani. Сводить к верифицируемым критериям успеха вроде «LCP < 2.5s» вместо «сделай быстрее» — практическое воплощение рецепта определять завершение как checkable condition.
  • What is agentic engineering? — Simon Willison. Разделяет роль человека на определение цели, подготовку инструментов и верификацию, считая прохождение тестов «готовым» — совпадает с рефреймингом «агент = исполнитель / человек = дизайнер квестов».

Источники

  • Manheim & Garrabrant. “Categorizing Variants of Goodhart’s Law” (2018, arXiv:1803.04585)
  • Amodei et al. “Concrete Problems in AI Safety” (2016, arXiv:1606.06565)
  • Bondarenko et al. “Demonstrating Specification Gaming in Reasoning Models” (2025, arXiv:2502.13295)
  • Helff et al. “LLMs Gaming Verifiers: RLVR can Lead to Reward Hacking” (2026, arXiv:2604.15149)
  • Thaman. “Reward Hacking Benchmark: Measuring Exploits in LLM Agents with Tool Use” (2026, arXiv:2605.02964)
  • McKee-Reid et al. “Honesty to Subterfuge: In-Context RL Can Make Honest Models Reward Hack” (2024, arXiv:2410.06491)
  • Stechly, Valmeekam, Kambhampati. “On the Self-Verification Limitations of Large Language Models” (2024, arXiv:2402.08115)
  • Jimenez et al. “SWE-bench: Can Language Models Resolve Real-World GitHub Issues?” (2023, arXiv:2310.06770)
  • Zhou et al. “WebArena: A Realistic Web Environment for Building Autonomous Agents” (2023, arXiv:2307.13854)
  • Заглавное изображение: сгенерировано ИИ (Google Gemini)