一言で
Context Engineering は、AI に渡す文脈を「できるだけ少なく、でも必要なだけ多く」設計する技術。
何でも全部読ませるのではなく、目的・制約・関連ファイル・検証方法を絞って、AI が迷わず次の一手を選べる状態を作る。
良い context は量ではなく 選び方。不要な情報を減らし、必要な情報を欠かさない。
Context rot(コンテキスト劣化)
LLM は context window(コンテキストウィンドウ)が大きいほど賢くなるわけではない。情報を詰め込みすぎると、Lost in the middle(中央埋没) で重要情報が中央に埋もれたり、Recency bias(直近性バイアス) で直近の情報を過大評価したりして、判断が鈍る。
これを context rot(コンテキスト劣化) と呼ぶ。
treemap-beta
"コンテキストウィンドウ"
"賢いゾーン": 60:::smart
"鈍いゾーン": 40:::dumb
classDef smart fill:#0891b2,stroke:#67e8f9,color:#ecfeff
classDef dumb fill:#7a1748,stroke:#ff2e88,color:#ffe8f4
Context Engineering の目的は、context window を埋めることではなく、必要な情報が目立つ状態を保つこと。
Input・Cached input・Output トークン
各ターンで context window の中身は 3 種類のトークン として課金される。これを知ると、長いセッションのコストの理由が分かる。
| 種類 | 中身 | 相対コスト |
|---|---|---|
| 🟥 Input | このターンで新規送信 — prompt・ファイル・ツール結果 | 標準 |
| 🟦 Cached input | 前ターンから再送され、キャッシュから供給される文脈 | 最安(大幅割引) |
| 🟩 Output | モデルが生成して返すテキスト | 最も高い |
長い会話では window の大半が cached input(履歴が毎ターン再送される)なので、キャッシュがコストを抑える鍵。節約は output と追加する input を削ることで効く。
💡 続くターン別スライドは、各ブロックをこのトークン種別で色分けしている。
コンテキストウィンドウ:Start(turn 1)
Start はほぼ理想状態。常時必要な System/tools(skills descriptions / copilot-instructions / MCP servers)だけが入り、作業用の余白が大きい。最初のターンでは初めて送られるので、これらは Input トークン として課金される。
Input トークン(このターンで新規送信) · Free space / Buffer
treemap-beta
"コンテキストウィンドウ"
"System & tools": 10:::used
"Free space": 75:::free
"Buffer": 15:::free
classDef used fill:#7a1748,stroke:#ff2e88,color:#ffe8f4
classDef free fill:#0891b2,stroke:#67e8f9,color:#ecfeff
コンテキストウィンドウ:Custom agent(turn 1)
Custom agent に切り替えると、その agent instruction が context に追加される。System & tools も Custom Agent もこのターンで初めて送られるので、すべて Input トークン として課金される。
Input トークン(このターンで新規送信) · Free space / Buffer
treemap-beta
"コンテキストウィンドウ"
"System & tools": 10:::used
"Custom Agent": 10:::used
"Free space": 65:::free
"Buffer": 15:::free
classDef used fill:#7a1748,stroke:#ff2e88,color:#ffe8f4
classDef free fill:#0891b2,stroke:#67e8f9,color:#ecfeff
コンテキストウィンドウ:Prompt(turn 1)
Prompt を書く。たとえば「test を追加して」と頼むと、関連 skill と test 用の path instruction が読み込まれることがある。コンテキスト内の要素すべてが、このターンで初めて送られる Input トークン。
Input トークン(このターンで新規送信) · Free space / Buffer
treemap-beta
"コンテキストウィンドウ"
"System & tools": 10:::used
"Custom Agent": 10:::used
"Path instruction": 10:::used
"Skill": 10:::used
"Prompt": 10:::used
"Free space": 35:::free
"Buffer": 15:::free
classDef used fill:#7a1748,stroke:#ff2e88,color:#ffe8f4
classDef free fill:#0891b2,stroke:#67e8f9,color:#ecfeff
コンテキストウィンドウ:Sub-agent(turn 1)
agent が sub-agent を呼ぶことがある。たとえば codebase の explore、database 検索、review など。sub-agent の summary が main context に返ってくる。コンテキスト内の要素すべてが、このターンで初めて送られる Input トークン。
Input トークン(このターンで新規送信) · Free space / Buffer
treemap-beta
"コンテキストウィンドウ"
"System & tools": 10:::used
"Custom Agent": 10:::used
"Path instruction": 10:::used
"Skill": 10:::used
"Prompt": 10:::used
"Sub-agent data": 10:::used
"Free space": 25:::free
"Buffer": 15:::free
classDef used fill:#7a1748,stroke:#ff2e88,color:#ffe8f4
classDef free fill:#0891b2,stroke:#67e8f9,color:#ecfeff
コンテキストウィンドウ:Memory(turn 1)
Repo で作業を続けると、memory が生成され、必要な時に動的に読み込まれることがある。コンテキスト内の要素すべてが、依然としてこのターンの新規 Input トークン。
Input トークン(このターンで新規送信) · Free space / Buffer
treemap-beta
"コンテキストウィンドウ"
"System & tools": 10:::used
"Custom Agent": 10:::used
"Path instruction": 10:::used
"Skill": 10:::used
"Prompt": 10:::used
"Sub-agent data": 10:::used
"Memory": 10:::used
"Free space": 15:::free
"Buffer": 15:::free
classDef used fill:#7a1748,stroke:#ff2e88,color:#ffe8f4
classDef free fill:#0891b2,stroke:#67e8f9,color:#ecfeff
コンテキストウィンドウ:Output(turn 1)
LLM が応答する。返ってきた Answer は context に追加される。これは Output トークン で、Input トークンとは別の(通常は高めの)レートで課金される。
Input トークン(このターンで新規送信) · Output トークン(LLM の応答) · Free space / Buffer
treemap-beta
"コンテキストウィンドウ"
"System & tools": 10:::used
"Custom Agent": 10:::used
"Path instruction": 10:::used
"Skill": 10:::used
"Prompt": 10:::used
"Sub-agent data": 10:::used
"Memory": 10:::used
"Answer": 10:::output
"Free space": 5:::free
"Buffer": 15:::free
classDef used fill:#7a1748,stroke:#ff2e88,color:#ffe8f4
classDef output fill:#a16207,stroke:#fbbf24,color:#fef3c7
classDef free fill:#0891b2,stroke:#67e8f9,color:#ecfeff
コンテキストウィンドウ:Cache input(turn 2)
ユーザーが次のターンを始めるために新しい prompt を送る。turn 1 の全要素 ── system、tools、custom agent、prompt、sub-agent data、memory、さらに LLM の answer も ── は プロンプトキャッシュ から安価な Cache input トークン として再利用される。新規 Input トークン はこのターンの Prompt #2 だけ。
Cache input トークン(保証されない) · Input トークン(このターンで新規) · Free space / Buffer
treemap-beta
"コンテキストウィンドウ"
"System & tools": 10:::cache
"Custom Agent": 10:::cache
"Path instruction": 10:::cache
"Skill": 10:::cache
"Prompt": 10:::cache
"Sub-agent data": 10:::cache
"Memory": 10:::cache
"Answer": 10:::cache
"Prompt #2": 10:::used
"Free space": 5:::free
"Buffer": 5:::free
classDef used fill:#7a1748,stroke:#ff2e88,color:#ffe8f4
classDef cache fill:#475569,stroke:#cbd5e1,color:#f1f5f9
classDef free fill:#0891b2,stroke:#67e8f9,color:#ecfeff