エージェンティック・ハーネス設計ガイド — Part 2
コンテキスト設計
捨てる・書き出す・畳む。要約は、最後の手段。
コンテキストエンジニアリングとは、AIエージェントに渡す文脈——指示・ツール定義・知識・会話履歴・ツール実行結果——を、有限の予算として設計・運用することです。何を積み、何を捨て、何を外に書き出し、いつ要約するか。プロンプトの書き方ではなく、運用の設計がここでの主題になります。
Part 1で、ハーネスの6つの構成要素のひとつに「記憶・状態」を挙げました。この記事はその詳細です。
エージェントに長い仕事をさせると、必ずコンテキストの上限に当たります。そこで多くの実装が採る「とりあえず要約する」は、最も損失の大きい手を最初に使っていることになります。順序を変えるだけで、失われる情報は大きく減ります。
1.コンテキストは、有限の予算である
コンテキストは足し算ではなく、有限の枠の取り合いです。システムプロンプト、ツール定義、知識、会話履歴、そしてツール実行結果——これらがひとつの枠を分け合います。
さらに重要なのは、枠に収まっていれば良いわけではないという点です。文脈が長くなるほど、モデルが本当に必要な情報へ払う注意は薄まります。「入るから入れておく」は、精度を下げる方向に働きます。
そしてもうひとつ。エージェントが自分の残量を意識すると、仕事を早仕舞いする挙動が出ることが報告されています。枠の管理は、単なる容量の話ではなく、振る舞いの話でもあります。
2.手段は3つ、そして順序が決まっている
コンテキストを空ける手段は3つあります。重要なのは選択ではなく順序です。安く、損失の少ないものから順に使います。
なぜ順序が効くのか
要約は情報を不可逆に失います。一方、ツール結果のクリアリングは「もう一度実行すれば取り戻せるもの」だけを落とすため、失うものがありません。同じだけの枠を空けるなら、失わない手から使うのが合理的です。
3.① 捨てる — ツール結果のクリアリング
最初の手は、使い終わったツール実行結果を外科的に落とすことです。3ターン前の検索結果、5ターン前のファイル読み取り——これらは同じ操作でもう一度取得できます。会話の要約と違い、落としても情報そのものは失われません。
調整できるのは、おおむね次の5点です。
- いつ発動するか — 残量がどの水準を切ったらクリアリングを始めるか。
- 直近をいくつ残すか — 文脈の連続性が切れない最小限を残す。
- 最低どれだけ落とすか — 小刻みに消すと、そのたびにキャッシュが無効になり、かえって割高になる。まとめて落とす。
- 落とさない対象 — 記憶・メモリ系のツールは必ず除外する。ここの指定漏れが、最も重い事故になる。
- 呼び出し引数も落とすか — 結果だけ消すのか、「何を尋ねたか」も消すのか。
最も多い設定漏れ
「落とさない対象」の未指定です。記憶系のツール結果まで一律に消してしまうと、エージェントは自分が何を覚えていたかを失います。何を守るかを先に決めてから、発動条件を決めてください。
4.② 書き出す — 外部メモリと、パスによる振り分け
次の手は、文脈の中に抱えず、外に書き出すことです。進捗、決定事項、中間成果をファイルに残し、必要になったときに読み戻します。文脈は「作業机」であって「書庫」ではない、と考えると分かりやすくなります。
このとき効くのが、置き場所をパスで決めておく設計です。どこに書いたかによって、永続するのか・退避なのか・捨ててよいのかが自動的に決まります。
運用面では、セッション開始時にまず記憶を読むという規律を先に立てておくのが定石です。書き出す仕組みだけ作っても、読みに行かなければ意味がありません。「起動したらまず作業状態を確認する」を手順として固定します。
なお、状態を追記専用のイベントログとして外に持てるなら、過去を位置指定で取り出せるようになります(Part 1の「脳と手の分離」)。この構成では、そもそも「戻せない要約」を迫られる場面自体が減ります。
5.③ 畳む — 要約は「何を失ってよいか」を決める作業
①②を尽くしてなお足りないとき、初めて要約します。ここで多くの実装が省くのが、「何を逐語で残すか」の指示です。指示がなければ、何が残るかは運になります。
とくに落ちやすいのが文脈付きの数値です。「28件」だけが残って「32件中28件が一致」の文脈が消えると、後続の判断が狂います。数値は必ず、それが何の数値かとセットで残すよう指示します。
タスクの状態も同様です。どのバッチが完了し、どれが未着手か。これが消えると、エージェントは終わった作業をやり直すか、未着手のものを完了扱いにします。
6.サブエージェント — 隔離して、凝縮して返す
調査や探索を子エージェントに任せる構成は、コンテキストの観点で強い手になります。ただし返し方を設計しないと逆効果です。
返す量の目安は、おおむね1,000〜2,000トークン程度の凝縮結果とされています。探索の過程——どのファイルを開き、何がヒットしなかったか——は親には不要です。必要なのは結論と、その根拠の在りかだけです。
7.前積みと、都度取得のハイブリッド
「必要になりそうな資料を全部渡しておく」は、一見安全に見えて2つの問題を抱えます。使わないものが枠を食うことと、積んだ時点の情報で固定されることです。長い作業では、途中で古くなった前提を掴んだまま進むことになります。
このハイブリッドが成立する前提は、手掛かりが読めることです。フォルダ構造が整理されていて、ファイル名から中身が推測でき、更新日時が信用できる。逆に言えば、情報の置き方そのものがコンテキスト設計の一部になります。整理されていない置き場は、そのままエージェントの精度に跳ね返ります。
8.長い仕事では、要約せずに「入り直す」
数時間から数日にわたる作業では、要約を繰り返すほど文脈は濁ります。ここで有効なのが、要約して続けるのではなく、引き継ぎ書を書いて文脈を捨て、新しいセッションで入り直すという選択です。
この方式には副次的な効果もあります。要約を重ねた文脈で走り続けるエージェントは、残量を意識して仕事を早仕舞いしがちですが、毎回きれいな文脈で始まれば、その挙動が出ません。
引き継ぎ書に書くのは、要約に残すべきものとほぼ同じです。現在の状態、残っている作業、保留した判断とその理由。加えて、次のセッションが最初にすべきこと(作業ディレクトリの確認、進捗ファイルと変更履歴の確認)を手順として書いておくと、立ち上がりが安定します。
9.アンチパターン早見表
ここまでの内容を、実装で見かける形にして並べます。
| よくある実装 | 何が問題か | どうするか |
|---|---|---|
| 上限に当たったら、すぐ要約する | 最も損失の大きい手を最初に使っている | 再取得できるツール結果を先に捨てる |
| クリアリングを既定値のまま使う | 記憶系まで消え、覚えていたことを失う | 除外対象と直近保持数を明示する |
| 要約の指示を書かない | 何が残るかが運になり、数値や状態が消える | 逐語で残すものを指定する |
| サブエージェントの生ログを親に返す | 親の文脈が子の作業量に比例して膨らむ | 凝縮した結果だけを返させる |
| 必要になりそうな資料を全部前積みする | 使わないものが枠を食い、しかも途中で古くなる | 手掛かりだけ渡し、必要時に取りに行かせる |
| 長い作業を1セッションで押し通す | 文脈が濁り、残量を意識して早仕舞いする | 引き継ぎ書を書いて入り直す |
Summary
この記事の要点
- 1コンテキストは有限の予算。最も増えるのはツール実行結果で、それは最も捨てやすいものでもある。
- 2手段は3つ、順序が決まっている — ①捨てる(無損失)→ ②書き出す(読み戻せる)→ ③畳む(損失あり)。
- 3クリアリングでは「落とさない対象」を必ず指定する。記憶系まで消すのが最も重い事故。
- 4小刻みに消さない。まとめて落とすほうが、キャッシュの観点でも有利になる。
- 5置き場所をパスで決めておけば、何が永続で何を捨ててよいかが自動的に決まる。
- 6要約は「短くする」作業ではなく「何を失ってよいかを決める」作業。文脈付きの数値とタスク状態は逐語で残す。
- 7サブエージェントは凝縮した結果だけ返させる。親の文脈が子の作業量に比例してはいけない。
- 8全部前積みしない。手掛かりを渡して都度取得させる。情報の置き方そのものが設計の一部。
- 9長い仕事は、要約を重ねるより引き継ぎ書を書いて入り直す。受け渡しは会話ではなくファイルで。
Sources
出典・参考文献
本記事は、以下の一次資料をもとに整理しています。数値・仕様は各出典の公開時点のものです。
- Anthropic — Effective context engineering for AI agents
- Claude Cookbook — Context engineering: memory, compaction, and tool clearing
- Anthropic — Effective harnesses for long-running agents
- Anthropic — Harness design for long-running application development
- Anthropic — Scaling Managed Agents: Decoupling the brain from the hands
- LangChain — Deep Agents (JS): backends / subagents
FAQ
よくある質問
コンテキストエンジニアリングとは、AIエージェントに渡す文脈(指示・ツール定義・知識・会話履歴・ツール実行結果)を、有限の予算として設計・運用することです。プロンプトの書き方だけを指すプロンプトエンジニアリングと違い、何を積み、何を捨て、何を外に書き出し、いつ要約するかという運用の設計まで含みます。
要約ではなく、まず「再取得できるツール実行結果を捨てる」ことです。検索結果やファイル読み取りの多くは同じ操作でもう一度取得でき、捨てても情報は失われません。次に進捗や決定事項を外部ファイルへ書き出し、それでも足りないときに初めて要約します。この順序を守るだけで、失われる情報が大きく減ります。
「落としてはいけない対象」の指定です。記憶・メモリ系のツール結果まで一律に消してしまうと、エージェントは自分が何を覚えていたかを失います。発動条件・直近いくつを残すか・最低どれだけ落とすか・除外対象・呼び出し引数も落とすかという調整項目があり、既定値のまま使わないことが重要です。
文脈付きの数値(「32件中28件が一致」のように、数字だけでは意味を失うもの)、タスクの状態(どこまで終わり、どこが未着手か)、未解決の論点(保留した判断とその理由)です。逆に、付録的な表・逐語引用・低レベルな推論過程は捨ててかまいません。指示がなければ何が残るかは運になります。
設計次第です。子エージェントを独立した文脈で走らせ、親には凝縮した結果(おおむね1,000〜2,000トークン程度)だけを返す構成なら節約になります。逆に、探索の生ログをそのまま親に流すと、親の文脈は子の作業量に比例して膨らみ、かえって悪化します。
繰り返すほど文脈は濁ります。長時間の作業では、区切りで引き継ぎ書をファイルに残し、文脈は完全に捨てて新しいセッションで入り直すほうが良い結果になることがあります。残量を意識したエージェントが仕事を早仕舞いする挙動も避けられます。受け渡しは会話の連続ではなくファイルで行うのが定石です。
Part 1
エージェンティック・ハーネスとは?
定義・6つの構成要素・設計原則。本シリーズの出発点です。
Part 3 — 準備中
耐久実行と再開 — 中断を前提に組む
チェックポイント、永続化された待機、タイムアウトの4分類、二重実行の防止。
実行基盤を、自社で持ちたい方へ
homulaは、AIエージェント実行基盤の要件定義から設計・構築・運用までを支援しています。内製および自社環境でのホスティングを前提としたご相談も承っています。