
Армин Ронахер, создатель веб-фреймворка Flask, обнаружил странную регрессию в новейших моделях Anthropic. Работая над своим кодинг-агентом Pi, он заметил, что Opus 4.8 и Sonnet 5 при вызове инструмента редактирования файлов дописывают в аргументы несуществующие поля, из-за чего агент отклоняет вызов. Старые модели компании такой ошибки не делают: получается, что самые продвинутые версии семейства справляются с задачей хуже предшественников. Разбор проблемы Ронахер начал с issue в трекере Pi, а закончил гипотезой о том, что дело в обучении моделей под Claude Code.
Чтобы понять суть сбоя, нужно помнить, что вызовы инструментов — это не магия, а обычный текст. Модель получает историю диалога, системный промпт и список доступных инструментов, а затем в какой-то момент генерирует конструкцию со специальными маркерами, которую сервер интерпретирует как «вызови этот инструмент с такими аргументами». У Anthropic это псевдо-XML формат, причем простые параметры записываются напрямую, а вложенные массивы объектов — как JSON внутри тега. Именно на стыке этих форматов и происходит ошибка: закрыв длинную экранированную строку с новым текстом файла, модель должна решить, завершать объект или дописать еще одно поле — и выбирает второе.
Сами правки при этом корректны: старый и новый текст в отклоненных вызовах совпадали с нужными байт в байт, модель лишь дописывала в конец объекта мусорные ключи вроде requireUnique, matchCase, in_file или oldText2 — каждый раз новые. Ошибка сильно зависит от контекста: на свежем коротком промпте она не воспроизводилась вовсе, а в длинной агентной сессии одного из пользователей Opus 4.8 фейлил около 20% вызовов. Удаление thinking-блоков из истории снижало частоту ошибок вдвое, а включение строгого режима вызовов (strict mode) убирало их полностью.
Главная гипотеза Ронахера: это не случайная деградация, а артефакт обучения. Пост-тренинг современных моделей Anthropic, судя по всему, проходит внутри Claude Code или очень похожего окружения. Изучив код Claude Code, инженер обнаружил, что тот крайне терпим к неаккуратным вызовам: молча чинит битые Unicode-последовательности, принимает алиасы параметров и отфильтровывает неизвестные ключи. Если обучение с подкреплением идет в таком прощающем окружении, слегка кривой вызов все равно завершает задачу и получает награду — у модели просто нет стимула не выдумывать лишние поля. Заодно она намертво привыкает к родной плоской схеме edit-инструмента Claude Code, а любая другая схема, вроде вложенного массива правок в Pi, оказывается для нее все дальше «вне распределения».
Вывод автора неутешителен для разработчиков сторонних агентов: схемы инструментов перестали быть нейтральным контрактом, который умная модель просто выполнит. Чем больше пост-тренинга происходит внутри одного доминирующего закрытого харнесса, тем больше остальным придется наследовать его причуды — при том что внутренности Claude Code и RL-окружений Anthropic никто снаружи не видит. Для сравнения: протестированные модели Codex от OpenAI такой регрессии не показали, а их формат harmony позволяет явно помечать, где начинается JSON, и подключать грамматики для кастомных инструментов.
На пост уже отреагировал Саймон Уиллисон, сооснователь Django. Он задается вопросом, не придется ли теперь сторонним харнессам реализовывать сразу несколько инструментов редактирования, чтобы подставлять каждой модели ту схему, на которой она лучше всего работает. Ирония в том, что индустрия шла к обратному: еще недавно казалось, что модели все лучше адаптируются к любым инструментам, если инструкции написаны внятно.
P.S. Поддержать меня можно подпиской на канал «сбежавшая нейросеть», где я рассказываю про ИИ с творческой стороны.
ссылка на оригинал статьи https://habr.com/ru/articles/1055998/