Was this page helpful?
Для большинства случаев использования компактирование на стороне сервера является основной стратегией управления контекстом в долгоживущих разговорах. Стратегии на этой странице полезны для конкретных сценариев, когда вам нужен более точный контроль над тем, какой контент очищается.
Редактирование контекста позволяет вам выборочно очищать определённый контент из истории разговора по мере её роста. Это помогает оптимизировать затраты и оставаться в пределах лимитов контекстного окна. На этой странице рассматриваются:
| Подход | Где выполняется | Стратегии | Как это работает |
|---|---|---|---|
| На стороне сервера | API | Очистка результатов инструментов (clear_tool_uses_20250919)Очистка блоков мышления ( clear_thinking_20251015) | Применяется до того, как запрос достигнет Claude. Очищает определённый контент из истории разговора. Каждая стратегия может быть настроена независимо. |
| На стороне клиента | SDK | Компактирование | Доступно в Python и TypeScript SDKs при использовании tool_runner. Генерирует резюме и заменяет полную историю разговора. См. Компактирование на стороне клиента ниже. |
Редактирование контекста в настоящее время находится в бета-версии с поддержкой очистки результатов инструментов и очистки блоков мышления. Чтобы включить его, используйте заголовок бета-версии context-management-2025-06-27 в ваших запросах API.
Поделитесь отзывом об этой функции через форму обратной связи.
Стратегия clear_tool_uses_20250919 очищает результаты инструментов, когда контекст разговора растёт сверх вашего настроенного порога. Это особенно полезно для агентских рабочих процессов с интенсивным использованием инструментов. Старые результаты инструментов (такие как содержимое файлов или результаты поиска) больше не нужны после того, как Claude их обработал.
При активации API автоматически очищает самые старые результаты инструментов в хронологическом порядке. Каждый очищенный результат заменяется текстом-заполнителем, чтобы Claude знал, что он был удалён. По умолчанию очищаются только результаты инструментов. Вы можете дополнительно очистить как результаты инструментов, так и вызовы инструментов (параметры использования инструмента), установив clear_tool_inputs в true.
Стратегия clear_thinking_20251015 управляет блоками thinking в разговорах, когда включено расширенное мышление. Эта стратегия даёт вам контроль над сохранением мышления: вы можете выбрать сохранение большего количества блоков мышления для поддержания непрерывности рассуждений или очищать их более агрессивно, чтобы сэкономить пространство контекста.
Поведение по умолчанию: Когда расширенное мышление включено без настройки стратегии clear_thinking_20251015, API автоматически сохраняет только блоки мышления из последнего хода ассистента (эквивалентно keep: {type: "thinking_turns", value: 1}).
Чтобы максимизировать попадания в кэш, сохраните все блоки мышления, установив keep: "all".
Ход разговора ассистента может включать несколько блоков контента (например, при использовании инструментов) и несколько блоков мышления (например, с чередующимся мышлением).
Редактирование контекста применяется на стороне сервера до того, как запрос достигнет Claude. Ваше клиентское приложение сохраняет полную, неизменённую историю разговора. Вам не нужно синхронизировать состояние вашего клиента с отредактированной версией. Продолжайте управлять полной историей разговора локально, как обычно.
Взаимодействие редактирования контекста с кэшированием запросов варьируется в зависимости от стратегии:
Очистка результатов инструментов: Инвалидирует кэшированные префиксы запросов при очистке контента. Чтобы учесть это, очищайте достаточно токенов, чтобы инвалидация кэша была целесообразной. Используйте параметр clear_at_least для обеспечения минимального количества очищаемых токенов каждый раз. Вы будете нести расходы на запись в кэш каждый раз при очистке контента, но последующие запросы могут повторно использовать вновь кэшированный префикс.
Очистка блоков мышления: Когда блоки мышления сохраняются в контексте (не очищаются), кэш запроса сохраняется, что позволяет попадать в кэш и снижает затраты на входные токены. Когда блоки мышления очищаются, кэш инвалидируется в точке, где происходит очистка. Настройте параметр keep в зависимости от того, хотите ли вы приоритизировать производительность кэша или доступность контекстного окна.
Редактирование контекста доступно на:
claude-opus-4-6)claude-opus-4-5-20251101)claude-opus-4-1-20250805)claude-opus-4-20250514)claude-sonnet-4-5-20250929)claude-sonnet-4-20250514)claude-haiku-4-5-20251001)Самый простой способ включить очистку результатов инструментов — указать только тип стратегии. Все остальные параметры конфигурации используют значения по умолчанию:
Вы можете настроить поведение очистки результатов инструментов с помощью дополнительных параметров:
Включите очистку блоков мышления для эффективного управления контекстом и кэшированием запросов при включённом расширенном мышлении:
Стратегия clear_thinking_20251015 поддерживает следующую конфигурацию:
| Параметр конфигурации | По умолчанию | Описание |
|---|---|---|
keep | {type: "thinking_turns", value: 1} | Определяет, сколько последних ходов ассистента с блоками мышления сохранять. Используйте {type: "thinking_turns", value: N}, где N должно быть > 0, чтобы сохранить последние N ходов, или "all", чтобы сохранить все блоки мышления. |
Примеры конфигураций:
// Keep thinking blocks from the last 3 assistant turns
{
"type": "clear_thinking_20251015",
"keep": {
"type": "thinking_turns",
"value": 3
}
}
// Keep all thinking blocks (maximizes cache hits)
{
"type": "clear_thinking_20251015",
"keep": "all"
}Вы можете использовать очистку блоков мышления и очистку результатов инструментов вместе:
При использовании нескольких стратегий стратегия clear_thinking_20251015 должна быть указана первой в массиве edits.
| Параметр конфигурации | По умолчанию | Описание |
|---|---|---|
trigger | 100 000 входных токенов | Определяет, когда активируется стратегия редактирования контекста. Как только запрос превышает этот порог, начнётся очистка. Вы можете указать это значение либо в input_tokens, либо в tool_uses. |
keep | 3 использования инструментов | Определяет, сколько последних пар использования/результата инструмента сохранять после очистки. API удаляет самые старые взаимодействия с инструментами в первую очередь, сохраняя самые последние. |
clear_at_least | Нет | Обеспечивает минимальное количество токенов, которые очищаются каждый раз при активации стратегии. Если API не может очистить по крайней мере указанное количество, стратегия не будет применена. Это помогает определить, стоит ли разрывать кэш запроса при очистке контекста. |
exclude_tools | Нет | Список имён инструментов, использования и результаты которых никогда не должны очищаться. Полезно для сохранения важного контекста. |
Вы можете увидеть, какие редактирования контекста были применены к вашему запросу, используя поле ответа context_management, а также полезную статистику об очищенном контенте и входных токенах.
{
"id": "msg_013Zva2CMHLNnXjNJJKqJ2EF",
"type": "message",
"role": "assistant",
"content": [...],
"usage": {...},
"context_management": {
"applied_edits": [
// When using `clear_thinking_20251015`
{
"type": "clear_thinking_20251015",
"cleared_thinking_turns": 3,
"cleared_input_tokens": 15000
},
// When using `clear_tool_uses_20250919`
{
"type": "clear_tool_uses_20250919",
"cleared_tool_uses": 8,
"cleared_input_tokens": 50000
}
]
}
}Для потоковых ответов редактирования контекста будут включены в финальное событие message_delta:
{
"type": "message_delta",
"delta": {
"stop_reason": "end_turn",
"stop_sequence": null
},
"usage": {
"output_tokens": 1024
},
"context_management": {
"applied_edits": [...]
}
}Конечная точка подсчёта токенов поддерживает управление контекстом, позволяя вам предварительно просмотреть, сколько токенов будет использовать ваш запрос после применения редактирования контекста.
{
"input_tokens": 25000,
"context_management": {
"original_input_tokens": 70000
}
}Ответ показывает как финальный подсчёт токенов после применения управления контекстом (input_tokens), так и исходный подсчёт токенов до любой очистки (original_input_tokens).
Редактирование контекста можно комбинировать с инструментом памяти. Когда контекст вашего разговора приближается к настроенному порогу очистки, Claude получает автоматическое предупреждение о сохранении важной информации. Это позволяет Claude сохранять результаты инструментов или контекст в файлы памяти перед их очисткой из истории разговора.
Эта комбинация позволяет вам:
Например, в рабочем процессе редактирования файлов, где Claude выполняет много операций, Claude может суммировать завершённые изменения в файлы памяти по мере роста контекста. Когда результаты инструментов очищаются, Claude сохраняет доступ к этой информации через свою систему памяти и может продолжать работать эффективно.
Чтобы использовать обе функции вместе, включите их в ваш запрос API:
Компактирование на стороне сервера рекомендуется вместо компактирования SDK. Компактирование на стороне сервера автоматически обрабатывает управление контекстом с меньшей сложностью интеграции, лучшим расчётом использования токенов и без ограничений на стороне клиента. Используйте компактирование SDK только если вам специально нужен контроль на стороне клиента над процессом суммирования.
Компактирование доступно в Python и TypeScript SDKs при использовании метода tool_runner.
Компактирование — это функция SDK, которая автоматически управляет контекстом разговора путём генерирования резюме при чрезмерном росте использования токенов. В отличие от стратегий редактирования контекста на стороне сервера, которые очищают контент, компактирование инструктирует Claude суммировать историю разговора, а затем заменяет полную историю этим резюме. Это позволяет Claude продолжать работу над долгоживущими задачами, которые иначе превысили бы контекстное окно.
Когда компактирование включено, SDK отслеживает использование токенов после каждого ответа модели:
input_tokens + cache_creation_input_tokens + cache_read_input_tokens + output_tokens.<summary></summary>.Добавьте compaction_control к вашему вызову tool_runner:
По мере роста разговора история сообщений накапливается:
Перед компактированием (приближение к 100k токенам):
[
{ "role": "user", "content": "Analyze all files and write a report..." },
{ "role": "assistant", "content": "I'll help. Let me start by reading..." },
{ "role": "user", "content": [{ "type": "tool_result", "tool_use_id": "...", "content": "..." }] },
{ "role": "assistant", "content": "Based on file1.txt, I see..." },
{ "role": "user", "content": [{ "type": "tool_result", "tool_use_id": "...", "content": "..." }] },
{ "role": "assistant", "content": "After analyzing file2.txt..." },
// ... 50 more exchanges like this ...
]Когда токены превышают порог, SDK вводит запрос резюме и Claude генерирует резюме. Вся история затем заменяется:
После компактирования (возврат к ~2-3k токенам):
[
{
"role": "assistant",
"content": "# Task Overview\nThe user requested analysis of directory files to produce a summary report...\n\n# Current State\nAnalyzed 52 files across 3 subdirectories. Key findings documented in report.md...\n\n# Important Discoveries\n- Configuration files use YAML format\n- Found 3 deprecated dependencies\n- Test coverage at 67%\n\n# Next Steps\n1. Analyze remaining files in /src/legacy\n2. Complete final report sections...\n\n# Context to Preserve\nUser prefers markdown format with executive summary first..."
}
]Claude продолжает работу с этого резюме, как если бы это была исходная история разговора.
| Параметр | Тип | Обязательный | По умолчанию | Описание |
|---|---|---|---|---|
enabled | boolean | Да | - | Включить ли автоматическое компактирование |
context_token_threshold | number | Нет | 100 000 | Подсчёт токенов, при котором срабатывает компактирование |
model | string | Нет | Та же модель, что и основная | Модель для использования при генерировании резюме |
summary_prompt | string | Нет | См. ниже | Пользовательский запрос для генерирования резюме |
Порог определяет, когда происходит компактирование. Более низкий порог означает более частые компактирования с меньшими контекстными окнами. Более высокий порог позволяет больше контекста, но рискует достичь лимитов.
# More frequent compaction for memory-constrained scenarios
compaction_control={
"enabled": True,
"context_token_threshold": 50000
}
# Less frequent compaction when you need more context
compaction_control={
"enabled": True,
"context_token_threshold": 150000
}Вы можете использовать более быструю или дешёвую модель для генерирования резюме:
compaction_control={
"enabled": True,
"context_token_threshold": 100000,
"model": "claude-haiku-4-5"
}Вы можете предоставить пользовательский запрос для специфичных для домена потребностей. Ваш запрос должен инструктировать Claude обёртывать его резюме в теги <summary></summary>.
compaction_control={
"enabled": True,
"context_token_threshold": 100000,
"summary_prompt": """Summarize the research conducted so far, including:
- Sources consulted and key findings
- Questions answered and remaining unknowns
- Recommended next steps
Wrap your summary in <summary></summary> tags."""
}Встроенный запрос для создания резюме инструктирует Claude создать структурированное резюме продолжения, включающее:
Эта структура позволяет Claude эффективно возобновить работу без потери важного контекста или повторения ошибок.
Компактирование требует особого внимания при использовании серверных инструментов, таких как веб-поиск или веб-выборка.
При использовании серверных инструментов SDK может неправильно рассчитать использование токенов, что приведёт к срабатыванию компактирования в неправильный момент.
Например, после операции веб-поиска ответ API может показать:
{
"usage": {
"input_tokens": 63000,
"cache_read_input_tokens": 270000,
"output_tokens": 1400
}
}SDK рассчитывает общее использование как 63 000 + 270 000 = 333 000 токенов. Однако значение cache_read_input_tokens включает накопленные чтения из нескольких внутренних вызовов API, сделанных серверным инструментом, а не ваш фактический контекст разговора. Ваша реальная длина контекста может быть только 63 000 input_tokens, но SDK видит 333k и преждевременно срабатывает компактирование.
Обходные решения:
Когда компактирование срабатывает во время ожидания ответа на использование инструмента, SDK удаляет блок использования инструмента из истории сообщений перед созданием резюме. Claude повторно выдаст вызов инструмента после возобновления работы из резюме, если это всё ещё необходимо.
Включите логирование для отслеживания срабатывания компактирования:
import logging
logging.basicConfig(level=logging.INFO)
logging.getLogger("anthropic.lib.tools").setLevel(logging.INFO)
# Logs will show:
# INFO: Token usage 105000 has exceeded the threshold of 100000. Performing compaction.
# INFO: Compaction complete. New token usage: 2500Хорошие варианты использования:
Менее идеальные варианты использования:
curl https://api.anthropic.com/v1/messages \
--header "x-api-key: $ANTHROPIC_API_KEY" \
--header "anthropic-version: 2023-06-01" \
--header "content-type: application/json" \
--header "anthropic-beta: context-management-2025-06-27" \
--data '{
"model": "claude-opus-4-6",
"max_tokens": 4096,
"messages": [
{
"role": "user",
"content": "Search for recent developments in AI"
}
],
"tools": [
{
"type": "web_search_20250305",
"name": "web_search"
}
],
"context_management": {
"edits": [
{"type": "clear_tool_uses_20250919"}
]
}
}'curl https://api.anthropic.com/v1/messages \
--header "x-api-key: $ANTHROPIC_API_KEY" \
--header "anthropic-version: 2023-06-01" \
--header "content-type: application/json" \
--header "anthropic-beta: context-management-2025-06-27" \
--data '{
"model": "claude-opus-4-6",
"max_tokens": 4096,
"messages": [
{
"role": "user",
"content": "Create a simple command line calculator app using Python"
}
],
"tools": [
{
"type": "text_editor_20250728",
"name": "str_replace_based_edit_tool",
"max_characters": 10000
},
{
"type": "web_search_20250305",
"name": "web_search",
"max_uses": 3
}
],
"context_management": {
"edits": [
{
"type": "clear_tool_uses_20250919",
"trigger": {
"type": "input_tokens",
"value": 30000
},
"keep": {
"type": "tool_uses",
"value": 3
},
"clear_at_least": {
"type": "input_tokens",
"value": 5000
},
"exclude_tools": ["web_search"]
}
]
}
}'curl https://api.anthropic.com/v1/messages \
--header "x-api-key: $ANTHROPIC_API_KEY" \
--header "anthropic-version: 2023-06-01" \
--header "content-type: application/json" \
--header "anthropic-beta: context-management-2025-06-27" \
--data '{
"model": "claude-opus-4-6",
"max_tokens": 1024,
"messages": [...],
"thinking": {
"type": "enabled",
"budget_tokens": 10000
},
"context_management": {
"edits": [
{
"type": "clear_thinking_20251015",
"keep": {
"type": "thinking_turns",
"value": 2
}
}
]
}
}'response = client.beta.messages.create(
model="claude-opus-4-6",
max_tokens=1024,
messages=[...],
thinking={
"type": "enabled",
"budget_tokens": 10000
},
tools=[...],
betas=["context-management-2025-06-27"],
context_management={
"edits": [
{
"type": "clear_thinking_20251015",
"keep": {
"type": "thinking_turns",
"value": 2
}
},
{
"type": "clear_tool_uses_20250919",
"trigger": {
"type": "input_tokens",
"value": 50000
},
"keep": {
"type": "tool_uses",
"value": 5
}
}
]
}
)clear_tool_inputs | false | Контролирует, очищаются ли параметры вызова инструмента вместе с результатами инструментов. По умолчанию очищаются только результаты инструментов, а исходные вызовы инструментов Claude остаются видимыми. |
curl https://api.anthropic.com/v1/messages/count_tokens \
--header "x-api-key: $ANTHROPIC_API_KEY" \
--header "anthropic-version: 2023-06-01" \
--header "content-type: application/json" \
--header "anthropic-beta: context-management-2025-06-27" \
--data '{
"model": "claude-opus-4-6",
"messages": [
{
"role": "user",
"content": "Continue our conversation..."
}
],
"tools": [...],
"context_management": {
"edits": [
{
"type": "clear_tool_uses_20250919",
"trigger": {
"type": "input_tokens",
"value": 30000
},
"keep": {
"type": "tool_uses",
"value": 5
}
}
]
}
}'response = client.beta.messages.create(
model="claude-opus-4-6",
max_tokens=4096,
messages=[...],
tools=[
{
"type": "memory_20250818",
"name": "memory"
},
# Your other tools
],
betas=["context-management-2025-06-27"],
context_management={
"edits": [
{"type": "clear_tool_uses_20250919"}
]
}
)import anthropic
client = anthropic.Anthropic()
runner = client.beta.messages.tool_runner(
model="claude-opus-4-6",
max_tokens=4096,
tools=[...],
messages=[
{
"role": "user",
"content": "Analyze all the files in this directory and write a summary report."
}
],
compaction_control={
"enabled": True,
"context_token_threshold": 100000
}
)
for message in runner:
print(f"Tokens used: {message.usage.input_tokens}")
final = runner.until_done()