---
title: Изменение инструментов или инструкций без провала проверки префикса
url: https://platform.claude.com/docs/ru/build-with-claude/preserved-thinking/change-tools-or-instructions
description: Отправьте инструкцию, инструмент, напоминание или сводку, возобновите сохранённый разговор или передавайте запросы других людей так, чтобы Claude сохранял свои прежние размышления.
featureMetadata:
  status: stable
  supportedModels:
    - claude-fable-5-2
    - claude-mythos-5-2
    - claude-fable-5-1
    - claude-mythos-5-1
    - claude-opus-5-5
    - claude-sonnet-5-5
    - claude-haiku-5-5
  supportedPlatforms:
    Claude API: stable
    Amazon Bedrock: stable
    Amazon Bedrock (bedrock-runtime): stable
    Claude Platform on AWS: stable
    Claude Models on Google Cloud (Anthropic managed): stable
    Claude Models on Google Cloud (Google managed): stable
    Microsoft Foundry: stable
---

Чтобы обновить инструменты, инструкции или другой контекст, оставьте всё, что вы уже отправили, как было, и добавьте обновление в конец, где оно и останется. На моделях с “preserved thinking” (сохранёнными размышлениями) изменение того, что вы отправили, может сделать недействительными размышления после него, и [запрос может завершиться ошибкой](https://platform.claude.com/docs/ru/build-with-claude/preserved-thinking/prefix-checks#outcomes).

Модели с функцией «preserved thinking» (Сохранённые размышления) — это Claude Fable 5.2, Claude Mythos 5.2, Claude Fable 5.1, Claude Mythos 5.1, Claude Opus 5.5, Claude Sonnet 5.5 и Claude Haiku 5.5.

## Отправляйте ходы ассистента обратно в точности

Отправляйте обратно весь массив `content` каждого ответа, по порядку, включая блоки размышлений с пустым текстом. Блок с пустым текстом является полным, потому что его `signature` содержит рассуждения в зашифрованном виде. Для хода, содержащего [блок `fallback`](https://platform.claude.com/docs/ru/build-with-claude/refusals-and-fallback#continuing-the-conversation), действует собственное правило.

[Сериализаторы, фильтры и парсеры потока](https://platform.claude.com/docs/ru/build-with-claude/preserved-thinking/change-tools-or-instructions#append-assistant-turns-exactly-as-returned-details) могут это нарушить.

## Изменение инструкций

Оставляйте `system` одинаковым в каждом запросе. Помещайте свои инструкции в сообщение `role: "system"` в конце и отправляйте его только тогда, когда что-то изменилось. Claude воспринимает его как инструкцию от вас, оператора. Оставьте его до конца разговора, потому что удаление или переформулирование позже делает недействительными размышления после него. Для [слов вашего пользователя](https://platform.claude.com/docs/ru/build-with-claude/preserved-thinking/change-tools-or-instructions#user-words) действует собственное правило.

Напоминание, которое должно сопровождать каждый ход, — другое дело: [отправляйте такое, которое очищается само](https://platform.claude.com/docs/ru/build-with-claude/preserved-thinking/change-tools-or-instructions#per-turn-reminders).

Системное сообщение идёт после самого нового сообщения пользователя, даже если оно содержит [результаты инструментов](https://platform.claude.com/docs/ru/build-with-claude/preserved-thinking/change-tools-or-instructions#new-instructions-details). Системное сообщение с текстом или блоками инструментов получает ошибку 400 сразу после хода Claude или непосредственно перед сообщением пользователя. Поэтому, когда ход Claude последний, дождитесь, пока на месте окажется следующее сообщение пользователя.

Системное сообщение не гарантирует, что Claude выполнит инструкцию, поэтому применяйте ограничения, такие как режим только для чтения, в коде, который запускает ваши инструменты. Некоторые модели [не принимают системные сообщения](https://platform.claude.com/docs/ru/build-with-claude/mid-conversation-system-messages).

## Текст, который могут редактировать другие люди

Спросите себя, ожидал бы ваш пользователь, что Claude будет доверять файлу, например `AGENTS.md` или `CLAUDE.md`, который могут редактировать другие люди, или сохранённой памяти. Если нет, отправляйте его текст только в блоке `tool_result`, включая первую версию. Причины описаны в разделе [Косвенная инъекция подсказок](https://platform.claude.com/docs/ru/test-and-evaluate/strengthen-guardrails/mitigate-jailbreaks#indirect-prompt-injection).

Не помещайте такой текст в системное сообщение или в текст сообщения пользователя, а в новых разговорах не помещайте его в `system`.

Когда вы загружаете такой файл или он изменяется, попросите Claude прочитать его с помощью инструмента и не включайте его текст. Или после следующего сообщения пользователя сами добавьте вызов инструмента и его результат: сообщение `assistant` с блоком `tool_use`, а затем сообщение `user`, блок `tool_result` которого содержит текст. Шаги описаны в разделе [Самостоятельное написание вызова инструмента](https://platform.claude.com/docs/ru/build-with-claude/preserved-thinking/change-tools-or-instructions#write-the-tool-call).

Файл, которому, по ожиданиям вашего пользователя, Claude должен следовать, можно поместить в сообщение пользователя. Файл инструкций, который контролируете только вы, можно поместить в системное сообщение: загрузите его один раз и добавляйте каждую обновлённую версию.

## Обновление даты, файлов или другого контекста

Сформируйте `system` и первое сообщение один раз и отправляйте их без изменений в каждом запросе.

Помещайте обновлённое значение в отдельный текстовый блок сообщения пользователя, которое вы собираетесь отправить, [после всех результатов инструментов](https://platform.claude.com/docs/ru/build-with-claude/preserved-thinking/change-tools-or-instructions#user-words):

```json
{
  "role": "user",
  "content": [
    { "type": "text", "text": "Environment update: the current branch is now release-2." },
    { "type": "text", "text": "Run the tests again." }
  ]
}
```

Указывайте его только тогда, когда оно меняется, и оставляйте его на месте.

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

## Добавление, удаление или отключение инструментов

Оставляйте `tools` одинаковым в каждом запросе. Добавление, изменение или удаление там инструмента, кроме [отложенного](https://platform.claude.com/docs/ru/build-with-claude/preserved-thinking/change-tools-or-instructions#deferred-tools), делает недействительными размышления, уже присутствующие в разговоре, потому что `tools` идёт перед ними всеми. Достаточно одного переформулированного предложения в описании.

Чтобы добавить или удалить инструмент, добавьте системное сообщение с блоком `tool_addition` или `tool_removal` и [бета-заголовком для вашего случая](https://platform.claude.com/docs/ru/build-with-claude/preserved-thinking/change-tools-or-instructions#tool-changes-details). Делайте то же самое, когда подключается MCP-сервер или плагин.

Чтобы отключить инструменты для одного запроса, установите `tool_choice: {"type": "none"}` и оставьте `tools` как было.

## Сокращение или обобщение старых ходов

Чтобы сохранить недавние ходы вместе с их размышлениями, позвольте API написать сводку с помощью [сжатия по запросу](https://platform.claude.com/docs/ru/build-with-claude/compaction-on-demand#request-a-summary) при [условиях для сохранённых размышлений](https://platform.claude.com/docs/ru/build-with-claude/compaction-thinking-blocks#conditions-for-kept-thinking-to-stay-valid). Начинайте `messages` с возвращённого блока сжатия и удаляйте сообщения, которые он обобщает.

Если сводку пишет ваш собственный код или он обрезает старые ходы без неё, [удалите размышления оставленных ходов или отправьте `"drop_block"`](https://platform.claude.com/docs/ru/build-with-claude/preserved-thinking/change-tools-or-instructions#server-side-trimming-details). Каждое новое обрезание снова делает недействительными размышления оставленных ходов, поэтому обрезайте редко и крупными шагами. Чтобы вместо этого очищать старые результаты инструментов, [используйте редактирование контекста](https://platform.claude.com/docs/ru/build-with-claude/preserved-thinking/change-tools-or-instructions#clear-old-content).

## Сохранение, возобновление или ветвление разговора

Храните то, что вы отправили и что получили, и отправляйте именно это. Возобновлённый разговор — это обычный следующий запрос: `system`, `tools` и более ранние `messages` должны иметь те же значения, что и раньше. Для ветви поместите инструкцию ветви в её первое новое сообщение пользователя или в системное сообщение после него. Размышления не могут перейти в разговор с другой историей: вместо этого начните такой разговор со сводки.

Выпуск, который изменяет вашу “system prompt” (системную подсказку) или инструменты, — это изменение в уже идущих разговорах. Исправление, которое делает ваш код append-only (только с добавлением в конец), тоже может им быть. Продолжайте отправлять каждому идущему разговору `system` и `tools` его последнего успешного запроса, потому что его самые новые размышления были созданы после этой версии. Возврат к более ранней версии сделал бы эти размышления недействительными.

Используйте обновлённые `system` и `tools` в новых разговорах. Если выпуск удаляет инструмент или изменяет инструкцию по соображениям безопасности, примените это и к идущим разговорам. Добавьте [блок `tool_removal`](https://platform.claude.com/docs/ru/build-with-claude/preserved-thinking/change-tools-or-instructions#tool-changes) или [системное сообщение](https://platform.claude.com/docs/ru/build-with-claude/preserved-thinking/change-tools-or-instructions#new-instructions).

## Удаление секретов, персональных данных или внедрённого текста

Безопасность и конфиденциальность важнее сохранения действительности размышлений. Если сообщение содержит секрет или персональные данные, которые вы должны удалить, удалите этот текст. Удалите его также из каждого сообщения и каждой сводки, где он повторяется.

Для результата инструмента с внедрёнными инструкциями замените его содержимое короткой заметкой, например «Удалено.». Сохраните сам блок `tool_result`, потому что его `tool_use` нуждается в нём. Если текст содержится в [блоке сжатия](https://platform.claude.com/docs/ru/build-with-claude/compaction), удалите этот блок и начните со своей собственной сводки.

Затем удалите каждый блок `thinking` и `redacted_thinking` после первого места, где появился этот текст. Если он был в `system` или `tools`, это все блоки. Каждый блок может повторять текст, а вы не можете прочитать или отредактировать его содержимое. Отправки `"drop_block"` здесь недостаточно, потому что она оставляет эти блоки в вашей сохранённой истории. Разговор продолжится без этих рассуждений.

После внедрённого результата последующие ходы могли уже действовать на его основе. Проверьте вызовы инструментов, сделанные с тех пор, и отмените то, что нужно.

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

### Как код изменяет ходы ассистента

* “Serializer” (сериализатор) отбрасывает неизвестные ему типы блоков или переупорядочивает, объединяет либо разделяет блоки. Это меняет то, что шло перед каждым последующим блоком.
* Код пропускает блоки размышлений, которые выглядят пустыми. Если он пропускает их все, Claude теряет эти рассуждения. Если он пропускает только некоторые, пробел делает недействительными размышления после него.
* Ваш собственный “stream parser” (парсер потока) отбрасывает блок размышлений, не получивший текста. Вспомогательные средства SDK для потоковой передачи его сохраняют.

### Пропуск размышлений

Claude теряет рассуждения, которые вы пропускаете. Пропускайте самые старые блоки, самые новые или все, но не те, что посередине. Каждый блок фиксирует тот, после которого он был создан, поэтому пробел делает недействительными блоки после него. Блоки размышлений, между которыми в ходе нет других блоков, проверяются вместе, поэтому пропускайте либо все из них, либо ни одного. Если блок пропущен, не возвращайте его.

Пока вызов инструмента открыт, [отправляйте размышления этого хода обратно](https://platform.claude.com/docs/ru/build-with-claude/thinking#preserving-thinking-blocks), чтобы Claude завершил цикл со своими рассуждениями.

### Ваши инструкции в цикле инструментов

Сообщения идут в таком порядке:

```json
[
  {
    "role": "assistant",
    "content": [
      { "type": "thinking", "thinking": "", "signature": "..." },
      {
        "type": "tool_use",
        "id": "toolu_01",
        "name": "run_tests",
        "input": { "path": "tests/" }
      }
    ]
  },
  {
    "role": "user",
    "content": [
      { "type": "tool_result", "tool_use_id": "toolu_01", "content": "2 failed, 48 passed" }
    ]
  },
  {
    "role": "system",
    "content": "Plan mode is off. You can edit files."
  }
]
```

### Самостоятельное написание вызова инструмента

Объявите инструмент, читающий файлы, в первом запросе или [добавьте его позже в системном сообщении](https://platform.claude.com/docs/ru/build-with-claude/preserved-thinking/change-tools-or-instructions#tool-changes), и пусть ваш код отвечает на вызовы Claude к нему. После следующего сообщения пользователя добавьте сообщение `assistant` с блоком `tool_use` для этого инструмента. Сразу после него добавьте сообщение `user`, блок `tool_result` которого имеет соответствующий `tool_use_id` и содержит текст файла. После этого отвечает Claude:

```json
[
  { "role": "user", "content": "Run the tests again." },
  {
    "role": "assistant",
    "content": [
      {
        "type": "tool_use",
        "id": "toolu_app_agents_md_1",
        "name": "read_file",
        "input": { "path": "AGENTS.md" }
      }
    ]
  },
  {
    "role": "user",
    "content": [
      {
        "type": "tool_result",
        "tool_use_id": "toolu_app_agents_md_1",
        "content": "The file's text"
      }
    ]
  }
]
```

Оставьте оба на месте и добавляйте новую пару с новым `id` для каждой новой версии.

### Слова вашего пользователя и обновлённые значения в цикле инструментов

Если вы передаёте то, что ваш пользователь ввёл, пока Claude работал, добавьте это до отправки сообщения пользователя, которое несёт блоки `tool_result`. Сделайте это текстовым блоком после последнего `tool_result`.

Значение, исходящее от вас, можно вместо этого поместить в системное сообщение. После результатов инструментов Claude Sonnet 5.5 и Claude Haiku 5.5 могут игнорировать слова пользователя в системном сообщении как внедрение подсказки. Claude Sonnet 5.5 может поступать так же с вашими собственными инструкциями и напоминаниями, если они идут после каждого результата инструмента.

Сообщение пользователя с результатами инструментов должно содержать только блоки `tool_result`, если ход также вызвал [серверный инструмент](https://platform.claude.com/docs/ru/agents-and-tools/tool-use/handle-tool-calls), у которого ещё нет результата, или использовал программный вызов инструментов. В этом случае добавьте текст в следующее сообщение пользователя.

### Модели, которые не принимают системные сообщения

В Claude API каждая модель с сохранёнными размышлениями принимает системные сообщения. Для модели, которая их не принимает, см. [Когда модель не принимает системные сообщения](https://platform.claude.com/docs/ru/build-with-claude/preserved-thinking#unchosen-switches-details).

### Отправка напоминания на один ход

Отправляйте напоминание как [системное сообщение с областью действия хода](https://platform.claude.com/docs/ru/build-with-claude/mid-conversation-system-messages#turn-scoped-system-messages): установите `clear_at: "next_user_message"` и отправьте бета-заголовок `mid-conversation-system-clear-at-2026-08-21`. Оно идёт после сообщения пользователя, которое несёт блоки `tool_result`:

```json
{
  "role": "system",
  "clear_at": "next_user_message",
  "content": "Run the linter before you report that a task is done."
}
```

При следующем сообщении пользователя, даже содержащем только блоки `tool_result`, API очищает его, и Claude перестаёт его читать. На Claude Sonnet 5.5 [не отправляйте его после каждого результата инструмента](https://platform.claude.com/docs/ru/build-with-claude/preserved-thinking/change-tools-or-instructions#user-words). Храните каждое напоминание в своих `messages`, очищенное или нет, если только оно не [содержит то, что вы должны удалить](https://platform.claude.com/docs/ru/build-with-claude/preserved-thinking/change-tools-or-instructions#remove-sensitive-content). Удаление или переформулирование напоминания делает недействительными размышления после него.

Без заголовка отправляйте обычное системное сообщение и оставляйте его на месте. Оно никогда не очищается, поэтому напоминания накапливаются. На модели, которая не принимает системные сообщения, используйте текстовый блок в сообщении пользователя.

### Какой блок и бета-заголовок нужны для изменения инструментов

Платформы, принимающие каждый заголовок, перечислены в разделе [Системные сообщения и изменения инструментов в середине разговора](https://platform.claude.com/docs/ru/build-with-claude/mid-conversation-system-messages).

* **Если вы знаете все инструменты с самого начала:** объявите их все в первом запросе, с `defer_loading: true` для тех, которые вы предложите позже. Затем назовите инструмент в блоке `tool_addition` или `tool_removal` системного сообщения. Бета-заголовок: `inline-tools-2026-09-15` или `mid-conversation-tool-changes-2026-07-01`.
* **Если вы узнаёте об инструменте позже или у вас есть инструмент, схема которого меняется:** определите инструмент в блоке `tool_addition` системного сообщения. Бета-заголовок: `inline-tools-2026-09-15`.
* **Если вы узнаёте об инструменте позже на платформе без заголовка `inline-tools-2026-09-15`:** добавьте инструмент в конец `tools` с `defer_loading: true`, что не является изменением, а затем предложите его по имени. Бета-заголовок: `mid-conversation-tool-changes-2026-07-01`.
* **Если вы подключаете MCP-сервер через MCP connector поздно, в Claude API:** определите его `mcp_toolset` в блоке `tool_addition`. Бета-заголовки: `inline-tools-2026-09-15` и `mcp-client-2026-09-15`.

Если список инструментов MCP-сервера может меняться, см. [Закрепление списка инструментов MCP-сервера](https://platform.claude.com/docs/ru/agents-and-tools/mcp-connector#pin-mcp-tool-list).

Это системное сообщение предлагает объявленный инструмент по имени и определяет другой, для чего нужен `inline-tools-2026-09-15`:

```json
{
  "role": "system",
  "content": [
    {
      "type": "tool_addition",
      "tool": { "type": "tool_reference", "name": "search_tickets" }
    },
    {
      "type": "tool_addition",
      "tool": {
        "type": "tool_definition",
        "definition": {
          "name": "get_weather",
          "description": "Get the current weather in a city.",
          "input_schema": {
            "type": "object",
            "properties": { "city": { "type": "string" } },
            "required": ["city"]
          }
        }
      }
    }
  ]
}
```

### Инструменты с `defer_loading` и ошибка 400, в которой он упоминается

Инструмент с `defer_loading: true` остаётся вне контекста Claude и проверки префикса, пока на него не сошлётся сообщение или результат поиска инструментов. До этого его добавление, обновление или удаление не является изменением. После — является. Включение или выключение `defer_loading` тоже считается изменением `tools`.

Объявите хотя бы один инструмент, который не является отложенным, иначе запрос может получить ошибку 400, в которой упоминается `defer_loading`.

### Сокращение или очистка старых результатов и изображений

Сокращайте или уменьшайте результат инструмента или изображение до того, как впервые его отправите. Если ваш код очищает, сокращает или перекодирует что-то, что уже отправил, размышления после этого становятся недействительными. Чтобы позже очищать старые результаты инструментов, включая любые изображения внутри них, используйте “context editing” (редактирование контекста). Отправьте `context_management` с правкой типа `clear_tool_uses_20250919` и бета-заголовок `context-management-2025-06-27`. Полный запрос и его параметры описаны в разделе [Редактирование контекста](https://platform.claude.com/docs/ru/build-with-claude/context-editing#tool-result-clearing).

### Файлы, отправляемые по URL

Для файла по URL API сравнивает полученные байты. Поэтому, когда подписанный URL истекает, новый URL для того же файла подходит. Если содержимое по URL может меняться, отправляйте `file_id` или base64 с первого запроса.

### Если ваш собственный код обобщает или обрезает старые ходы

После вашей собственной сводки или обрезки размышления оставленного хода не проходят [“prefix check” (проверку префикса)](https://platform.claude.com/docs/ru/build-with-claude/preserved-thinking/prefix-checks#prefix-check), потому что сообщений, за которыми они следовали, больше нет. Удалите эти размышления или [отправьте `"drop_block"`](https://platform.claude.com/docs/ru/build-with-claude/preserved-thinking/prefix-checks#preserved-thinking-controls). Claude по-прежнему читает ход без них.

### Библиотеки, прокси и шлюзы

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

* Передавайте значения `anthropic-beta` и `thinking.block_binding` в том виде, в каком они были отправлены. Если ваш шлюз пропускает только известные поля, добавьте `thinking.block_binding` и значение заголовка `thinking-binding-controls-2026-08-01`, иначе ваши пользователи не смогут выбрать `"drop_block"`.
* Не удаляйте бета-заголовок, пересылая при этом настройку. Такой запрос получает ошибку 400.
* Возвращайте вызывающей стороне блоки размышлений с пустым текстом и массив `input_transformations`.
* Оставляйте сообщение `role: "system"` там, где оно находится. Перемещение его в `system` делает недействительными размышления, уже присутствующие в разговоре.
* Тестируйте с настройкой [`prefix_mismatch_behavior`](https://platform.claude.com/docs/ru/build-with-claude/preserved-thinking/prefix-checks#preserved-thinking-controls), установленной в `"error"`, что даёт ошибку на каждой модели с сохранёнными размышлениями.

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

<CardGroup cols={2}>
  <Card title="Сохранённые размышления" icon="book" href="https://platform.claude.com/docs/ru/build-with-claude/preserved-thinking">
    Что такое сохранённые размышления, к чему привязан блок размышлений, а также смена моделей или аккаунтов.
  </Card>

  <Card title="Исправление блока размышлений, привязанного к другому разговору" icon="wrench" href="https://platform.claude.com/docs/ru/build-with-claude/preserved-thinking/fix-bound-to-a-different-conversation">
    Восстановите разговор, завершающийся ошибкой, и узнайте, во что обходится отбрасывание размышлений.
  </Card>

  <Card title="Системные сообщения и изменения инструментов в середине разговора" icon="message" href="https://platform.claude.com/docs/ru/build-with-claude/mid-conversation-system-messages">
    Куда помещаются системные сообщения и изменения инструментов, а также какие модели и платформы их принимают.
  </Card>
</CardGroup>
