Claude Platform Docs
  • Сообщения
  • Управляемые агенты
  • Администрирование

Search...
⌘K
Первые шаги
Введение в ClaudeБыстрый старт
Разработка с Claude
Обзор возможностейИспользование Messages APIПричины остановки и резервный вариантОтказы и резервный вариантРезервный кредит
Возможности модели
Расширенное мышлениеАдаптивное мышлениеУсилиеБюджеты задач (бета)Быстрый режим (исследовательская предварительная версия)Структурированные выходные данныеЦитированиеПотоковая передача сообщенийПакетная обработкаРезультаты поискаПотоковая передача отказовМногоязычная поддержкаЭмбеддинги
Инструменты
ОбзорКак работает использование инструментовРуководство: создание агента с использованием инструментовОпределение инструментовОбработка вызовов инструментовПараллельное использование инструментовTool Runner (SDK)Строгое использование инструментовСерверные инструментыИнструмент веб-поискаИнструмент веб-загрузкиИнструмент выполнения кодаИнструмент советникаИнструмент поиска инструментовИнструмент памятиИнструмент BashИнструмент текстового редактораИнструмент использования компьютераУстранение неполадок
Инфраструктура инструментов
Справочник по инструментамУправление контекстом инструментовКомбинации инструментовИспользование инструментов с кэшированием подсказокПрограммный вызов инструментовДетальная потоковая передача инструментов
Управление контекстом
Контекстные окнаСжатиеРедактирование контекстаКэширование подсказокСистемные сообщения в середине разговораСоздание режима оркестрацииДиагностика кэша (бета)Подсчёт токенов
Работа с файлами
Files APIПоддержка PDF
Навыки
ОбзорБыстрый стартРекомендацииНавыки для предприятийНавыки в API
MCP
Удалённые серверы MCPКоннектор MCP
Claude на облачных платформах
Amazon BedrockAmazon Bedrock (устаревшая версия)Claude Platform на AWSGoogle CloudMicrosoft Foundry

Log in
Сжатие
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Claude Platform Docs

Solutions

  • AI agents
  • Code modernization
  • Coding
  • Customer support
  • Education
  • Financial services
  • Government
  • Life sciences

Partners

  • Claude on AWS
  • Claude on Google Cloud

Learn

  • Blog
  • Courses
  • Use cases
  • Connectors
  • Customer stories
  • Engineering at Anthropic
  • Events
  • Powered by Claude
  • Service partners
  • Startups program

Company

  • Anthropic
  • Careers
  • Economic Futures
  • Research
  • News
  • Responsible Scaling Policy
  • Security and compliance
  • Transparency

Learn

  • Blog
  • Courses
  • Use cases
  • Connectors
  • Customer stories
  • Engineering at Anthropic
  • Events
  • Powered by Claude
  • Service partners
  • Startups program

Help and security

  • Availability
  • Status
  • Support
  • Discord

Terms and policies

  • Privacy policy
  • Responsible disclosure policy
  • Terms of service: Commercial
  • Terms of service: Consumer
  • Usage policy
Сообщения/Управление контекстом

Компактизация

Серверная компактизация контекста для управления длинными разговорами, приближающимися к пределам контекстного окна.


Эта функция соответствует требованиям Zero Data Retention (ZDR) (нулевого хранения данных). Если у вашей организации действует соглашение ZDR, данные, отправленные через эту функцию, не сохраняются после возврата ответа API.



Серверная компактизация — рекомендуемая стратегия управления контекстом в длительных разговорах и агентных рабочих процессах. Она автоматически управляет контекстом без необходимости писать клиентский код для суммаризации.

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



Подробнее о том, почему длинные контексты ухудшают качество и как помогает компактизация, см. в статье Effective context engineering.

Это идеально подходит для:

  • Многоходовых разговоров в формате чата, где вы хотите, чтобы пользователи использовали один чат в течение длительного времени
  • Ориентированных на задачи подсказок, требующих большого объёма последующей работы (часто с использованием инструментов), которая может превысить контекстное окно


Компактизация находится в стадии бета-тестирования. Включите бета-заголовок compact-2026-01-12 в ваши запросы к API, чтобы использовать эту функцию.

Поддерживаемые модели

Компактизация поддерживается в следующих моделях:

  • Claude Fable 5 (claude-fable-5)
  • Claude Mythos 5 (claude-mythos-5)
  • Claude Mythos Preview (claude-mythos-preview)
  • Claude Opus 4.8 (claude-opus-4-8)
  • Claude Opus 4.7 (claude-opus-4-7)
  • Claude Opus 4.6 (claude-opus-4-6)
  • Claude Sonnet 5 (claude-sonnet-5)
  • Claude Sonnet 4.6 (claude-sonnet-4-6)

