homula

エージェンティック・ハーネス設計ガイド — Part 2

コンテキスト設計

捨てる・書き出す・畳む。要約は、最後の手段。

18〜22分難易度 ★★☆(中級)最終更新: 2026年8月

コンテキストエンジニアリングとは、AIエージェントに渡す文脈——指示・ツール定義・知識・会話履歴・ツール実行結果——を、有限の予算として設計・運用することです。何を積み、何を捨て、何を外に書き出し、いつ要約するか。プロンプトの書き方ではなく、運用の設計がここでの主題になります。

Part 1で、ハーネスの6つの構成要素のひとつに「記憶・状態」を挙げました。この記事はその詳細です。

エージェントに長い仕事をさせると、必ずコンテキストの上限に当たります。そこで多くの実装が採る「とりあえず要約する」は、最も損失の大きい手を最初に使っていることになります。順序を変えるだけで、失われる情報は大きく減ります。

1.コンテキストは、有限の予算である

コンテキストは足し算ではなく、有限の枠の取り合いです。システムプロンプト、ツール定義、知識、会話履歴、そしてツール実行結果——これらがひとつの枠を分け合います。

コンテキストは足し算ではなく、有限の枠の取り合いになる。ターン 5指示ツール定義知識会話履歴ツール実行結果残りターン 40指示ツール定義知識会話履歴ツール実行結果残りがほぼ無い = ここから先は、何かを捨てるしかない増え方が最も大きいのは「ツール実行結果」。そして、その多くは後から再取得できる。
図1ターンが進むほど、枠を食うのは「ツール実行結果」。検索結果やファイル読み取りが積み上がり、残りが消えていく。逆に言えば、最も増えるものは最も捨てやすいものでもある。

さらに重要なのは、枠に収まっていれば良いわけではないという点です。文脈が長くなるほど、モデルが本当に必要な情報へ払う注意は薄まります。「入るから入れておく」は、精度を下げる方向に働きます。

そしてもうひとつ。エージェントが自分の残量を意識すると、仕事を早仕舞いする挙動が出ることが報告されています。枠の管理は、単なる容量の話ではなく、振る舞いの話でもあります。

2.手段は3つ、そして順序が決まっている

コンテキストを空ける手段は3つあります。重要なのは選択ではなく順序です。安く、損失の少ないものから順に使います。

予算が閾値を超えた① 捨てる再取得できるツール結果を、外科的に落とす無損失・最も安いまだ足りなければ② 書き出す進捗・決定事項・中間成果をファイルへ退避するほぼ無損失・読み戻せるまだ足りなければ③ 畳む会話全体を要約する。何を逐語で残すかを指示する損失あり・最後の手段いきなり③に飛ばない。①と②で足りることのほうが多い。
図2①再取得できるものを捨てる(無損失)→ ②外部ファイルへ書き出す(読み戻せる)→ ③要約して畳む(損失あり)。①と②で足りることのほうが多く、③に飛ぶのは早すぎることがほとんど。

なぜ順序が効くのか

要約は情報を不可逆に失います。一方、ツール結果のクリアリングは「もう一度実行すれば取り戻せるもの」だけを落とすため、失うものがありません。同じだけの枠を空けるなら、失わない手から使うのが合理的です。

3.① 捨てる — ツール結果のクリアリング

最初の手は、使い終わったツール実行結果を外科的に落とすことです。3ターン前の検索結果、5ターン前のファイル読み取り——これらは同じ操作でもう一度取得できます。会話の要約と違い、落としても情報そのものは失われません。

会話に溜まったツール結果落とす検索結果(3ターン前)同じクエリで再取得できる落とすファイル読み取り(5ターン前)もう一度読めばよい落とす一覧取得(8ターン前)再実行できる守るメモリ読み取り対象外に指定して守る守る直近のツール結果直近 N 件は残す5 つの調整項目いつ発動するか残量がこの水準を切ったら直近をいくつ残すか文脈の連続性を保つ最小限最低どれだけ落とすか小刻みに消さない落とさない対象記憶系は必ず守る引数も落とすか結果だけか、呼び出し内容もか既定値のまま使わない。とくに「落とさない対象」の指定漏れは、記憶を失う事故になる。
図3落とすのは「再取得できるもの」。守るのは記憶系と直近のいくつか。右側は調整項目で、既定値のまま使わないことが重要になる。

