Loading...
    • Руководство разработчика
    • Справочник API
    • MCP
    • Ресурсы
    • Примечания к выпуску
    Search...
    ⌘K
    Первые шаги
    Введение в ClaudeБыстрый старт
    Модели и цены
    Обзор моделейВыбор моделиЧто нового в Claude 4.6Руководство миграцииУстаревшие моделиЦены
    Разработка с Claude
    Обзор функцийИспользование Messages APIОбработка причин остановкиЛучшие практики промптирования
    Возможности модели
    Extended thinkingAdaptive thinkingУсилиеБыстрый режим (preview)Структурированные выходные данныеЦитированияПотоковая передача сообщенийПакетная обработкаПоддержка PDFРезультаты поискаМногоязычная поддержкаEmbeddingsЗрение
    Инструменты
    ОбзорКак реализовать использование инструментовИнструмент веб-поискаИнструмент веб-загрузкиИнструмент выполнения кодаИнструмент памятиИнструмент BashИнструмент управления компьютеромИнструмент текстового редактора
    Инфраструктура инструментов
    Поиск инструментовПрограммный вызов инструментовПотоковая передача инструментов с детализацией
    Управление контекстом
    Контекстные окнаСжатиеРедактирование контекстаКэширование промптовПодсчет токенов
    Файлы и ресурсы
    Files API
    Agent Skills
    ОбзорБыстрый стартЛучшие практикиSkills для предприятийИспользование Skills с API
    Agent SDK
    ОбзорБыстрый стартTypeScript SDKTypeScript V2 (preview)Python SDKРуководство миграции
    MCP в API
    MCP коннекторУдаленные MCP серверы
    Claude на платформах третьих сторон
    Amazon BedrockMicrosoft FoundryVertex AI
    Инженерия промптов
    ОбзорГенератор промптовИспользование шаблонов промптовУлучшитель промптовБудьте ясны и прямолинейныИспользуйте примеры (многошаговое промптирование)Дайте Claude думать (CoT)Используйте XML тегиДайте Claude роль (системные промпты)Цепочка сложных промптовСоветы для длинного контекстаСоветы для Extended thinking
    Тестирование и оценка
    Определение критериев успехаРазработка тестовых случаевИспользование инструмента оценкиСнижение задержки
    Укрепление защиты
    Снижение галлюцинацийУвеличение согласованности выходных данныхСмягчение jailbreaksПотоковая передача отказовСнижение утечки промптаДержите Claude в образе
    Администрирование и мониторинг
    Обзор Admin APIРезидентность данныхРабочие пространстваUsage and Cost APIClaude Code Analytics APIZero Data Retention
    Console
    Log in
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...

    Solutions

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

    Partners

    • Amazon Bedrock
    • Google Cloud's Vertex AI

    Learn

    • Blog
    • Catalog
    • 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
    • Catalog
    • 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
    Управление контекстом

    Сжатие контекста

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

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

    Сжатие контекста расширяет эффективную длину контекста для долгосрочных диалогов и задач путём автоматического суммирования старого контекста при приближении к пределу контекстного окна. Это идеально подходит для:

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

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

    This feature is in beta and is not covered by Zero Data Retention (ZDR) arrangements. Beta features are excluded from ZDR.

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

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

    • Claude Opus 4.6 (claude-opus-4-6)

    Как работает сжатие контекста

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

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

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

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

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

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

    curl https://api.anthropic.com/v1/messages \
         --header "x-api-key: $ANTHROPIC_API_KEY" \
         --header "anthropic-version: 2023-06-01" \
         --header "anthropic-beta: compact-2026-01-12" \
         --header "content-type: application/json" \
         --data \
    '{
        "model": "claude-opus-4-6",
        "max_tokens": 4096,
        "messages": [
            {
                "role": "user",
                "content": "Help me build a website"
            }
        ],
        "context_management": {
            "edits": [
                {
                    "type": "compact_20260112"
                }
            ]
        }
    }'

    Параметры

    ПараметрТипПо умолчаниюОписание
    typestringОбязательноДолжно быть "compact_20260112"
    triggerobject150 000 токеновКогда запустить сжатие контекста. Должно быть не менее 50 000 токенов.
    pause_after_compactionbooleanfalseСледует ли приостановить работу после создания сводки сжатия контекста
    instructionsstringnullПользовательская подсказка суммирования. Полностью заменяет подсказку по умолчанию при предоставлении.

    Конфигурация триггера

    Настройте, когда запускается сжатие контекста, используя параметр trigger:

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

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

    По умолчанию сжатие контекста использует следующую подсказку суммирования:

    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 для полной замены этой подсказки. Пользовательские инструкции не дополняют значение по умолчанию; они полностью его заменяют:

    response = client.beta.messages.create(
        betas=["compact-2026-01-12"],
        model="claude-opus-4-6",
        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 после создания блока сжатия контекста:

    response = client.beta.messages.create(
        betas=["compact-2026-01-12"],
        model="claude-opus-4-6",
        max_tokens=4096,
        messages=messages,
        context_management={
            "edits": [{"type": "compact_20260112", "pause_after_compaction": True}]
        },
    )
    
    # Check if compaction triggered a pause
    if response.stop_reason == "compaction":
        # Response contains only the compaction block
        messages.append({"role": "assistant", "content": response.content})
    
        # Continue the request
        response = client.beta.messages.create(
            betas=["compact-2026-01-12"],
            model="claude-opus-4-6",
            max_tokens=4096,
            messages=messages,
            context_management={"edits": [{"type": "compact_20260112"}]},
        )

    Обеспечение общего бюджета токенов

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

    Python
    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-6",
        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})
    
        # Estimate total tokens consumed; prompt wrap-up if over budget
        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 в начале ответа ассистента.

    Долгосрочный диалог может привести к множественным сжатиям контекста. Последний блок сжатия контекста отражает финальное состояние подсказки, заменяя контент до него созданной сводкой.

    {
      "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 при последующих запросах для продолжения диалога с сокращённой подсказкой. Самый простой подход — добавить весь контент ответа к вашим сообщениям:

    # After receiving a response with a compaction block
    messages.append({"role": "assistant", "content": response.content})
    
    # Continue the conversation
    messages.append({"role": "user", "content": "Now add error handling"})
    
    response = client.beta.messages.create(
        betas=["compact-2026-01-12"],
        model="claude-opus-4-6",
        max_tokens=4096,
        messages=messages,
        context_management={"edits": [{"type": "compact_20260112"}]},
    )

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

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

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

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

    import anthropic
    
    client = anthropic.Anthropic()
    
    with client.beta.messages.stream(
        betas=["compact-2026-01-12"],
        model="claude-opus-4-6",
        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)} chars")
                elif event.delta.type == "text_delta":
                    print(event.delta.text, end="", flush=True)
    
        # Get the final accumulated message
        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 в конце вашей системной подсказки. Это сохраняет системную подсказку кэшированной отдельно от диалога, поэтому при сжатии контекста:

    • Кэш системной подсказки остаётся действительным и читается из кэша
    • Только сводка сжатия контекста должна быть записана как новая запись кэша
    response = client.beta.messages.create(
        betas=["compact-2026-01-12"],
        model="claude-opus-4-6",
        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 возвращает подробную информацию об использовании в ответе:

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

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

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

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

    Комбинирование с другими функциями

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

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

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

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

    count_response = client.beta.messages.count_tokens(
        betas=["compact-2026-01-12"],
        model="claude-opus-4-6",
        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}")

    Примеры

    Вот полный пример долгосрочного диалога со сжатием контекста:

    import anthropic
    
    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-6",
            max_tokens=4096,
            messages=messages,
            context_management={
                "edits": [
                    {
                        "type": "compact_20260112",
                        "trigger": {"type": "input_tokens", "value": 100000},
                    }
                ]
            },
        )
    
        # Append response (compaction blocks are automatically included)
        messages.append({"role": "assistant", "content": response.content})
    
        # Return the text content
        return next(block.text for block in response.content if block.type == "text")
    
    
    # Run a long conversation
    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"))
    # ... continue as long as needed

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

    import anthropic
    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-6",
            max_tokens=4096,
            messages=messages,
            context_management={
                "edits": [
                    {
                        "type": "compact_20260112",
                        "trigger": {"type": "input_tokens", "value": 100000},
                        "pause_after_compaction": True,
                    }
                ]
            },
        )
    
        # Check if compaction occurred and paused
        if response.stop_reason == "compaction":
            # Get the compaction block from the response
            compaction_block = response.content[0]
    
            # Preserve the last 2 messages (1 user + 1 assistant turn)
            # by including them after the compaction block
            preserved_messages = messages[-2:] if len(messages) >= 2 else messages
    
            # Build new message list: compaction + preserved messages
            new_assistant_content = [compaction_block]
            messages_after_compaction = [
                {"role": "assistant", "content": new_assistant_content}
            ] + preserved_messages
    
            # Continue the request with the compacted context + preserved messages
            response = client.beta.messages.create(
                betas=["compact-2026-01-12"],
                model="claude-opus-4-6",
                max_tokens=4096,
                messages=messages_after_compaction,
                context_management={"edits": [{"type": "compact_20260112"}]},
            )
    
            # Update our message list to reflect the compaction
            messages.clear()
            messages.extend(messages_after_compaction)
    
        # Append the final response
        messages.append({"role": "assistant", "content": response.content})
    
        # Return the text content
        return next(block.text for block in response.content if block.type == "text")
    
    
    # Run a long conversation
    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"))
    # ... continue as long as needed

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

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

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

    Справочник по сжатию контекста

    Изучите практические примеры и реализации в справочнике.

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

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

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

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

    Was this page helpful?

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