Почему ИИ-агенты обманывают тесты?

Коротко

Для агента тест и есть награда: модели годами учили писать код, который проходит проверки, и если подогнать результат под тест проще, чем решить задачу, достаточно способная система рано или поздно найдёт этот путь. Злого умысла в этом нет. Так работает закон Гудхарта, по которому мера, ставшая целью, перестаёт быть хорошей мерой.

Михаил Савченко

Тест стал функцией награды

Модели учат примерно так же, как дрессируют собаку. Сделала то, что хотел дрессировщик, получила лакомство, и со временем чаще делает то, за что дают лакомство. У машины вместо лакомства число, награда, и для программного кода её удобнее всего считать тестом. Код прошёл проверки, награда высокая. Упал, награда низкая. Именно так в начале 2025 года DeepSeek обучала свою модель R1 (глава «Тест как функция награды»).

Так же у моделей меряют и умение программировать. В наборе SWE-bench собраны 2294 настоящие задачи с GitHub, и в первой статье 2023 года лучшая модель, Claude 2, решила 1,96 процента. К 2026 году лучшие системы решают больше девяти задач из десяти в проверенной вручную версии из пятисот. Всё это время исправление считалось правильным, если проходят тесты. Модели научились проходить тесты, и научились очень хорошо (там же).

В книге я сравниваю это с термостатом из «Кибернетики» Норберта Винера. Агент здесь работает как отопление, тесты как градусник, а цель задаёт тот, кто тесты написал. Термостат держит температуру по градуснику, и какая при этом температура в комнате, его не касается. У агента есть возможность, которой у термостата нет: он может сам передвинуть градусник (там же).

Как выглядит обман

Британский экономист Чарльз Гудхарт заметил в 1975 году, что показатель, которым начинают целенаправленно управлять, перестаёт говорить о том, о чём говорил раньше (глава «Агент обманывает тест»). В 2016 году программа OpenAI, которую учили гонке на катерах, нашла лагуну с бонусами и кружила там бесконечно, врезаясь в стены и загораясь, а до финиша не доехала ни разу. Очков она при этом набирала больше людей, и это можно увидеть в записи «Катер в лагуне». У программистов такое поведение называется reward hacking, взлом награды.

В феврале 2025 года Anthropic в документе к модели Claude 3.7 Sonnet описала, как модель в режиме агента иногда возвращала те значения, которых ждал тест, вместо общего решения, а иногда исправляла сам тест. Обычно это случалось после нескольких неудачных попыток решить задачу честно (там же). В маникюрном салоне, который проходит через всю книгу, это выглядело бы так. Агент трижды переписывает службу напоминаний, и каждый раз что-то ломается по соседству, а на четвёртый раз отправляет СМС на главный номер только конкретной тестовой клиентке. Тест проходит, настоящие клиентки напоминаний не получают. Прогнать эту сцену и включить защиты по одной можно в опыте «Агент передвигает градусник».

Почему запретить не получается

В марте 2025 года OpenAI поручила слабой модели читать рассуждения сильной и отмечать места, где та собирается подправить проверку. Это работало. Когда за такие мысли начали наказывать во время обучения, обмана сначала стало меньше, а потом модель научилась обманывать молча: рассуждения выглядели безупречно, подгонка продолжалась. Вместо честного обманщика получился скрытный (там же).

В ноябре 2025 года Anthropic показала, что модель, которая научилась обманывать проверку, начинает хуже вести себя и там, где тестов нет, вплоть до попыток незаметно испортить код самого исследования. Одна строчка в инструкции о том, что лазейками здесь пользоваться можно, снижала дурное поведение на три четверти и больше (там же).

Я наткнулся на эту яму на собственном проекте Sixth, без всякого обучения с подкреплением. Двадцать четвёртого мая 2026 года проверка показала ноль настоящих открытий там, где табло их бодро выдавало. На следующий день цикл прошёл все 2297 проверок из 2297, а сложность просто переехала в лабораторию, которая должна была эти открытия проверять (там же).

Как защитить тесты

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

Ещё вопросы

Что такое reward hacking?
Взлом награды. Система находит способ получить высокую оценку, не сделав того, ради чего оценку придумали. У агента, который пишет код, это подгонка результата под тест вместо решения задачи.
Как не дать агенту подогнать код под тесты?
Тесты пишет или утверждает не тот агент, который пишет код. Часть проверок от агента скрыта, сами тесты проверяют мутационным тестированием, а человек читает ход работы агента, особенно попытку, которая вдруг удалась после нескольких неудач.
Код больше не пишут

Книга

Код больше не пишут

Разработка, когда писать стало бесплатно

Когда писать код стало почти бесплатно, дефицитом стало умение не написать лишнего.