Как работает компактизация

Когда компактизация включена, Claude автоматически суммирует ваш разговор, когда он достигает настроенного порога токенов. API:

  1. Определяет, когда входные токены достигают указанного вами порога срабатывания.
  2. Генерирует резюме текущего разговора.
  3. Создаёт блок compaction, содержащий резюме.
  4. Продолжает ответ с компактизированным контекстом.

При последующих запросах добавьте ответ к вашим сообщениям. API автоматически отбрасывает все блоки содержимого, предшествующие блоку compaction, продолжая разговор с резюме.

Процесс компактизации: когда входные токены достигают порога, Claude записывает резюме в блок компактизации и продолжает

Базовое использование

Включите компактизацию, добавив стратегию compact_20260112 в context_management.edits в вашем запросе к Messages API.

client = anthropic.Anthropic()

messages = [{"role": "user", "content": "Help me build a website"}]

response = client.beta.messages.create(
    betas=["compact-2026-01-12"],
    model="claude-opus-4-8",
    max_tokens=4096,
    messages=messages,
    context_management={"edits": [{"type": "compact_20260112"}]},
)

# Добавьте ответ (включая любой блок компактизации), чтобы продолжить разговор
messages.append({"role": "assistant", "content": response.content})

Параметры

ПараметрТипПо умолчаниюОписание
typestringОбязательныйДолжен быть "compact_20260112"
triggerobject{"type": "input_tokens", "value": 150000}Когда запускать компактизацию. input_tokens — единственный поддерживаемый тип триггера. value должно быть не менее 50 000 токенов.
pause_after_compactionbooleanfalseПриостанавливать ли выполнение после генерации резюме компактизации
instructionsstringnullПользовательская подсказка для суммаризации. Полностью заменяет подсказку по умолчанию, если указана.

Настройка триггера

Настройте момент срабатывания компактизации с помощью параметра trigger:

client = anthropic.Anthropic()
messages = [{"role": "user", "content": "Hello, Claude"}]
response = client.beta.messages.create(
    betas=["compact-2026-01-12"],
    model="claude-opus-4-8",
    max_tokens=4096,
    messages=messages,
    context_management={
        "edits": [
            {
                "type": "compact_20260112",
                "trigger": {"type": "input_tokens", "value": 150000},
            }
        ]
    },
)

Пользовательские инструкции для суммаризации

Подсказка для суммаризации по умолчанию различается в зависимости от модели. Каждая подсказка по умолчанию инструктирует Claude написать резюме внутри тегов <summary></summary> с информацией, необходимой для продолжения задачи в будущем контекстном окне. Например, некоторые модели используют следующую подсказку:

You have written a partial transcript for the initial task above. Please write a summary of the transcript. The purpose of this summary is to provide continuity so you can continue to make progress towards solving the task in a future context, where the raw history above may not be accessible and will be replaced with this summary. Write down anything that would be helpful, including the state, next steps, learnings etc. You must wrap your summary in a <summary></summary> block.

Вы можете предоставить пользовательские инструкции через параметр instructions. Пользовательские инструкции не дополняют подсказку по умолчанию. Они полностью её заменяют:

client = anthropic.Anthropic()
messages = [{"role": "user", "content": "Hello, Claude"}]
response = client.beta.messages.create(
    betas=["compact-2026-01-12"],
    model="claude-opus-4-8",
    max_tokens=4096,
    messages=messages,
    context_management={
        "edits": [
            {
                "type": "compact_20260112",
                "instructions": "Focus on preserving code snippets, variable names, and technical decisions.",
            }
        ]
    },
)

Приостановка после компактизации

Используйте pause_after_compaction, чтобы приостановить API после генерации резюме компактизации. Это позволяет вам добавить дополнительные блоки содержимого (например, сохранить недавние сообщения или конкретные сообщения с инструкциями) до того, как API продолжит формировать ответ.

Когда этот параметр включён, API возвращает сообщение с причиной остановки compaction после генерации блока компактизации:

client = anthropic.Anthropic()
messages = [{"role": "user", "content": "Hello, Claude"}]
response = client.beta.messages.create(
    betas=["compact-2026-01-12"],
    model="claude-opus-4-8",
    max_tokens=4096,
    messages=messages,
    context_management={
        "edits": [{"type": "compact_20260112", "pause_after_compaction": True}]
    },
)

