原典: Context editing / 日本語版
一行要約
会話履歴から古い tool_result ブロックと古い thinking ブロックを選択的に消すサーバサイド機構。compaction と違って要約せず、該当ブロックだけを落とす。長い会話の context 管理の主役は server-side compaction(compaction)で、こちらは何を消すかを細かく制御したい場面向けと原典自身が位置づけている。
要点
beta header: context-management-2025-06-27
Context editing is applied server-side before the prompt reaches Claude. Your client application maintains the full, unmodified conversation history. You do not need to sync your client state with the edited version.
context editing はサーバ側で、プロンプトが Claude に届く前に適用される。クライアントのアプリケーションは、完全で手を加えていない会話履歴を保持する。クライアントの状態を編集後の版と同期させる必要はない。
クライアントは完全な履歴を持ち続ける。 削るのはサーバ側で、送信されたものに対して行われる。
On Claude Fable 5.1, Claude Opus 5.5, and Claude Sonnet 5.5, server-side context management never invalidates thinking blocks. Client-side edits to earlier turns can invalidate the thinking blocks in every later assistant turn.
Claude Fable 5.1・Claude Opus 5.5・Claude Sonnet 5.5 では、サーバ側の context 管理が thinking ブロックを無効にすることはない。クライアント側で過去のターンを編集すると、それ以降のすべての assistant ターンの thinking ブロックが無効になりうる。
削るならサーバ側に任せる理由がここにある。 一定の日以降に作られたアカウントでは、無効になったブロックを送り返すリクエストは、捨てる設定をしない限り拒否される(prefix 検査。thinking に要点、詳細は未取得の preserved-thinking)。
2種類の edit
1. tool result clearing(clear_tool_uses_20250919)
ツールを多用する agentic ワークフロー向け。古い tool result を時系列順に消し、プレースホルダテキストに置き換える。
| パラメータ | 既定 | 内容 |
|---|---|---|
trigger | input tokens 100,000 | 発動条件。{type: "input_tokens", value: N} または {type: "tool_uses", value: N} |
keep | tool use 3件 | 保持する直近の tool use / result のペア数 |
clear_at_least | なし | 1回の発動で最低限消すトークン数。これだけ消せないなら、その回は適用されない(キャッシュを壊す価値があるかの判定) |
exclude_tools | なし | 決して消さないツール名のリスト |
clear_tool_inputs | false | 結果と一緒にツール呼び出しのパラメータも消すか |
2. thinking block clearing(clear_thinking_20251015)
| パラメータ | 既定 | 内容 |
|---|---|---|
keep | モデル依存 | {type: "thinking_turns", value: N} で直近 N ターン、または "all" で全部保持 |
モデル別の既定: Opus 4.5+ / Sonnet 4.6+ / Fable と Mythos の全モデルは全ターン保持。それ以前の Opus / Sonnet と Haiku(4.5 まで全部)は直近1ターンのみ。 複数のモデル階層にまたがって走るコードなら、既定に頼らず keep を明示する。
組み合わせるときの注意
When using multiple strategies, the
clear_thinking_20251015strategy must be listed first in theeditsarray.複数の戦略を使うときは、
clear_thinking_20251015をedits配列の最初に並べなければならない。
prompt caching との相互作用(重要)
| edit | キャッシュへの影響 |
|---|---|
| tool result clearing | キャッシュを無効化する |
| thinking block clearing | thinking を保持する場合はキャッシュを保つ |
→ keep: "all" はキャッシュヒットを最大化する。
レスポンス
context_management.applied_edits に、何がどれだけ消されたかが入る。ストリーミングでは最後の message_delta イベントに入る。
token counting
count_tokens エンドポイントも context_management を受け付けるので、送信前に削減量を見積もれる。context_management.original_input_tokens と input_tokens の差が節約分。
memory tool / compaction との関係
- memory tool と組み合わせられる — 消去の閾値に近づくと Claude に自動で警告が届き、消される前に tool result や context を memory ファイルへ退避できる。消えた情報は後で memory から引ける
- compaction は会話全体を要約して置き換える。context editing は要約せず、古い tool result と thinking ブロックを規則どおりにサーバ側で消す(何を消すかの規則はクライアントが
context_managementで指定する)
SDK の client-side compaction(非推奨)
原典は server-side compaction(compaction-threshold)を勧め、SDK の compaction_control はクライアント側で要約を制御する必要があるときだけにせよと言う。
- TypeScript / Ruby SDK では非推奨で、有効にすると警告が出て、将来削除される。Python SDK は v1.0 で削除した。C# / Go / Java / PHP の tool runner は client-side の
compaction_controlをサポートしていない - tool runner と server-side compaction を併用するなら、
context_managementにcompact_20260112の edit を渡す - server-side tool(web search / web fetch など)と使うと、SDK がトークン数を誤って数え、compaction が間違ったタイミングで起きることがある(原典の例は早すぎるほう。
cache_read_input_tokensに server tool 内部の複数の呼び出し分が積まれる)。回避策は、token counting エンドポイントで正確な長さを取るか、server tool を多用するなら compaction を避けるか - 向かない用途: 会話の初期の細部を正確に思い出す必要があるタスク、server-side tool を多用するワークフロー
そのまま使える具体例
最小構成:
response = client.beta.messages.create(
model="claude-opus-5",
max_tokens=4096,
messages=[{"role": "user", "content": "Search for recent AI developments"}],
tools=[{"type": "web_search_20250305", "name": "web_search"}],
betas=["context-management-2025-06-27"],
context_management={"edits": [{"type": "clear_tool_uses_20250919"}]},
)細かく制御する(exclude_tools で検索結果だけは残す):
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"],
}
]
}thinking を直近2ターンだけ残す:
context_management={
"edits": [
{"type": "clear_thinking_20251015", "keep": {"type": "thinking_turns", "value": 2}}
]
}キャッシュヒットを最大化する:
context_management={
"edits": [{"type": "clear_thinking_20251015", "keep": "all"}]
}組み合わせる(thinking を先に書く):
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}},
]
}削減量を事前に見積もる:
response = client.beta.messages.count_tokens(
model="claude-opus-5",
messages=[{"role": "user", "content": "Continue our conversation..."}],
betas=["context-management-2025-06-27"],
context_management={
"edits": [
{
"type": "clear_tool_uses_20250919",
"trigger": {"type": "input_tokens", "value": 30000},
"keep": {"type": "tool_uses", "value": 5},
}
]
},
)
print(f"Original tokens: {response.context_management.original_input_tokens}")
print(f"After clearing: {response.input_tokens}")
print(f"Savings: {response.context_management.original_input_tokens - response.input_tokens} tokens")レスポンスの形:
{
"context_management": {
"applied_edits": [
{"type": "clear_thinking_20251015", "cleared_thinking_turns": 3, "cleared_input_tokens": 15000},
{"type": "clear_tool_uses_20250919", "cleared_tool_uses": 8, "cleared_input_tokens": 50000}
]
}
}原典で言及されている関連文書
- compaction — サーバサイドの要約(こちらは選択的削除)
- manage-tool-context — 4手法の使い分けと導入順
- memory-tool — 消える情報を永続化する
- context-windows — thinking ブロックのモデル別既定
- compaction-threshold — tool runner と併用する server-side compaction(
compact_20260112) - effective-context-engineering-for-ai-agents — 理論的背景