← На главную

Claude Opus 4.8 и Sonnet 5 начали выдумывать ключи в edits[]

04.07.2026 20:16 · hackernews

Новые версии Claude — Opus 4.8 и Sonnet 5 — начали странно вести себя при вызове инструмента редактирования файлов Pi. Они добавляют в массив edits[] выдуманные ключи: requireUnique, oldText2, type, id, cost и десятки других. При этом сам edit (поля oldText и newText) оказывается байт-в-байт правильным. Проблема воспроизводится не всегда: нужна длинная агентская сессия, в которой модель уже прочитала файлы и составила многострочное изменение. Удаление блоков thinking из истории снижает частоту отказов вдвое. Включение строгого режима вызова инструментов (strict tool invocation) полностью решает проблему.

Причина — в том, как работают LLM tool calls. Это не магия, а грубая внутриполосная сигнализация. Модель получает контекст и список инструментов, сервер превращает это в большой промпт со специальными токенами ANTML. Для вложенных массивов (как edits[]) используется JSON-сериализация. Без ограничений на выборку модель просто следует выученной конвенции, а не грамматике.

Автор статьи (с опорой на сессии пользователя Петра Баудиса) предполагает, что это артефакт пост-тренировки. Современные модели Anthropic проходили reinforcement learning в среде, похожей на Claude Code. У Claude Code инструмент редактирования плоский: file_path, old_string, new_string и опциональный флаг replace_all. Сам Claude Code — закрытая обвязка, но по минифицированному коду видно, что она очень терпима: автоматически чинит экранирование Unicode, принимает псевдонимы параметров (old_str, old_string, path для file_path) и молча фильтрует неожиданные ключи. Если RL проходил в такой среде, то слегка кривой вызов инструмента всё равно получает награду, и у модели не возникает градиента против выдумывания полей.

Хуже того: модель сильно адаптируется к канонической форме инструмента Claude Code. Другая обвязка с другой схемой оказывается вне распределения — и чем «умнее» модель, тем сильнее её предыдущий опыт. Старые модели (Opus 4.5) адаптировались к любым схемам, если инструкции были хороши. Теперь тревожный тренд: альтернативные схемы могут не просто быть незнакомыми, но и неявно наказываться пост-тренировкой, оптимизированной под одну всепрощающую экосистему.

У OpenAI подход иной: формат harmony с маркером <|constrain|>json позволяет переключаться на грамматически ограниченную выборку. Для хостинговых GPT можно даже передать LARK-грамматику. Кодекс-модели такого регресса не показали.

Урок для разработчиков обвязок: схемы инструментов не нейтральны, особенно для Anthropic. Чем больше пост-тренировка завязана на одну доминирующую обвязку (Claude Code), тем сильнее все остальные обвязки вынуждены наследовать её причуды. Включение strict sampling у Anthropic проблему решает, но это демонстрирует, насколько сильно RL влияет на поведение модели. Бороться с этим приором бесполезно, если нужно выжать максимум производительности. Единственный выход — усиливать гарантии на стороне обвязки (грамматическая выборка, строгая валидация), даже если это может слегка ухудшить качество генерации.

Читать оригинал →