調整できるのは、おおむね次の5点です。

  • いつ発動するか — 残量がどの水準を切ったらクリアリングを始めるか。
  • 直近をいくつ残すか — 文脈の連続性が切れない最小限を残す。
  • 最低どれだけ落とすか — 小刻みに消すと、そのたびにキャッシュが無効になり、かえって割高になる。まとめて落とす。
  • 落とさない対象 — 記憶・メモリ系のツールは必ず除外する。ここの指定漏れが、最も重い事故になる。
  • 呼び出し引数も落とすか — 結果だけ消すのか、「何を尋ねたか」も消すのか。

最も多い設定漏れ

「落とさない対象」の未指定です。記憶系のツール結果まで一律に消してしまうと、エージェントは自分が何を覚えていたかを失います。何を守るかを先に決めてから、発動条件を決めてください。

4.② 書き出す — 外部メモリと、パスによる振り分け

次の手は、文脈の中に抱えず、外に書き出すことです。進捗、決定事項、中間成果をファイルに残し、必要になったときに読み戻します。文脈は「作業机」であって「書庫」ではない、と考えると分かりやすくなります。

このとき効くのが、置き場所をパスで決めておく設計です。どこに書いたかによって、永続するのか・退避なのか・捨ててよいのかが自動的に決まります。

エージェントの書き込みパスで振り分ける/memories/永続スレッドをまたいで残る。次の作業の起点になる/large_tool_results/退避大きな結果を逃がし、必要な部分だけ読み戻すその他一時このスレッド限り。終われば消えてよい「どこに置くか」を決めておけば、何を捨ててよいかが自動的に決まる。
図4永続領域はスレッドをまたいで残り、次の作業の起点になる。退避領域には大きなツール結果を逃がし、必要な部分だけ読み戻す。それ以外はこのスレッド限りで、終われば消えてよい。

運用面では、セッション開始時にまず記憶を読むという規律を先に立てておくのが定石です。書き出す仕組みだけ作っても、読みに行かなければ意味がありません。「起動したらまず作業状態を確認する」を手順として固定します。

なお、状態を追記専用のイベントログとして外に持てるなら、過去を位置指定で取り出せるようになります(Part 1の「脳と手の分離」)。この構成では、そもそも「戻せない要約」を迫られる場面自体が減ります。

5.③ 畳む — 要約は「何を失ってよいか」を決める作業

①②を尽くしてなお足りないとき、初めて要約します。ここで多くの実装が省くのが、「何を逐語で残すか」の指示です。指示がなければ、何が残るかは運になります。

要約(compaction)指示がなければ、何が残るかは運になる逐語で残す文脈付きの数値「32件中28件が一致」——数字だけでは意味を失うタスクの状態どこまで終わり、どこが未着手か未解決の論点保留した判断と、その理由捨ててよい付録的な表元データから再取得できる逐語引用出典の位置が分かれば十分低レベルな推論過程結論が残ればよい要約は「短くする」作業ではなく、「何を失ってよいかを決める」作業。
図5残すのは、文脈付きの数値・タスクの状態・未解決の論点。捨ててよいのは、付録的な表・逐語引用・低レベルな推論過程。「短くする」のではなく「失ってよいものを決める」と捉える。

とくに落ちやすいのが文脈付きの数値です。「28件」だけが残って「32件中28件が一致」の文脈が消えると、後続の判断が狂います。数値は必ず、それが何の数値かとセットで残すよう指示します。

タスクの状態も同様です。どのバッチが完了し、どれが未着手か。これが消えると、エージェントは終わった作業をやり直すか、未着手のものを完了扱いにします。

6.サブエージェント — 隔離して、凝縮して返す

調査や探索を子エージェントに任せる構成は、コンテキストの観点で強い手になります。ただし返し方を設計しないと逆効果です。

