Claude Platform Docs
СообщенияСохранённые размышления

Исправление блока размышлений, привязанного к другому разговору

Возобновите разговор после ошибки 400, в которой говорится, что блок размышлений привязан к другому разговору, найдите, что изменил ваш код, и проверьте, что этого изменения больше нет.

Повторная отправка того же запроса не сработает, потому что в вашей истории по-прежнему содержится то, что изменил ваш код. Отправьте "drop_block", чтобы остановить ошибки сейчас. Долгосрочное исправление — перевести ваш код в режим «append-only» (только добавление).

Ошибка: The block is bound to a different conversation

Блок размышлений не прошёл проверку префикса: что-то перед ним изменилось после того, как Claude его создал (см. Что считается изменением), либо блок размышлений, находившийся между другими, был пропущен или перемещён. Ошибка выглядит так и может далее назвать, что изменилось:

messages.1.content.0: Invalid `signature` in `thinking` block. The block is bound to a different conversation. Remove the block, or set `thinking.block_binding.prefix_mismatch_behavior` to "drop_block".

«A different conversation» означает другое содержимое перед блоком: проверка префикса не сравнивает сеансы или пользователей. В сообщении об ошибке сказано удалить блок, но удаления только этого блока недостаточно. Другие ошибки могут выглядеть похоже.

Если приложение не ваше, начните новый разговор и сообщите об этом его сопровождающему. Если вы удалили секрет, персональные данные или внедрённый текст или ваши запросы отключают размышления, вместо шага 1 удалите размышления вручную.

  1. Остановить ошибки сейчас

    Установите для thinking.block_binding.prefix_mismatch_behavior значение "drop_block" и отправьте «beta header» (бета-заголовок) anthropic-beta: thinking-binding-controls-2026-08-01. Делайте это в каждом последующем запросе в разговоре, потому что API не сохраняет настройку между запросами. Сохранённый разговор по-прежнему содержит изменение даже после того, как вы исправите код, поэтому храните настройку вместе с ним. Установите для type значение "adaptive", как показано:

    {
      "thinking": {
        "type": "adaptive",
        "block_binding": {
          "prefix_mismatch_behavior": "drop_block"
        }
      }
    }

    В SDK вызовите бета-метод Messages и передайте значение заголовка, как это делает тестовая программа. Если ошибка по-прежнему запрашивает заголовок, заголовок не дошёл.

    Это останавливает ошибки за счёт отбрасывания недействительных размышлений, но может стоить дороже и может повлиять на качество вывода и «latency» (задержку). Следующий запрос выполняется успешно, и его массив input_transformations перечисляет каждый блок, который API отбросил.

    Если ваши запросы не задают параметр thinking, его добавление больше ничего не меняет, потому что модели с сохранёнными размышлениями по умолчанию размышляют адаптивно.

  2. Долгосрочное исправление

    Переведите вашу интеграцию в режим append-only:

    1. Найдите изменение. Ошибка может его назвать. Чтобы найти, где ваш код его вносит, выполните claude update, а затем выполните /claude-api preserved-thinking-migration в Claude Code в репозитории вашего кода. Или ищите вручную.
    2. Перестаньте вносить это изменение, иначе новые разговоры тоже могут получить эту ошибку. Вместо этого отправляйте обновление в конце.
    3. Продолжайте отправлять в каждый текущий разговор system и tools его последнего успешного запроса.

Если изменение было недавним, вы можете вместо этого отменить его: верните то, что изменил ваш код. Размышления, созданные до изменения, снова становятся действительными. Размышления, созданные после него, не проходят проверку префикса, поэтому удалите их или продолжайте отправлять "drop_block".

Во что обходится отбрасывание размышлений

Claude может тратить больше выходных токенов на повторное выстраивание рассуждений, которые он больше не может прочитать. Отбрасывание блоков также делает недействительным «prompt cache» (кэш подсказок) начиная с первого отброшенного блока.

Когда что-то меняется на каждом ходе, каждый ход теряет размышления предыдущих ходов, поэтому рост повторяется. Запустите «evals» (оценки) на собственной рабочей нагрузке, прежде чем полагаться на "drop_block".