# Проверяем, вызвало ли уплотнение паузу
if response.stop_reason == "compaction":
    # Ответ содержит только блок уплотнения
    messages.append({"role": "assistant", "content": response.content})

    # Продолжаем запрос
    response = client.beta.messages.create(
        betas=["compact-2026-01-12"],
        model="claude-opus-4-8",
        max_tokens=4096,
        messages=messages,
        context_management={"edits": [{"type": "compact_20260112"}]},
    )

Соблюдение общего бюджета токенов

Когда модель работает над длительными задачами с множеством итераций использования инструментов, общее потребление токенов может значительно возрасти. Вы можете объединить pause_after_compaction со счётчиком компактизаций, чтобы оценивать совокупное использование и корректно завершать задачу при достижении бюджета.

Этот пример представлен только на языках SDK: его ценность — в логике отслеживания бюджета вокруг запроса. Сам запрос объединяет trigger из раздела Настройка триггера с pause_after_compaction из раздела Приостановка после компактизации.

client = anthropic.Anthropic()
messages = [{"role": "user", "content": "Hello, Claude"}]
TRIGGER_THRESHOLD = 100_000
TOTAL_TOKEN_BUDGET = 3_000_000
n_compactions = 0

response = client.beta.messages.create(
    betas=["compact-2026-01-12"],
    model="claude-opus-4-8",
    max_tokens=4096,
    messages=messages,
    context_management={
        "edits": [
            {
                "type": "compact_20260112",
                "trigger": {"type": "input_tokens", "value": TRIGGER_THRESHOLD},
                "pause_after_compaction": True,
            }
        ]
    },
)

if response.stop_reason == "compaction":
    n_compactions += 1
    messages.append({"role": "assistant", "content": response.content})

    # Оценить общее число потреблённых токенов; при превышении бюджета предложить завершение
    if n_compactions * TRIGGER_THRESHOLD >= TOTAL_TOKEN_BUDGET:
        messages.append(
            {
                "role": "user",
                "content": "Please wrap up your current work and summarize the final state.",
            }
        )

Работа с блоками компактизации

Когда компактизация срабатывает, API возвращает блок compaction в начале ответа ассистента.

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

Output
{
  "content": [
    {
      "type": "compaction",
      "content": "Summary of the conversation: The user requested help building a web scraper..."
    },
    {
      "type": "text",
      "text": "Based on our conversation so far..."
    }
  ]
}

Передача блоков компактизации обратно

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

client = anthropic.Anthropic()
messages = [{"role": "user", "content": "Hello, Claude"}]
response = client.beta.messages.create(
    betas=["compact-2026-01-12"],
    model="claude-opus-4-8",
    max_tokens=4096,
    messages=messages,
    context_management={"edits": [{"type": "compact_20260112"}]},
)
# После получения ответа с блоком уплотнения
messages.append({"role": "assistant", "content": response.content})

# Продолжите разговор
messages.append({"role": "user", "content": "Now add error handling"})

response = client.beta.messages.create(
    betas=["compact-2026-01-12"],
    model="claude-opus-4-8",
    max_tokens=4096,
    messages=messages,
    context_management={"edits": [{"type": "compact_20260112"}]},
)

Когда API получает блок compaction, все блоки содержимого перед ним игнорируются. Вы можете либо:

  • Оставить исходные сообщения в вашем списке и позволить API самостоятельно удалить компактизированное содержимое
  • Вручную удалить компактизированные сообщения и включить только блок компактизации и всё, что следует за ним

Потоковая передача

Блок компактизации передаётся потоком иначе, чем текстовые блоки. Вы получаете событие content_block_start, за которым следует одно событие content_block_delta с полным содержимым резюме (без промежуточной потоковой передачи), а затем событие content_block_stop.

client = anthropic.Anthropic()
messages = [{"role": "user", "content": "Hello, Claude"}]

with client.beta.messages.stream(
    betas=["compact-2026-01-12"],
    model="claude-opus-4-8",
    max_tokens=4096,
    messages=messages,
    context_management={"edits": [{"type": "compact_20260112"}]},
) as stream:
    for event in stream:
        if event.type == "content_block_start":
            if event.content_block.type == "compaction":
                print("Compaction started...")
            elif event.content_block.type == "text":
                print("Text response started...")

        elif event.type == "content_block_delta":
            if event.delta.type == "compaction_delta":
                print(f"Compaction complete: {len(event.delta.content or '')} chars")
            elif event.delta.type == "text_delta":
                print(event.delta.text, end="", flush=True)

    # Получить итоговое накопленное сообщение
    message = stream.get_final_message()
    messages.append({"role": "assistant", "content": message.content})