親エージェント全体の段取りを持つ子エージェント 1独立した文脈で探索する生ログは大きい凝縮した結果だけ返す1,000〜2,000 トークン程度子エージェント 2独立した文脈で探索する生ログは大きい凝縮した結果だけ返す1,000〜2,000 トークン程度子エージェント 3独立した文脈で探索する生ログは大きい凝縮した結果だけ返す1,000〜2,000 トークン程度親の文脈は、子の作業量に比例して膨らんではいけない。探索の生ログを親に流さない。
図6子はそれぞれ独立した文脈で探索し、生ログは子の中で完結させる。親に返すのは凝縮した結果だけ。親の文脈が子の作業量に比例して膨らまないことが、この構成の要点。

返す量の目安は、おおむね1,000〜2,000トークン程度の凝縮結果とされています。探索の過程——どのファイルを開き、何がヒットしなかったか——は親には不要です。必要なのは結論と、その根拠の在りかだけです。

7.前積みと、都度取得のハイブリッド

「必要になりそうな資料を全部渡しておく」は、一見安全に見えて2つの問題を抱えます。使わないものが枠を食うことと、積んだ時点の情報で固定されることです。長い作業では、途中で古くなった前提を掴んだまま進むことになります。

全部を前積みする使わないものまで枠を食うしかも、積んだ時点の情報で固定される(途中で古くなる)重要なものだけ前積み + 都度取得前積み必ず要るものだけ手掛かり(メタデータ)フォルダ構造・命名・更新日時から、「どこを見ればよいか」を判断する必要になった分だけ取りに行く人が調べ物をするときと同じ。全部を暗記してから始めるのではなく、目次を見て必要な章を開く。
図7必ず要るものだけを前積みし、残りは手掛かり(フォルダ構造・命名・更新日時などのメタデータ)を渡して、必要になった分だけ取りに行かせる。人が調べ物をするときと同じ構造。

このハイブリッドが成立する前提は、手掛かりが読めることです。フォルダ構造が整理されていて、ファイル名から中身が推測でき、更新日時が信用できる。逆に言えば、情報の置き方そのものがコンテキスト設計の一部になります。整理されていない置き場は、そのままエージェントの精度に跳ね返ります。

8.長い仕事では、要約せずに「入り直す」

数時間から数日にわたる作業では、要約を繰り返すほど文脈は濁ります。ここで有効なのが、要約して続けるのではなく、引き継ぎ書を書いて文脈を捨て、新しいセッションで入り直すという選択です。

要約して、同じセッションを続ける作業要約して詰める濁った文脈のまま続く残量を意識して、仕事を早仕舞いしやすくなる引き継ぎ書を書いて、入り直すセッション 1作業する引き継ぎ書を書く状態・残作業・判断文脈を捨てるセッション 2読んで続けるファイル受け渡しは会話ではなく、これでエージェント間の受け渡しを「会話の連続」ではなく「ファイル」にすると、区切りごとに文脈をきれいにできる。
図8区切りで引き継ぎ書をファイルに残し、文脈は完全に捨てる。次のセッションはそれを読んで続きから始める。受け渡しを「会話の連続」ではなく「ファイル」にすると、区切りごとに文脈をきれいにできる。

この方式には副次的な効果もあります。要約を重ねた文脈で走り続けるエージェントは、残量を意識して仕事を早仕舞いしがちですが、毎回きれいな文脈で始まれば、その挙動が出ません

引き継ぎ書に書くのは、要約に残すべきものとほぼ同じです。現在の状態、残っている作業、保留した判断とその理由。加えて、次のセッションが最初にすべきこと(作業ディレクトリの確認、進捗ファイルと変更履歴の確認)を手順として書いておくと、立ち上がりが安定します。

9.アンチパターン早見表

ここまでの内容を、実装で見かける形にして並べます。