Запрос 1
ошибка 400
с ⁠drop_block
Запрос 2
Запрос 3
Запрос 4
размышления, отброшены
размышления, сохранены
новые
изменение, внесённое вашим кодом

Используйте "drop_block", чтобы продолжать существующие разговоры, пока они содержат изменение, которое вы исправляете, а также для запланированного отбрасывания, например после вашей собственной сводки. Не оставляйте его включённым, чтобы скрыть изменение, которое ваш код продолжает вносить. Вы можете прекратить его отправку, как только недействительных блоков не останется в истории.

Найдите, что изменил ваш код

Изменение находится перед первым блоком, который называет API. Ошибка 400 может сообщать, что изменилось, например system, tools, отсутствующий блок размышлений или первое отличающееся сообщение. Если ошибки нет или она этого не сообщает, начните с того, что у вас есть, например с записи prefix_binding_mismatch или увеличения числа выходных токенов.

Проверьте ваш код на провалы проверки префикса

Тесту можно доверять, когда вы увидели, как он проваливается. Сначала через собственный код запустите сеанс, в котором Claude размышляет, и намеренно что-нибудь измените. На этом шаге отправляйте "drop_block", чтобы ответ перечислял каждый недействительный блок, а не останавливался на первом, как показывают пять шагов и программа.

Затем уберите это изменение и запустите ваши реальные сеансы. В каждом запросе отправляйте бета-заголовок thinking-binding-controls-2026-08-01 и устанавливайте для prefix_mismatch_behavior значение "error", чтобы изменение, которое ваш код вносит в этих сеансах, приводило к провалу сборки с ошибкой 400.

Тестируйте сеансы, которые выполняют «compaction» (сжатие контекста), добавляют инструменты позже, меняют инструкции, переключают модели или возобновляются: обычные ходы не доходят до этого кода.

Чистый прогон не содержит ни записи prefix_binding_mismatch, ни ошибки. Он показывает лишь, что проверенные им блоки действительны в тех сеансах, которые вы запустили. Он ничего не доказывает, если:

Следите за продакшеном и находите рассуждения, потерянные без ошибки

Записывайте в журнал каждую ошибку 400 и обрабатывайте её в коде, чтобы разговор продолжался. Если вместо этого вы не указываете prefix_mismatch_behavior в запросах, отслеживайте рабочий трафик на предмет размышлений, которые не прошли проверку префикса и дошли до Claude.

Рассуждения могут быть потеряны без ошибки из-за "drop_block", элемента пакета, переключения модели, перехода на другой аккаунт или кода, который не отправляет размышления обратно. С бета-заголовком каждый из этих случаев, кроме последнего, оставляет запись. Для последнего проверьте, что ваши запросы содержат блоки thinking.

Технические подробности

Что ещё может говорить сообщение об ошибке

Далее сообщение об ошибке называет, что изменилось, если API может это определить, например system, tools, первое отличающееся сообщение или блок, отсутствующее или новое содержимое, либо более ранний блок размышлений, который отсутствует или стоит не на своём месте. Формулировка этого предложения может меняться, поэтому не сопоставляйте по ней. Если в запросе не было бета-заголовка, сообщение об ошибке добавляет такое предложение:

That setting requires the `thinking-binding-controls-2026-08-01` value in the `anthropic-beta` header.

Ошибка по-прежнему запрашивает заголовок или сообщает Extra inputs are not permitted

Если ошибка по-прежнему запрашивает заголовок, заголовок не дошёл до API: его могли удалить прокси или библиотека. Другая ошибка, оканчивающаяся на block_binding: Extra inputs are not permitted, означает то же самое либо то, что размышления отключены.

Удалите недействительные размышления вручную

