Skip to content

Context Triage(初期トリアージ)

ループへ情報を渡す前に、検索・要約・選別によって関連する部分集合だけを決定論的な前段で切り出す。アクセス可能なデータの全量をコンテキストへ流し込むのではなく、必要なものを必要なだけ持ち込む。コンテキストの膨張による品質劣化とコスト暴騰を、入口で防ぐパターンである。

別名

呼称出典
Just-in-Time Context RetrievalAnthropic「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 — 大規模データを扱う自律ループの前段に置く

出典・参考

本文: CC BY 4.0 / コード片: MIT。GitHub で寄稿を受け付けています。