長時間稼働エージェントのコンテキスト工学
マルチターン・エージェントの劣化を防ぐ 4 手法:圧縮(切り詰めでなく)、構造化メモ、サブエージェント分離、都度取得。
問題
長時間稼働するエージェントは特徴的な失敗をします。クラッシュではなく 緩やかな漂流 です。初期の決定が忘れられ、ツール出力が積み上がり、古いコンテキストに対して最適化し始めます。
コンテキスト窓は有限の予算です。全トークンが注意を奪い合い、関連性は端からの距離で減衰します。
効く 4 つの手法
1. 切り詰めではなく圧縮
末尾を切るのではなく、要約して再起動します。要約に残すべきもの:
- 現在の目標とその受け入れ基準
- 採用した決定と却下した決定(却下案は残さないと再提案される)
- 未解決の詰まりと担当
- 実際に使っているファイルパスと識別子
単純な切り詰めは直近のノイズを残し、初期の意図を捨てます。まさに逆です。
2. 構造化スクラッチパッド
状態はウィンドウ外のファイルに置き、エージェントに「思い出させる」のではなく「読み直させます」:
progress.md # 完了 / 進行中
decisions.md # 決定と理由(追記のみ)
blockers.md # 詰まりの内容と理由
追記のみのログは可変状態に勝ります。履歴そのものがコンテキストだからです。
3. サブエージェント分離
自己完結したサブタスクはサブエージェントに任せます。きれいなウィンドウを得て、袋小路での探索は自分のトークンを消費し、結論だけを返します。メインスレッドを保つ最も効果の大きい手です。
4. 必要時取得(JIT)
ペイロードではなくポインタ(パス、クエリ、ID)を渡します。ファイルは必要になった瞬間に読みます。「関連しそうなもの」を先読みするのは、作業前に窓を埋める行為です。
効いているかどうかの測り方
感覚ではなく次を監視します:
| シグナル | 健全 | 劣化中 |
|---|---|---|
| コンテキスト量 | ターン間で安定 | 単調増加 |
| 質問の繰り返し | まれ | 解決済み項目を再質問 |
| やり直し | まれ | 却下済み案の再提案 |
| 変更ファイルの範囲 | 集中 | 無関係モジュールに波及 |
却下したはずの案を再提案してくるなら、圧縮が決定履歴を落としています。モデルを責める前に要約テンプレートを直してください。