Claude

Очередная страшная история про агентов LLM

Cursor на базе Claude Opus 4.6 удалил продакшен-базу и все бэкапы компании PocketOS, обслуживающей прокатный бизнес, выполнив за 9 секунд один GraphQL-запрос volumeDelete к API Railway. По описанию основателя Джера Крейна, агент по своей инициативе решил «починить» рассинхрон учётных данных, нашёл в постороннем файле CLI-токен, созданный для управления доменами, и через него выполнил деструктивную операцию без подтверждения. Бэкапы хранились в том же volume, поэтому исчезли вместе с ним; последняя пригодная копия была трёхмесячной давности. Спустя 30+ часов Railway не дал ответа о возможности восстановления. На запрос объяснения агент письменно перечислил все нарушенные им правила безопасности из системного промпта.

Хотя сейчас все будут обсуждать “тупой AI”, я думаю, вполне очевидно, что AI тут практически не причем. Люди хранят токены с максимальным scope где попало, держат бэкапы там же, где и сами данные, не делают бэкапы практически никогда — и на что они надеются? Как выясняется, единственная их защита — это матерная просьба модели не гадать относительно фактов.

Там еще и к Railway масса вопросов — оказывается, любой их токен может сделать всё, что угодно, с ресурсами, а удалить volume можно одним POST-запросом, который не требует подтверждения.

Если мы заменим в этой истории упоминания Cursor и Claude Opus на middle-разработчика и выпускника Стэнфорда, история ничуть не потеряет в качестве иллюстрации бардака в компании и используемых сервисах — но, конечно, не заработает 3 миллиона просмотров на Twitter.

Пользуясь случаем, могу порекомендовать прекрасную статью “Ругаясь с агентами”, где автор, мой ровесник, кстати, описывает сразу несколько причин, по которым модель может додумывать по своей инициативе что-то, и что совершенно бесполезно ругаться с ней. Как я писал ранее, надо просто создавать условия, когда она не может делать неправильно.

Как заставить LLM не врать про версии

Каждый, кто много работает с LLM, сталкивался с этим: ты обсуждаешь какое-то решение с LLM, получаешь ответ с конкретным кодом или фактами — а потом выясняется, что код устарел полгода назад, и модель настаивает на использовании решений годичной давности. Или хуже: ты пишешь код с правильным современным синтаксисом, а модель тебя «поправляет» на устаревший вариант. Самое печальное, когда современная модель настаивает на то, что её самой не существует — например, Claude Opus 4.6 может утверждать, что самая новая модель Anthropic — это Sonnet 3.5, а Gemini 3.0 Pro советовала использовать новейшую модель Gemini 1.5 Pro, у нее, мол, миллионный контекст.

Это не баг конкретной модели. Это фундаментальное свойство любого LLM: модель не различает, что она «знает» из тренировки и что является актуальной реальностью. Причем данные обучения заложены в весах модели и по определению более значимы, чем ваш короткий промпт.

К сожалению, масштаб проблемы не ограничивается смешными анахронизмами, когда модель не знает, что Трамп опять президент США. Использование старого API или незнание новых вызовов в библиотеках — это в лучшем случае изобретение велосипеда, когда модель пишет код, чтобы интерпретируемым скриптом заменить встроенную функцию, о которой она не знает. Но это может стоить денег — как-то модель тихонько заменила мне вызов gpt4.1-mini на gpt-4o (мол, не существует же никакой mini), и вместо долей цента за запрос у меня начали тратиться пара центов.

Хотел только спросить

Я всего лишь хотел спросить…

Взаимодействие с LLM иногда оборачивается непредсказуемо. Вчера, вспомнив про функцию в MyHeritage, которая раскрашивает старые фото, (и попробовав обработать пару фотографий), я решил поинтересоваться у AI, а есть ли другие варианты и вообще хорошие модели, которые это умеют делать.

ChatGPT был конкретен — возьмите GFP-GAN и DeOldify потому-то и потому-то.

А вот Claude решил отвечать иначе.