よくある実装何が問題かどうするか
上限に当たったら、すぐ要約する最も損失の大きい手を最初に使っている再取得できるツール結果を先に捨てる
クリアリングを既定値のまま使う記憶系まで消え、覚えていたことを失う除外対象と直近保持数を明示する
要約の指示を書かない何が残るかが運になり、数値や状態が消える逐語で残すものを指定する
サブエージェントの生ログを親に返す親の文脈が子の作業量に比例して膨らむ凝縮した結果だけを返させる
必要になりそうな資料を全部前積みする使わないものが枠を食い、しかも途中で古くなる手掛かりだけ渡し、必要時に取りに行かせる
長い作業を1セッションで押し通す文脈が濁り、残量を意識して早仕舞いする引き継ぎ書を書いて入り直す

Summary

この記事の要点

  1. 1コンテキストは有限の予算。最も増えるのはツール実行結果で、それは最も捨てやすいものでもある。
  2. 2手段は3つ、順序が決まっている — ①捨てる(無損失)→ ②書き出す(読み戻せる)→ ③畳む(損失あり)。
  3. 3クリアリングでは「落とさない対象」を必ず指定する。記憶系まで消すのが最も重い事故。
  4. 4小刻みに消さない。まとめて落とすほうが、キャッシュの観点でも有利になる。
  5. 5置き場所をパスで決めておけば、何が永続で何を捨ててよいかが自動的に決まる。
  6. 6要約は「短くする」作業ではなく「何を失ってよいかを決める」作業。文脈付きの数値とタスク状態は逐語で残す。
  7. 7サブエージェントは凝縮した結果だけ返させる。親の文脈が子の作業量に比例してはいけない。
  8. 8全部前積みしない。手掛かりを渡して都度取得させる。情報の置き方そのものが設計の一部。
  9. 9長い仕事は、要約を重ねるより引き継ぎ書を書いて入り直す。受け渡しは会話ではなくファイルで。

FAQ

よくある質問

コンテキストエンジニアリングとは、AIエージェントに渡す文脈(指示・ツール定義・知識・会話履歴・ツール実行結果)を、有限の予算として設計・運用することです。プロンプトの書き方だけを指すプロンプトエンジニアリングと違い、何を積み、何を捨て、何を外に書き出し、いつ要約するかという運用の設計まで含みます。

要約ではなく、まず「再取得できるツール実行結果を捨てる」ことです。検索結果やファイル読み取りの多くは同じ操作でもう一度取得でき、捨てても情報は失われません。次に進捗や決定事項を外部ファイルへ書き出し、それでも足りないときに初めて要約します。この順序を守るだけで、失われる情報が大きく減ります。

「落としてはいけない対象」の指定です。記憶・メモリ系のツール結果まで一律に消してしまうと、エージェントは自分が何を覚えていたかを失います。発動条件・直近いくつを残すか・最低どれだけ落とすか・除外対象・呼び出し引数も落とすかという調整項目があり、既定値のまま使わないことが重要です。

文脈付きの数値(「32件中28件が一致」のように、数字だけでは意味を失うもの)、タスクの状態(どこまで終わり、どこが未着手か)、未解決の論点(保留した判断とその理由)です。逆に、付録的な表・逐語引用・低レベルな推論過程は捨ててかまいません。指示がなければ何が残るかは運になります。

設計次第です。子エージェントを独立した文脈で走らせ、親には凝縮した結果(おおむね1,000〜2,000トークン程度)だけを返す構成なら節約になります。逆に、探索の生ログをそのまま親に流すと、親の文脈は子の作業量に比例して膨らみ、かえって悪化します。

繰り返すほど文脈は濁ります。長時間の作業では、区切りで引き継ぎ書をファイルに残し、文脈は完全に捨てて新しいセッションで入り直すほうが良い結果になることがあります。残量を意識したエージェントが仕事を早仕舞いする挙動も避けられます。受け渡しは会話の連続ではなくファイルで行うのが定石です。

Part 1

エージェンティック・ハーネスとは?

定義・6つの構成要素・設計原則。本シリーズの出発点です。

Part 3 — 準備中

耐久実行と再開 — 中断を前提に組む

チェックポイント、永続化された待機、タイムアウトの4分類、二重実行の防止。

実行基盤を、自社で持ちたい方へ

homulaは、AIエージェント実行基盤の要件定義から設計・構築・運用までを支援しています。内製および自社環境でのホスティングを前提としたご相談も承っています。