Was this page helpful?
Для большинства случаев использования серверное сжатие является основной стратегией управления контекстом в длительных разговорах. Стратегии на этой странице полезны для конкретных сценариев, где вам нужен более детальный контроль над тем, какой контент очищается.
Редактирование контекста позволяет выборочно очищать определённый контент из истории разговора по мере её роста. Помимо оптимизации затрат и соблюдения ограничений, речь идёт об активном управлении тем, что видит Claude: контекст — это конечный ресурс с убывающей отдачей, а нерелевантный контент снижает фокус модели. Редактирование контекста даёт вам детальный контроль во время выполнения над этим управлением. Для ознакомления с более широкими принципами управления контекстом см. Effective context engineering. Эта страница охватывает:
| Подход | Где выполняется | Стратегии | Как работает |
|---|---|---|---|
| Серверный | API | Очистка результатов инструментов (clear_tool_uses_20250919)Очистка блоков размышлений ( clear_thinking_20251015) | Применяется до того, как запрос достигает Claude. Очищает определённый контент из истории разговора. Каждая стратегия может быть настроена независимо. |
| Клиентский | SDK | Сжатие | Доступно в Python и TypeScript SDK при использовании tool_runner. Генерирует резюме и заменяет полную историю разговора. См. Клиентское сжатие ниже. |
Редактирование контекста в настоящее время находится в бета-версии с поддержкой очистки результатов инструментов и очистки блоков размышлений. Чтобы включить его, используйте бета-заголовок context-management-2025-06-27 в ваших API-запросах.
Поделитесь отзывами об этой функции через форму обратной связи.
This feature is eligible for Zero Data Retention (ZDR). When your organization has a ZDR arrangement, data sent through this feature is not stored after the API response is returned.
Стратегия 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-6)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" для сохранения всех блоков размышлений. |
Примеры конфигураций:
Сохранить блоки размышлений из последних 3 ходов ассистента:
{
"type": "clear_thinking_20251015",
"keep": {
"type": "thinking_turns",
"value": 3
}
}Сохранить все блоки размышлений (максимизирует попадания в кэш):
{
"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": [
// При использовании `clear_thinking_20251015`
{
"type": "clear_thinking_20251015",
"cleared_thinking_turns": 3,
"cleared_input_tokens": 15000
},
// При использовании `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 SDK при использовании метода 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 подобных обменов ...
]Когда токены превышают порог, 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 | Нет | См. ниже | Пользовательский запрос для генерации резюме |
Порог определяет, когда происходит сжатие. Более низкий порог означает более частые сжатия с меньшими контекстными окнами. Более высокий порог позволяет использовать больше контекста, но рискует достичь ограничений.
# Более частое сжатие для сценариев с ограниченной памятью
compaction_control = {"enabled": True, "context_token_threshold": 50000}
# Менее частое сжатие, когда нужно больше контекста
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"},
# Ваши другие инструменты
],
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()