コンテキストエンジニアリングとは何ですか?
コンテキストエンジニアリングとは、モデルの限られたコンテキストウィンドウに各ステップでどの情報を入れ、どの情報を除外するかを決定する技術分野です。エージェントが多くのステップを実行する際、単純にすべてをコンテキストに詰め込むと、品質が低下しコストが増大します。コンテキストエンジニアリングは、適切な指示、取得された知識、ツールの結果、およびメモリを厳選し、モデルが必要な時に必要なものを正確に得られるようにします。これはハーネスエンジニアリングの中核となる部分です。
定義
コンテキストエンジニアリングとは、モデルのコンテキストウィンドウに配置される情報を厳選、圧縮、順序付けし、各ステップで最も関連性の高いシグナルを配置し、ノイズを最小限に抑える手法です。
主な要点
- コンテキストは希少なリソースです。何を除外するかは、何を含めるかと同様に重要です。
- コンテキストは多ければよいというものではありません。無関係なトークンは品質を低下させ、コストを上昇させます。
- 手法:リトリーバル、要約、コンパクト化、および構造化メモリ。
- 単一のプロンプトからエージェントの実行全体へと、プロンプトエンジニアリングを一般化します。
- モデルを取り囲むハーネスのコアレイヤーです。
コンテキスト
すべてのモデルには有限のコンテキストウィンドウがあり、シグナルの弱いコンテンツで満たされると品質が低下します。シングルターンの使用では対処可能ですが、エージェントは多くのステップにわたって履歴、ツールの出力、取得されたドキュメントを蓄積するため、すぐにウィンドウが溢れてしまいます。
コンテキストエンジニアリングは、ウィンドウを計画的に管理すべき予算として扱います。永続的な指示を保持し、現在関連のあるものだけを取得し、残りを要約またはコンパクト化し、長期的な状態はウィンドウの外のメモリに保存します。
アーキテクチャ
主なアプローチ:選択(関連する一節のみを取得)、圧縮(前のステップを要約)、コンパクト化(古いターンを破棄または折りたたむ)、外部化(長期的な状態をメモリ領域にプッシュし、必要に応じてプルバックする)。
エージェントのループにおいて、コンテキストは各ステップで、固定のシステム指示、タスクの状態、関連する取得された知識、最近のツールの結果、選択された長期メモリといった階層化されたソースから再構成され、最も重要なシグナルが最も目立つように順序付けられます。
コンポーネント
メリット
- タスクが長期化しても高い品質を維持します。
- トークンコストとレイテンシーを抑制します。
- ノイズによる混乱やハルシネーションを低減します。
- 有限のコンテキスト内で、長期的なタスクを実行するエージェント(long-horizon agents)を実現します。
リスク
- 過度な圧縮により、必要な情報が欠落する可能性があります。
- 検索の精度が低いと、無関係なコンテキストや誤ったコンテキストが混入します。
- 各ステップで何を保持すべきかを決定する際の複雑さ。
- ここでのバグは、わずかな品質低下として表面化します。
ツールとテクノロジー
例
- エージェントの以前のステップを要約し、コンテキストウィンドウが現在のサブタスクに集中できるようにします。
- マニュアル全体ではなく、質問に関連するポリシーのセクションのみを検索します。
- ユーザーの好みをメモリに保存し、関連性がある場合にのみ呼び出します。
FAQ
- コンテキストエンジニアリングはプロンプトエンジニアリングとどう違うのですか?
- プロンプトエンジニアリングは単一の指示を作成します。一方、コンテキストエンジニアリングは、検索、メモリ、ツール結果、圧縮などを含め、エージェントの実行全体を通じてウィンドウ内のすべての情報を管理します。
- 単にコンテキストウィンドウを大きくするだけではだめなのですか?
- ウィンドウを大きくすることは役立ちますが、根本的な解決にはなりません。ウィンドウがシグナルの低いトークンで埋まると、品質が低下しコストが増加します。依然として、情報のキュレーションが有効です。
- RAGやメモリとはどのように関係していますか?
- RAGやメモリはコンテキストのソースです。コンテキストエンジニアリングは、それらから「何を」「いつ」「どのような形式で」実際にウィンドウに投入するかを決定します。
- これはハーネスエンジニアリング (Harness Engineering) の一部ですか?
- はい。コンテキスト管理は、モデルの能力を信頼性の高いエージェントの動作へと変換するハーネスのコアレイヤーの1つです。