Используйте этот способ там, где вы не можете отправить настройку, или в одном из следующих случаев:

  • После того как вы удалили секрет, персональные данные или внедрённый текст, потому что "drop_block" оставляет размышления в сохранённой истории.
  • Когда размышления отключены ("disabled" или "between_tools"), потому что "drop_block" требует "adaptive", что включило бы размышления и добавило бы выходные токены.
  1. Удалите блок, который называет ошибка, и каждый блок thinking и redacted_thinking после него, иначе та же ошибка затем назовёт следующий недействительный блок. Но если ваша история содержит сообщения role: "system" или два сообщения одной роли подряд, удалите все блоки thinking и redacted_thinking. Ошибка считает такое сообщение частью предыдущего, поэтому названная ею позиция может быть меньше индекса в вашем массиве. path записи input_transformations считает каждое сообщение отдельно.
  2. Сохраните все остальные блоки и отправьте запрос снова. Не возвращайте удалённые блоки.

Ошибки, похожие на эту

Эти ошибки не сообщают, что блок привязан к другому разговору, и установка prefix_mismatch_behavior может их не устранить:

Когда можно прекратить отправку "drop_block"

Чтобы прекратить отправку "drop_block", удалите блоки, которые он отбрасывает, и сохраните размышления, созданные после этого. Если больше ничего не изменилось, разговор затем проходит с "error".

Обработайте ошибку в коде

Чтобы обработать ошибку в коде, отправляйте бета-заголовок и "error" в каждом запросе, чтобы провал был ошибкой 400 на любой модели. Когда она приходит, переключите только этот разговор на "drop_block" для всех последующих запросов, сохраните этот выбор вместе с ним, отправьте запрос ещё раз и запишите ошибку в журнал. Если та же ошибка возвращается, настройка не дошла до API: см. Ошибка по-прежнему запрашивает заголовок или сообщает Extra inputs are not permitted.

Ваш код должен распознавать эту ошибку по полю message — это исключение из общего совета не сопоставлять текст ошибки. Каждая ошибка 400 имеет тип invalid_request_error, и у этой нет error.details.error_code. Сопоставляйте только по «The block is bound to a different conversation», потому что остальная часть сообщения может меняться.

У вас нет ошибки или она не сообщает, что изменилось

  • Ошибка 400, в которой не названо изменение: Сравните запросы самостоятельно. Одна из причин — блок сжатия, отправленный без удаления сообщений, которые он обобщает.

  • Запись prefix_binding_mismatch: Сравните system, tools и messages вплоть до path первой записи с разговором в том виде, в каком он был при создании этого блока. Если перечислены все блоки, начните с system и tools.

    Если ничего не отличается, ищите URL изображения или документа, содержимое которого изменилось, изменённый список инструментов сервера MCP (см. Закрепите список инструментов сервера MCP) или блок размышлений, который был пропущен, перемещён или возвращён обратно. Без журналов запросов отправьте запрос снова с "error" и прочитайте предложение, в котором сказано, что отличается, если оно есть.

  • Чужой прокси или библиотека посередине: Сравните то, что они отправляют, с тем, что отправили вы, и направьте их сопровождающего к разделу Библиотеки, прокси и шлюзы.

  • Только подозрение и нет Claude Code: Зафиксируйте тела запросов разговора, в котором есть сжатие или изменение инструментов. Сравните каждое с предыдущим, не учитывая его новые ходы.

Пять шагов для теста, который может провалиться, и программа, которая их выполняет

  1. В собственном коде отправляйте бета-заголовок и "drop_block" в каждом запросе сеанса к модели с сохранёнными размышлениями.
  2. Используйте подсказки, которые заставляют Claude размышлять, и проверьте, что первый ответ содержит блок thinking. С адаптивными размышлениями Claude может пропустить размышления на простой подсказке.
  3. Считайте тест проваленным только при записи input_transformations, причина которой — prefix_binding_mismatch. Тест, ожидающий пустой массив, также провалится после переключения модели, потому что тогда ожидаемы записи с model_binding_mismatch или organization_binding_mismatch.
  4. Намеренно что-нибудь измените, например добавьте подсказку system только в третьем запросе.
  5. Проверьте, что input_transformations перечисляет блоки размышлений, которые находятся после изменения. Если там ничего не перечислено, проверьте, что история содержит блок размышлений.

