Context Triage(初期トリアージ)
ループへ情報を渡す前に、検索・要約・選別によって関連する部分集合だけを決定論的な前段で切り出す。アクセス可能なデータの全量をコンテキストへ流し込むのではなく、必要なものを必要なだけ持ち込む。コンテキストの膨張による品質劣化とコスト暴騰を、入口で防ぐパターンである。
別名
| 呼称 | 出典 |
|---|---|
| Just-in-Time Context Retrieval | Anthropic「Effective context engineering」(オンデマンドな文脈取得) |
| Context Curation / Pre-filtering | 一般的呼称 |
| RAG の前処理(検索・再ランク) | Retrieval-Augmented Generation の実装手法として |
問題
エージェントがアクセスできるデータ(ナレッジベース、長大な文書、DB、過去ログ)は、しばしばコンテキストウィンドウよりはるかに大きい。全量を渡そうとすれば上限に当たり、渡せたとしても大半はそのステップに無関係で、context rot と入力コストの暴騰を招く。
「とりあえず全部コンテキストに入れる」は、データが小さいうちしか通用しない。規模が上がると、モデルの注意は無関係な情報に薄まり、肝心の一節を見落とす。問題は情報の量ではなく、そのステップにとっての関連度である。
コンテキスト
適用する:
- 大規模なナレッジベース・長文書・DBを参照するエージェント(RAG的タスク)
- アクセス可能なデータがウィンドウに対して大きい場合(選定ガイドの第4則に対応)
適用しない(不要な)ケース:
- 扱うデータが小さくウィンドウに余裕がある場合——トリアージのオーバーヘッドが割に合わない
- 全量が本当に必要で、選別が情報損失になるタスク(小さな仕様書全体の厳密な参照など)
解決
ループの外側に決定論的な前段を置き、(1) 検索・フィルタで候補を絞り、(2) 関連度で並べ替え(rerank)、(3) 必要なら要約・圧縮し、(4) 上位の絞り込んだ文脈だけをループへ渡す。先読みで全部を積むのではなく、そのステップで必要な分だけをオンデマンドに引く(just-in-time)。
関連性の判断を毎回LLMに委ねるとコスト・レイテンシ・非決定性が増える。埋め込み検索・メタデータフィルタ・rerank といった決定論的な手段で絞るのが基本である。
python
def build_context(query, store, k=8):
candidates = store.search(query, limit=k * 5) # 検索で候補を絞る(決定論的)
ranked = rerank(query, candidates) # 関連度で並べ替え
top = ranked[:k]
return summarize_if_large(top) # 大きければ要約して渡す
def step(task, store):
ctx = build_context(task.current_query, store) # ループの前段でトリアージ
return llm(task.system + ctx) # ループには絞った文脈だけを渡す実装の要点:
- 前段は決定論的に組む。 関連性判断を毎回LLMに委ねず、検索・メタデータフィルタ・rerank で絞る。判断をモデルに戻すのは最後の一手段にする
- just-in-time で引く。 全量を先読みせず、そのステップで必要な分だけ取得する。先読みは Compaction の対象を自ら増やす
- 絞りすぎに注意する。 再現率を犠牲にしすぎると必要な情報を落とし、下流は「無い情報」として誤る。k と検索条件は計測で調整する
- 後段に Compaction を併用する。 トリアージで入れた文脈も、ループが長引けば蓄積する。入口の Triage と蓄積後の Compaction はセットで効く
トレードオフ
- ✅ 大規模データでもウィンドウに収まり、無関係情報による品質劣化を避けられる
- ✅ 入力トークンが減り、コストとレイテンシが下がる
- ⚠️ 検索・選別の精度が品質の上限を決める。関連情報の取りこぼしは、そのまま下流の誤りになる
- ⚠️ 検索インフラ(インデックス・埋め込み・rerank)の構築と保守にコストがかかる
クラウドパターンとの対応
| クラウドパターン | 本パターンでの再定義 |
|---|---|
| Cache-Aside | 「必要なデータを必要なときにだけ高速層へ読み込む」から「必要なコンテキストを必要なときにだけ高価な層(ウィンドウ)へ読み込む」へ。全量の先読みを避け、オンデマンドで文脈を構成する |
| Materialized View / Index Table | 「読み取り最適化した射影を事前計算する」から「関連度で引ける埋め込み・要約インデックスを事前構築し、トリアージの検索対象にする」へ |
関連パターン
- Context Compaction — 入口で絞るのが Triage、蓄積した後に畳むのが Compaction。上流・下流で対になる
- Memory — 長期記憶からの関連想起は Triage の一適用。Memory は「何を保存するか」、Triage は「今このステップに何を取り出すか」に責任を持つ
- Routing — Triage が「何を文脈に入れるか」を選ぶのに対し、Routing は「どの処理経路へ送るか」を選ぶ。前段で選別する構造は近い
- ReAct / Orchestrator-Workers — 大規模データを扱う自律ループの前段に置く
出典・参考
- Anthropic — Effective context engineering for AI agents(just-in-time な文脈取得と「適切な高度」の情報量)
- Azure Architecture Center — Cache-Aside pattern(系譜元のクラウドパターン)
- Azure Architecture Center — Materialized View pattern(検索対象の事前構築に対応)