ハーネスエンジニアリングのアンチパターン
AP1. コンテキストの溜め込み(The Context Hoarder)
🎯 ポイント
「念のため全部入れておこう」——その安心感が、エージェントの性能を静かに殺しています。情報は多いほど安全ではなく、しばしば害です。
❗ 発生する課題
コンテキストウィンドウに無関連な情報が溢れ、エージェントの注意が希釈されます。重要な情報が中盤に埋もれ、本来必要なコードや仕様を載せるスペースが不足します。結果として、エージェントの判断精度が低下し、コストとレイテンシが線形以上に悪化します。
🔍 メカニズムと症状
このアンチパターンが魅力的に見えるのは、「情報は多いほど安全」という直感が強いからです。取得設計(何をいつ取りに行かせるか)は手間がかかるため、全部入れる方が楽に感じます。しかし、コンテキストウィンドウはCPUのL1キャッシュに相当する希少資源です。効用は単調増加しません。一定量を超えると無関連トークンが注意メカニズムを希釈し、重要情報の中盤埋没(lost in the middle)が発生します。症状としては、リポジトリ全体や長い会話履歴の丸ごと注入、全ツール定義の毎回ロード、「なぜか前に読んだはずの情報を無視する」といった現象が現れます。
📋 シナリオ
・issue-to-PRエージェントに、issueの内容だけでなくリポジトリ全体のREADME・設定ファイル・過去のPR履歴をすべて注入している。エージェントは肝心のissueの要点を見落とし、無関係なファイルを編集し始める。
・マイグレーションエージェントに数千ファイルの情報を一度に渡し、コンテキストが溢れてエージェントが途中で一貫性を失う。
・ペアプログラミングで、開いていないファイルや過去の長い会話履歴がコンテキストを圧迫し、レスポンスが遅くなる。
🛡 回避方法
・コンテキストの使用量をカテゴリ別に計測し、メモリプロファイラのように配分を可視化します
・取得はpull既定(エージェント自身に必要な情報を取りに行かせる)とし、push(強制注入)は破ると致命的な不変条件だけに絞ります
・会話履歴は古いターンから要約・圧縮し、ツール定義は現在のタスクに必要なものだけを動的にロードします
・「全部入れれば安心」という思考に気づいたら、それがこのアンチパターンのサインだと認識してください
#
HarnessEngineering# #
AIAgent#