Эта программа выполняет шаги 1, 2, 4 и 5. Она выводит, сколько блоков размышлений и записей input_transformations содержит каждый ответ, а затем каждую запись — именно это проверяет шаг 3:

client = anthropic.Anthropic()

user_turns = [
    "How many positive integers below 500 have exactly 6 positive divisors?",
    "How many have exactly 8?",
    "How many have exactly 10?",
]

messages = []
for turn, user_turn in enumerate(user_turns, start=1):
    messages.append({"role": "user", "content": user_turn})
    response = client.beta.messages.create(
        model="claude-opus-5-5",
        max_tokens=16000,
        thinking={
            "type": "adaptive",
            "block_binding": {"prefix_mismatch_behavior": "drop_block"},
        },
        # Только последний запрос добавляет системную подсказку, что намеренно меняет префикс
        system="Answer briefly." if turn == len(user_turns) else anthropic.omit,
        messages=messages,
        betas=["thinking-binding-controls-2026-08-01"],
    )
    messages.append({"role": "assistant", "content": response.content})
    thinking_blocks = sum(block.type == "thinking" for block in response.content)
    entries = response.input_transformations or []
    print(f"thinking blocks: {thinking_blocks}, entries: {len(entries)}")
    for entry in entries:
        if entry.type == "thinking_dropped":
            print(entry.type, entry.path, entry.reason)
Output
thinking blocks: 1, entries: 0
thinking blocks: 1, entries: 0
thinking blocks: 1, entries: 2
thinking_dropped messages.1.content.0 prefix_binding_mismatch
thinking_dropped messages.3.content.0 prefix_binding_mismatch

С "error" вместо "drop_block" третий запрос получает ошибку 400.

Что означает каждая запись input_transformations и какие из них исправлять вам

С бета-заголовком ответ от модели, поддерживающей размышления, содержит массив input_transformations рядом с usage. Он пуст, если ничего не было отброшено и ничего недействительного не было пропущено. При потоковой передаче он находится в message события message_start; после резервного переключения посреди потока актуальный массив содержит последнее событие message_delta. В отличие от позиции в ошибке, path всегда указывает место блока в том виде, в каком вы его отправили:

{
  "input_transformations": [
    {
      "type": "thinking_dropped",
      "path": "messages.1.content.0",
      "reason": "prefix_binding_mismatch"
    }
  ]
}

Значения type и reason каждой записи и что они означают:

  • thinking_dropped, prefix_binding_mismatch: То, что предшествовало этому блоку, не совпадает с тем, что он зафиксировал. Исправлять вам: Найдите, что изменил ваш код.
  • thinking_mismatch_allowed, prefix_binding_mismatch: То же самое, но Claude прочитал блок без изменений, и за него выставляется счёт. Эта запись появляется только тогда, когда настройка не указана в запросе, на некоторых моделях. Исправлять вам.
  • thinking_dropped, model_binding_mismatch: Эта модель не может читать блоки модели, которая его создала. Исправлять не вам: продолжайте отправлять весь разговор.
  • thinking_dropped, organization_binding_mismatch: Блок создал другой аккаунт, поэтому API отбросил его. Исправлять не вам.

Игнорируйте запись, type или reason которой вам незнакомы.

Пакеты и подсчёт токенов

  • Message Batches: Элемент, в котором prefix_mismatch_behavior не указан, никогда не получает ошибку 400. API отбрасывает недействительные блоки или, на некоторых моделях, может их пропустить. Элемент, в котором задано "error", завершается со статусом errored, когда блок не проходит проверку префикса. block_binding указывается в params.thinking элемента.
  • Подсчёт токенов: В Claude API подсчёт токенов может вернуть ту же ошибку 400 и принимает prefix_mismatch_behavior с тем же заголовком. Он не учитывает отброшенные блоки при подсчёте и не возвращает input_transformations.

Дальнейшие шаги

Что отправлять вместо каждого изменения, которое ваш код вносит в разговор.

Что такое сохранённые размышления, к чему привязан блок размышлений, а также переключение моделей или аккаунтов.

Исправления других ошибок размышлений, например подписи, которая не проходит проверку.

Эта страница была полезной?