Кэширование подсказок

Компактизация хорошо работает с кэшированием подсказок. Вы можете добавить точку останова cache_control на блоки компактизации, чтобы кэшировать суммированное содержимое.

{
  "role": "assistant",
  "content": [
    {
      "type": "compaction",
      "content": "[summary text]",
      "cache_control": { "type": "ephemeral" }
    },
    {
      "type": "text",
      "text": "Based on our conversation..."
    }
  ]
}

Максимизация попаданий в кэш с помощью системных подсказок

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

Чтобы максимизировать частоту попаданий в кэш, добавьте точку останова cache_control в конце вашей системной подсказки. Это позволяет кэшировать системную подсказку отдельно от разговора, поэтому при компактизации:

  • Кэш системной подсказки остаётся действительным и считывается из кэша
  • Только резюме компактизации необходимо записать как новую запись кэша
client = anthropic.Anthropic()
messages = [{"role": "user", "content": "Hello, Claude"}]
response = client.beta.messages.create(
    betas=["compact-2026-01-12"],
    model="claude-opus-4-8",
    max_tokens=4096,
    system=[
        {
            "type": "text",
            "text": "You are a helpful coding assistant...",
            "cache_control": {
                "type": "ephemeral"
            },  # Cache the system prompt separately
        }
    ],
    messages=messages,
    context_management={"edits": [{"type": "compact_20260112"}]},
)

Это позволяет сохранять длинные системные подсказки в кэше на протяжении нескольких событий компактизации в течение разговора.

Понимание использования

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

Output
{
  "usage": {
    "input_tokens": 23000,
    "output_tokens": 1000,
    "iterations": [
      {
        "type": "compaction",
        "input_tokens": 180000,
        "output_tokens": 3500
      },
      {
        "type": "message",
        "input_tokens": 23000,
        "output_tokens": 1000
      }
    ]
  }
}

Массив iterations показывает использование для каждой итерации сэмплирования. Когда происходит компактизация, вы увидите итерацию compaction, за которой следует основная итерация message. Верхнеуровневые input_tokens и output_tokens в этом примере точно совпадают с итерацией message, поскольку есть только одна итерация, не связанная с компактизацией. Количество токенов последней итерации отражает эффективный размер контекста после компактизации.



Верхнеуровневые input_tokens и output_tokens не включают использование итерации компактизации. Они отражают сумму всех итераций, не связанных с компактизацией. Чтобы рассчитать общее количество токенов, потреблённых и тарифицированных для запроса, просуммируйте все записи в массиве usage.iterations.

Если вы ранее полагались на usage.input_tokens и usage.output_tokens для отслеживания затрат или аудита, вам потребуется обновить логику отслеживания, чтобы агрегировать данные по usage.iterations, когда компактизация включена. При включённой бета-версии компактизации каждый ответ включает usage.iterations, даже если компактизация не произошла. Запись compaction появляется только тогда, когда новая компактизация запускается во время запроса. Повторное применение предыдущего блока compaction не влечёт дополнительных затрат на компактизацию, и верхнеуровневые поля использования остаются точными в этом случае.

Сочетание с другими функциями

Серверные инструменты

При использовании серверных инструментов (таких как веб-поиск) триггер компактизации проверяется в начале каждой итерации сэмплирования. Компактизация может происходить несколько раз в рамках одного запроса в зависимости от вашего порога срабатывания и объёма сгенерированного вывода.

Подсчёт токенов

Конечная точка подсчёта токенов (/v1/messages/count_tokens) применяет существующие блоки compaction в вашей подсказке, но не запускает новые компактизации. Используйте её, чтобы проверить эффективное количество токенов после предыдущих компактизаций:

client = anthropic.Anthropic()
messages = [{"role": "user", "content": "Hello, Claude"}]
count_response = client.beta.messages.count_tokens(
    betas=["compact-2026-01-12"],
    model="claude-opus-4-8",
    messages=messages,
    context_management={"edits": [{"type": "compact_20260112"}]},
)

print(f"Current tokens: {count_response.input_tokens}")
print(f"Original tokens: {count_response.context_management.original_input_tokens}")

Примеры

Вот полный пример длительного разговора с компактизацией:

client = anthropic.Anthropic()

messages: list[dict] = []


