

Opus 4.8 и Sonnet 5 ошибаются там, где старые версии справлялись — виновата тренировка под Claude Code
Армин Ронахер, создатель веб-фреймворка 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-блоков из истории снижало частоту ошибок вдвое, а включение строгого режима
Читать на habr.com