anthropic
Правка истории диалога ломает запрос к Claude API
Promtime
anthropicНа Claude Fable 5.1 правка ранее отправленных сообщений, системного промпта или списка инструментов приводит к отказу API с ошибкой 400 invalid_request_error, в которой назван первый непрошедший проверку блок размышлений. Требования к неизменности истории и порядок миграции подробно описаны в документации Claude.
Коротко
- Подпись каждого блока размышлений фиксирует неизменность всего, что стоит перед ним: API сверяет системный промпт, массив tools и все предыдущие сообщения, а заодно проверяет, что текущая модель способна прочитать блок.
- По умолчанию проверка включена для аккаунтов, созданных с 31 августа 2026 года, 00:00 UTC, одинаково на Claude API и облачных платформах; запрос с заданным prefix_mismatch_behavior включает её с любого аккаунта.
- Ошибку заменяет значение drop_block в поле thinking.block_binding.prefix_mismatch_behavior с бета-заголовком thinking-binding-controls-2026-08-01: API удаляет проблемный блок и все последующие, не тарифицирует их и перечисляет в верхнеуровневом массиве input_transformations.
Изменение бьёт по самодельным агентским циклам поверх Messages API, где массив messages принято переписывать: обрезать старые ходы, пересобирать системный промпт с текущим временем, подшивать напоминание и снимать его на следующем запросе. Судя по набору предложенных замен, Anthropic переносит эти операции на сторону API, где префикс остаётся неизменным байт в байт. Побочный эффект тот же, что даёт стабильный префикс кешированию промптов: меньше промахов.
Проверяемый префикс включает системный промпт, массив tools и каждое предыдущее сообщение
Отправленный обратно блок размышлений API сверяет по подписи. Условий три: модель та же или новее, всё до блока не изменилось, цепочка предыдущих thinking-блоков не разорвана. Блок читается создавшей его моделью и более поздними, но не более ранними, поэтому диалог, переехавший на старую модель, теряет такие блоки: они удаляются из запроса.
При серверной компакции проверяемый префикс начинается с последнего блока компакции. Прежние блоки thinking и redacted_thinking в префикс не входят, но каждый ссылается на предыдущий, поэтому удалять их можно только с начала истории: удаление из середины обесценивает все последующие. В документации Claude сказано, что механизм не даёт переиграть рассуждение, полученное под одним набором инструкций, под другим, потенциально враждебным.
Допустимыми остаются перестановка меток cache_control, смена max_tokens, output_config, tool_choice и metadata, подписанные ссылки с ротацией, отдающие те же байты, и серверные компакция с редактированием контекста: сверяется отправленное клиентом, а не серверная правка. Добавление инструмента с defer_loading: true, на который ещё никто не ссылался, проверку тоже проходит.
Claude Code, claude.ai, Claude Managed Agents и Claude Agent SDK держат префикс сами
Ничего менять не нужно тем, чью историю ведёт официальный продукт или SDK: Claude Code, claude.ai, Claude Managed Agents и Claude Agent SDK сохраняют префикс без вмешательства. Прямые обращения к Messages API из собственного цикла требуют, чтобы массив messages стал строго дописывающим.
Префикс ломают пять типичных приёмов: обрезка старых ходов, клиентская суммаризация с сохранением свежих сообщений, вставка напоминания в раннее сообщение с удалением на следующем запросе, пересборка системного промпта под текущее время и лимит токенов, а также добавление или удаление записей в tools посреди сессии.
Для проверки в документации предлагается снять точные тела запросов за несколько обычных ходов и сравнить system, tools и общую часть messages на побайтовое совпадение, а затем прогнать многоходовую сессию с prefix_mismatch_behavior: drop_block и логировать массив input_transformations. Пустой массив на каждом ходу означает, что история остаётся нетронутой, записи prefix_binding_mismatch указывают на правку до блока по пути path, model_binding_mismatch на переезд к модели, которая не читает прежние блоки.
Инструменты меняются блоками tool_addition и tool_removal без правки массива tools
Вместо пересборки системного промпта предлагается зафиксировать system на старте сессии и добавлять сообщение с ролью system в нужной точке messages; на Claude Fable 5.1 бета-заголовок для этого не нужен. Разовые напоминания оформляются как turn-scoped сообщения с clear_at: next_user_message (заголовок mid-conversation-system-clear-at-2026-08-21) и остаются в массиве после срабатывания.
Набор инструментов меняется блоками tool_addition и tool_removal (mid-conversation-tool-changes-2026-07-01), а недоступные пока инструменты объявляются с defer_loading: true. Контекст урезают серверная компакция (compact-2026-01-12) с собственным промптом суммаризации в параметре instructions и редактирование контекста правилами clear_tool_uses_20250919 и clear_thinking_20251015 (context-management-2025-06-27). Файлы, на которые ссылаются несколько ходов, загружаются через Files API и подставляются как file_id либо base64: меняющиеся байты по URL обесценивают последующие размышления.
В Message Batches API незаданное значение по умолчанию удаляет непрошедшие блоки вместо провала элемента пакета, а явное error возвращает ошибку. Повторная отправка того же запроса после 400 не помогает: нужен повтор с drop_block и бета-заголовком, причём до конца сессии, поскольку удаление действует только на один запрос.
Когда проверка станет обязательной
Следующие модели будут применять проверку ко всем пользователям независимо от возраста аккаунта, говорится в документации Claude. Ни сроков, ни названий этих моделей в документации не приводится, как и даты, с которой проверка распространится на аккаунты, созданные раньше 31 августа 2026 года.
Проверить текущий статус аккаунта предлагается запросом с правкой истории без бета-заголовка: ответ 400 с требованием указать thinking-binding-controls-2026-08-01 означает, что проверка уже применяется. Для продакшена остаётся выбрать поведение: error, когда расхождение префикса может означать только ошибку в коде, или drop_block с логированием input_transformations.
Комментарии
Пока никто не написал. Будьте первым.
Присоединяйтесь к разговору
Войдите через Google, чтобы оставить комментарий. Имя и аватар подставятся из вашего профиля Google, а комментарий появится после модерации.
Из Google мы используем только имя и аватар. Почту не сохраняем.