def chat(user_message: str) -> str:
    messages.append({"role": "user", "content": user_message})

    response = client.beta.messages.create(
        betas=["compact-2026-01-12"],
        model="claude-opus-4-8",
        max_tokens=4096,
        messages=messages,
        context_management={
            "edits": [
                {
                    "type": "compact_20260112",
                    "trigger": {"type": "input_tokens", "value": 100000},
                }
            ]
        },
    )

    # Добавляем ответ (блоки уплотнения включаются автоматически)
    messages.append({"role": "assistant", "content": response.content})

    # Возвращаем текстовое содержимое
    return next(block.text for block in response.content if block.type == "text")


# Запускаем длинный разговор
print(chat("Help me build a Python web scraper"))
print(chat("Add support for JavaScript-rendered pages"))
print(chat("Now add rate limiting and error handling"))
# Продолжайте вызывать chat() столько, сколько требует разговор

Вот пример, использующий pause_after_compaction для сохранения предыдущего обмена репликами и текущего сообщения пользователя (всего три сообщения) дословно вместо их суммаризации:

from typing import Any

client = anthropic.Anthropic()

messages: list[dict[str, Any]] = []


def chat(user_message: str) -> str:
    messages.append({"role": "user", "content": user_message})

    response = client.beta.messages.create(
        betas=["compact-2026-01-12"],
        model="claude-opus-4-8",
        max_tokens=4096,
        messages=messages,
        context_management={
            "edits": [
                {
                    "type": "compact_20260112",
                    "trigger": {"type": "input_tokens", "value": 100000},
                    "pause_after_compaction": True,
                }
            ]
        },
    )

    # Проверяем, произошло ли уплотнение и была ли приостановка
    if response.stop_reason == "compaction":
        # Получаем блок уплотнения из ответа
        compaction_block = response.content[0]

        # Сохраняем предыдущий обмен + текущее сообщение пользователя (3 сообщения),
        # включив их после блока уплотнения
        preserved_messages = messages[-3:] if len(messages) >= 3 else messages

        # Формируем новый список сообщений: уплотнение + сохранённые сообщения
        new_assistant_content = [compaction_block]
        messages_after_compaction = [
            {"role": "assistant", "content": new_assistant_content}
        ] + preserved_messages

        # Продолжаем запрос с уплотнённым контекстом + сохранёнными сообщениями
        response = client.beta.messages.create(
            betas=["compact-2026-01-12"],
            model="claude-opus-4-8",
            max_tokens=4096,
            messages=messages_after_compaction,
            context_management={"edits": [{"type": "compact_20260112"}]},
        )

        # Обновляем наш список сообщений, чтобы отразить уплотнение
        messages.clear()
        messages.extend(messages_after_compaction)

    # Добавляем финальный ответ
    messages.append({"role": "assistant", "content": response.content})

    # Возвращаем текстовое содержимое
    return next(block.text for block in response.content if block.type == "text")


# Запускаем длинный диалог
print(chat("Help me build a Python web scraper"))
print(chat("Add support for JavaScript-rendered pages"))
print(chat("Now add rate limiting and error handling"))
# Продолжаем вызывать chat() столько, сколько требует диалог

Текущие ограничения

  • Та же модель для суммаризации: Модель, указанная в вашем запросе, используется для суммаризации. Нет возможности использовать другую (например, более дешёвую) модель для резюме.

  • Компактизация может завершиться неудачей, когда определены инструменты: Когда ваш запрос включает tools, модель иногда вызывает инструмент во время внутреннего шага суммаризации вместо написания резюме. Когда это происходит, ответ содержит блок compaction с content: null. Чтобы предотвратить это, задайте в instructions подсказку, которая явно указывает модели не вызывать инструменты, например:

    Summarize the transcript inside <summary></summary> tags. Include relevant information in the summary for continuing the task in the next context window. Do not call any tools while writing this summary; respond with text only.

Следующие шаги


Редактирование контекста

Автоматически управляйте контекстом разговора по мере его роста с помощью редактирования контекста.

Контекстные окна

Узнайте о размерах контекстных окон и стратегиях управления ими.


Руководство по компактизации памяти сессии


Изучите практическую реализацию, которая управляет длительными разговорами с мгновенной компактизацией памяти сессии, используя фоновые потоки и кэширование подсказок.

Was this page helpful?

  • Поддерживаемые модели
  • Как работает компактизация
  • Базовое использование
  • Параметры
  • Настройка триггера
  • Пользовательские инструкции для суммаризации
  • Приостановка после компактизации
  • Работа с блоками компактизации
  • Передача блоков компактизации обратно
  • Потоковая передача
  • Кэширование подсказок
  • Понимание использования
  • Сочетание с другими функциями
  • Серверные инструменты
  • Подсчёт токенов
  • Примеры
  • Текущие ограничения
  • Следующие шаги