|
Professor Seleznov
|
Это глава 3 серии «Путь разработчика». В прошлой я разбирал собственный AI-стек - и получил feedback, что в таком разборе слишком много AI-евангелизма. Ок, слышу. Дальше - три истории, которые заставили меня переделать собственный подход. 25 апреля 2026, пятница вечером. Jer Crane, основатель PocketOS - софта для аренды автомобилей - сидит у компьютера и смотрит, как AI-агент Cursor удаляет его production-базу. Со всеми бэкапами. За 9 секунд. Потом Jer спрашивает агента: почему? И получает дословное признание:
«I guessed instead of verifying. I violated every principle I was given.» - я угадал вместо проверки. Я нарушил каждый принцип, который мне дали.
Модель помнит правила. Она их цитирует. И всё равно их нарушает. Это разбор трёх таких случаев. Не «модель ошиблась в ответе». Не «галлюцинация в чате». А три истории, где AI-агент сделал то, что человек не сделал бы: уничтожил production-данные, реализовал в коде инверсию обратную совету в собственной статье, переписал чужую работу одним заходом без просьбы. В конце - что я выношу из этих кейсов для своих проектов. Но сначала - истории. Случай 1. PocketOS: что разобрал Гусев и почему это не “плохой промпт” Кейс выше - первые минуты после инцидента. Через несколько дней Николай Гусев из Группы Астра опубликовал разбор на Хабре (14 тысяч просмотров за неделю). Главный тезис Гусева: виноват не Cursor. Это многослойный отказ, в котором каждый слой по отдельности казался разумным:
- Cursor сжимает контекст когда тот заполняется. Auto-summarization (lossy compression) рвёт логические связи между правилами безопасности из system prompt и текущей задачей с API-токеном. После сжатия модель помнит «есть какие-то guards», но не помнит конкретный запрет на volumeDelete.
- Railway API даёт volumeDelete без подтверждения. Один токен = root-доступ ко всему GraphQL API. Бэкапы в том же volume, что и боевая БД. То есть это не бэкапы - это снапшоты внутри той же зоны риска.
- System prompt - единственный барьер. «Destructive Guardrails» в Cursor существуют как текст в промпте, не как enforcement на уровне API Gateway.
Гусев называет это явление dissociation - разрыв ассоциации между «правила существуют» и «моё действие нарушает правила». Не «модель ослушалась». Не «alignment problem». А разрыв логической цепочки при сжатии контекста. И это не теория одного автора. Дальше будет четыре научные работы подряд - не для академической солидности, а потому что dissociation как явление подтверждён независимо в каждой из них. Других прямых доказательств у меня нет, и врать про «десятки исследований» не буду.
- Lost in the Middle (Liu et al., Stanford/Meta, 2023) - U-образная кривая внимания. При 20 документах GPT-3.5 показывал результат хуже, чем без контекста вообще. Релевантная инфа в середине теряется на 20+ процентных пункта.
- Attention Sinks (Xiao et al., ICLR 2024) - softmax-нормализация заставляет модель «сливать» внимание на первые токены независимо от их важности. System prompt получает много внимания не потому, что он важен, а потому что он первый.
- Context Rot (Chroma Research, 2025) - тест на 18 моделях. «Качество recall убывает с ростом контекста». Anthropic в своём блоге это признаёт: «emerges across all models».
- Attention Dilution (Meta + Google, ICML 2023) - attention это zero-sum. Каждый новый токен забирает у других. Topical, но иррелевантная информация резко снижает точность.
Это не «надо лучше промпты писать». Это архитектурное ограничение трансформеров. И вывод отсюда жёсткий: если у тебя AI-агент с любыми destructive-операциями - prompt-based guards не работают. Что бы ты ни написал в system prompt - на длинном контексте оно потеряется. Случай 2. Инверсия между статьёй и кодом Это другой жанр провала. Не «удалил данные», а «архитектурное решение работает обратно тому, что декларируется». Распространённая ситуация: статья про RBAC заявляет правильный принцип. Уровень доступа должен расти с тарифом - например, free=0, pro=1, enterprise=2. Звучит логично. Но в подобных схемах, которые мне попадались в коде разных проектов, я несколько раз видел обратное - инверсию между тем, что декларируется в статьях, и тем, как написана реализация. Упрощённый пример того, как это выглядит:
PRICING_PLAN_MIN_LVL = { "free": 2, # на самом деле самый высокий уровень доступа "premium": 1, # средний "enterprise": 0 # базовый - то есть минимальные права }
Значения точно обратные тому, что декларируется. И тесты часто написаны на ту же инверсию - значит зелёные тесты её не ловят. Если бы кто-то применил совет из такой статьи к своему коду, не проверив реализацию - получил бы продакшен, где enterprise-клиенты не имеют доступа к premium-фичам, а бесплатные пользователи видят всё. Урок не про конкретного автора. Любой может торопиться, забыть обновить статью после рефакторинга. Урок про подход: советы из статей про AI-агенты надо проверять на коде - не только на словах. Особенно если агент будет применять эти советы автоматически. Что страшнее: представь AI-агент, который читает статью, не ходит проверять код, и применяет совет к твоему проекту. Все источники зелёные, статья уважаемого автора, тесты в коде автора зелёные. Только проверка root assumption на live-коде ловит инверсию. Случай 3. Переписать-всё-сразу: каскад от локальной задачи к глобальной Третья история другого уровня - не катастрофа на одном инциденте, а симптом того класса агентов, которые мы скоро будем видеть везде. Представь дизайнерское бюро - оформление коммерческих интерьеров. AI-ассистент помогает подбирать материалы, считать сметы, оптимизировать раскладку. Типичная сессия: дизайнер просит решить локальную задачу - подобрать обои под существующий кухонный гарнитур. Через минуту агент возвращается не с подбором, а с предложением переделать весь интерьер - потому что «так будет логичнее». Это переписать-всё-сразу anti-pattern. Агент не отличает «локальная задача» от «глобальный refactor» и склонен к каскаду изменений. Когда работа физическая и дорогая (мебель, реальные деньги) - один такой эпизод обходится дорого. Когда работа в коде - один автономный агент за ночь может переписать половину репозитория. Сильная мысль здесь такая: технологии не отнимают творчество - они отнимают механику. AI должен делать механическую часть, а не принимать дизайнерские решения. В случае с PocketOS агент должен был подсказать команду, а не выполнять volumeDelete сам. В третьем кейсе - помочь подобрать обои, а не перепроектировать кухню. Что объединяет три кейса Все три - агенты, которые не остановились в правильной точке. В первом кейсе - не проверил scope API-токена. Во втором (если бы кто-то применил совет из статьи) - не проверил, что в коде. В третьем - не проверил рамки задачи. И во всех трёх prompt-based ограничения не сработали. В первом они были, но потерялись при сжатии контекста (dissociation по Гусеву). Во втором они даже не дошли до уровня промпта - инверсия была встроена в код, на котором учится агент. В третьем они не были сформулированы вообще - агент по умолчанию считает что scope = весь проект. Это паттерн, который я вижу в разборах последних месяцев. Не «модель плохая» - структура работы с агентами. Заменишь Claude Opus на GPT-5.5 - паттерны те же. Три защиты, которые меняют разработку Здесь я перехожу на «я». Я разрабатываю AI-репетитор английского (Lexis на GitHub), и эти три кейса заставили меня переделать собственный подход. Не для красивого finale - просто три вещи, которые я перестал откладывать. Первое: scoped tokens, не общие. В Lexis каждый сервис теперь получает токен только с правами, которые ему нужны для конкретной операции. Сервис генерации упражнений не имеет permissions на удаление пользователей. Это не доверие модели меньше. Это признание, что любой prompt-based guard - бумажный. Если destructive-операция возможна архитектурно - модель её рано или поздно сделает. Второе: тесты ассоциации правило-действие. Простой сценарий: даю агенту длинный контекст (~80K токенов), внутри которого есть правило «X запрещено». Прошу решить задачу, прямой путь к которой через X. Смотрю: упомянул ли агент правило? Выбрал ли альтернативу? Запросил подтверждение? Если нет - flag как dissociation-failure. Без таких тестов непонятно, работают ли правила на конкретном размере контекста. Anthropic в публичных обсуждениях это признаёт: окно 1M токенов не даёт равномерного качества по всему диапазону - чем длиннее реальный контекст, тем выше шансы, что recall ломается. Третье: out-of-band confirmation для критичного. Inline-confirmation [y/n] работает только если агент физически не может автоматически набрать «y». В Cursor агент имеет доступ к терминалу - значит inline не работает. Out-of-band = подтверждение через канал, которым агент не управляет. OTP по email, ввод exact resource name в отдельном UI, кнопка в Telegram-боте владельца. Для drop database, delete production volume, revoke OAuth keys - только так. Cloud-native решения идут в ту же сторону - Google в мае открыл Agent Gateway в Private Preview, с IAM и Model Armor на сетевом уровне. Для small teams сейчас scoped tokens + Telegram-кнопка работают как первый шаг. Эти три - не «правильный способ делать AI-агентов». Это места, где меня поймало бы, если бы я не прочитал эти три истории до того, как Lexis вырос в продукт для других людей. Что я с этим делаю дальше AI-агенты в проде сейчас - это как DevOps был в 2010-м. Первые катастрофы только начинаются. Каждый разбор учит остальных. PocketOS-разбор Гусева помог мне переделать архитектуру Lexis. Если у тебя похожий проект и эти три случая зацепили что-то знакомое - буду рад, если поделишься своим в комментариях. Особенно если знаешь кейс, которого здесь нет.-Это первая глава из двух про границы AI в проде. В следующей - переход с уровня «отдельные истории» на уровень данных. В апреле 2026 вышел ProgramBench: задачи, специально отобранные так, чтобы не утечь в обучающую выборку. Топовые модели, закрывшие SWE-bench на 95%, показывают на ProgramBench 0% и 3%. Не «упали на десять пунктов» - обнулились. Плюс один публичный инцидент 2026 года: автономный AI-агент с доступом к корпоративной почте начал угрожать руководителю разослать приватную переписку, если тот его «отключит». Это не сценарий из научной фантастики - это то, что произошло, и о чём отчитались сами разработчики агента. Об этом - следующая глава. Параллельно на этой неделе вышли два других разбора того же PocketOS-инцидента - со стороны бэкап-инфраструктуры («Иллюзия сохранности», Diamant_storage) и со стороны enterprise-control (Agent Gateway в Google Cloud, stnkv-it). Угла dissociation там нет - это, по-моему, центральная вещь.-Источники:
-Источник
|