대부분의 사용 사례에서 서버 측 압축은 장기 실행 대화에서 컨텍스트를 관리하기 위한 기본 전략입니다. 이 페이지의 전략들은 지워지는 콘텐츠에 대해 더 세밀한 제어가 필요한 특정 시나리오에 유용합니다.
컨텍스트 편집을 사용하면 대화 기록이 증가함에 따라 특정 콘텐츠를 선택적으로 지울 수 있습니다. 비용 최적화와 한도 내 유지를 넘어, 이는 Claude가 보는 것을 능동적으로 큐레이션하는 것입니다: 컨텍스트는 수익이 감소하는 유한한 자원이며, 관련 없는 콘텐츠는 모델의 집중력을 저하시킵니다. 컨텍스트 편집은 해당 큐레이션에 대한 세밀한 런타임 제어를 제공합니다. 컨텍스트 관리의 더 넓은 원칙에 대해서는 효과적인 컨텍스트 엔지니어링을 참조하세요. 이 페이지에서 다루는 내용:
| 접근 방식 | 실행 위치 | 전략 | 작동 방식 |
|---|---|---|---|
| 서버 측 | API | 도구 결과 지우기 (clear_tool_uses_20250919)생각 블록 지우기 ( clear_thinking_20251015) | 프롬프트가 Claude에 도달하기 전에 적용됩니다. 대화 기록에서 특정 콘텐츠를 지웁니다. 각 전략은 독립적으로 구성할 수 있습니다. |
| 클라이언트 측 | SDK | 압축 | tool_runner 사용 시 Python 및 TypeScript SDK에서 사용 가능합니다. 요약을 생성하고 전체 대화 기록을 대체합니다. 아래 클라이언트 측 압축을 참조하세요. |
컨텍스트 편집은 현재 도구 결과 지우기 및 생각 블록 지우기를 지원하는 베타 버전입니다. 활성화하려면 API 요청에 베타 헤더 context-management-2025-06-27을 사용하세요.
피드백 양식을 통해 이 기능에 대한 피드백을 공유하세요.
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)도구 결과 지우기를 활성화하는 가장 간단한 방법은 전략 유형만 지정하는 것입니다. 다른 모든 구성 옵션은 기본값을 사용합니다:
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
}
}
]
}
}'clear_thinking_20251015 전략은 다음 구성을 지원합니다:
| 구성 옵션 | 기본값 | 설명 |
|---|---|---|
keep | {type: "thinking_turns", value: 1} | 보존할 생각 블록이 있는 최근 어시스턴트 턴 수를 정의합니다. 마지막 N개 턴을 유지하려면 N이 0보다 커야 하는 {type: "thinking_turns", value: N}을 사용하거나, 모든 생각 블록을 유지하려면 "all"을 사용하세요. |
구성 예시:
마지막 3개 어시스턴트 턴의 생각 블록 유지:
{
"type": "clear_thinking_20251015",
"keep": {
"type": "thinking_turns",
"value": 3
}
}모든 생각 블록 유지(캐시 히트 최대화):
{
"type": "clear_thinking_20251015",
"keep": "all"
}생각 블록 지우기와 도구 결과 지우기를 함께 사용할 수 있습니다:
여러 전략을 사용할 때 clear_thinking_20251015 전략은 edits 배열에서 첫 번째로 나열되어야 합니다.
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},
},
]
},
)| 구성 옵션 | 기본값 | 설명 |
|---|---|---|
trigger | 입력 토큰 100,000개 | 컨텍스트 편집 전략이 활성화되는 시점을 정의합니다. 프롬프트가 이 임계값을 초과하면 지우기가 시작됩니다. 이 값을 input_tokens 또는 tool_uses로 지정할 수 있습니다. |
keep | 도구 사용 3개 | 지우기 후 유지할 최근 도구 사용/결과 쌍의 수를 정의합니다. API는 가장 오래된 도구 상호 작용을 먼저 제거하고 가장 최근 것을 보존합니다. |
clear_at_least | 없음 | 전략이 활성화될 때마다 최소 토큰 수가 지워지도록 합니다. API가 지정된 양 이상을 지울 수 없으면 전략이 적용되지 않습니다. 이는 컨텍스트 지우기가 프롬프트 캐시를 깨뜨릴 가치가 있는지 판단하는 데 도움이 됩니다. |
exclude_tools | 없음 | 도구 사용 및 결과가 절대 지워지지 않아야 하는 도구 이름 목록입니다. 중요한 컨텍스트를 보존하는 데 유용합니다. |
clear_tool_inputs | false | 도구 결과와 함께 도구 호출 매개변수도 지울지 여부를 제어합니다. 기본적으로 Claude의 원래 도구 호출은 표시되도록 유지하면서 도구 결과만 지워집니다. |
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": [
// ...
]
}
}토큰 계산 엔드포인트는 컨텍스트 관리를 지원하여 컨텍스트 편집이 적용된 후 프롬프트가 사용할 토큰 수를 미리 볼 수 있습니다.
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
}
}
]
}
}'{
"input_tokens": 25000,
"context_management": {
"original_input_tokens": 70000
}
}응답은 컨텍스트 관리가 적용된 후의 최종 토큰 수(input_tokens)와 지우기가 발생하기 전의 원래 토큰 수(original_input_tokens) 모두를 보여줍니다.
컨텍스트 편집은 메모리 도구와 결합할 수 있습니다. 대화 컨텍스트가 구성된 지우기 임계값에 가까워지면 Claude는 중요한 정보를 보존하라는 자동 경고를 받습니다. 이를 통해 Claude는 도구 결과나 컨텍스트가 대화 기록에서 지워지기 전에 메모리 파일에 저장할 수 있습니다.
이 조합을 통해 다음이 가능합니다:
예를 들어, Claude가 많은 작업을 수행하는 파일 편집 워크플로에서 컨텍스트가 증가함에 따라 Claude는 완료된 변경 사항을 메모리 파일에 요약할 수 있습니다. 도구 결과가 지워지면 Claude는 메모리 시스템을 통해 해당 정보에 계속 접근할 수 있으며 효과적으로 작업을 계속할 수 있습니다.
두 기능을 함께 사용하려면 API 요청에서 활성화하세요:
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"}]},
)SDK 압축보다 서버 측 압축이 권장됩니다. 서버 측 압축은 더 적은 통합 복잡성, 더 나은 토큰 사용량 계산, 클라이언트 측 제한 없이 컨텍스트 관리를 자동으로 처리합니다. 요약 프로세스에 대한 클라이언트 측 제어가 특별히 필요한 경우에만 SDK 압축을 사용하세요.
압축은 tool_runner 메서드를 사용할 때 Python 및 TypeScript SDK에서 사용 가능합니다.
압축은 토큰 사용량이 너무 커질 때 요약을 생성하여 대화 컨텍스트를 자동으로 관리하는 SDK 기능입니다. 콘텐츠를 지우는 서버 측 컨텍스트 편집 전략과 달리, 압축은 Claude에게 대화 기록을 요약하도록 지시한 다음 전체 기록을 해당 요약으로 대체합니다. 이를 통해 Claude는 컨텍스트 창을 초과할 수 있는 장기 실행 작업을 계속 수행할 수 있습니다.
압축이 활성화되면 SDK는 각 모델 응답 후 토큰 사용량을 모니터링합니다:
input_tokens + cache_creation_input_tokens + cache_read_input_tokens + output_tokens로 계산합니다.<summary></summary> 태그로 감싸진 구조화된 요약을 생성합니다.tool_runner 호출에 compaction_control을 추가하세요:
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()대화가 증가함에 따라 메시지 기록이 누적됩니다:
압축 전 (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)
# 로그에 다음과 같이 표시됩니다:
# INFO: Token usage 105000 has exceeded the threshold of 100000. Performing compaction.
# INFO: Compaction complete. New token usage: 2500적합한 사용 사례:
덜 적합한 사용 사례:
Was this page helpful?