# AIエージェントをソフトウェアに組み込むプラクティス
# コンテキスト予算配分
🎯 「全部入れれば精度が上がる」は幻想です。コンテキストウィンドウは有限の予算として管理しましょう。
スロットごとに配分比率を決め、信号密度を最大化するパターンです。
🔥 解決する課題
RAGやメモリを使うエージェントでは、検索結果・会話履歴・システム指示・長期メモリが同じコンテキストウィンドウを奪い合います。情報を詰め込むほどコストは増え、会話が長くなるとシステム指示の割合が縮んで振る舞いが劣化します。さらに"Lost in the Middle"問題により、窓の中盤に置かれた重要な情報が実質的に無視されてしまいます。
💡 提案パターン
コンテキストウィンドウをシステム指示・検索結果・会話履歴・メモリなどのスロットに分け、各スロットに最大占有率と優先度を設定します。システム指示は圧縮対象外の固定枠(10〜20%)として先に確保し、検索結果はリランク後にtop-k件に絞り、履歴は窓使用率が閾値を超えたら要約圧縮します。配置順序はLost in the Middle対策として、最重要情報を先頭に、直近入力を末尾に置きます。cost_sensitivityが高い環境ほどtop-kを絞り、圧縮閾値を下げ、履歴を短く保ちます。
✅ 選定条件
使うとき:
- RAGやメモリを使い、投入候補がモデル窓サイズの50%を超えうる
- コスト感度が中以上で、投入トークンの増加がコストや推論時間に影響する
- 複数ターンの会話で履歴が蓄積し、他の情報のスペースを圧迫する
使わないとき:
- 投入情報がシステム指示+単発入力のみで窓の30%未満に収まる場合
- ロングコンテキストモデルを使い投入量が窓の20%未満、かつコスト感度が低い場合
⚠️ 落とし穴
- システム指示を圧縮対象にしてはいけません。ツール定義や安全指示が削られると振る舞いが壊れます
- リランクなしのtop-kは信号密度が低いです。ベクトル検索上位20件からクロスエンコーダで3〜8件に絞りましょう
- 要約圧縮は非可逆です。重要な決定事項や固有名詞が落ちるリスクがあるため、キーワード抽出を併用してください
🔧 実装方針
- コンテキストウィンドウをスロット(system/user/retrieval/history/memory)に分割し、各スロットに最大占有率・優先度・圧縮可否を定義した構造体で管理します
- システム指示は圧縮対象外の最高優先度として先に確保し、残りの予算を他スロットに優先度降順で配分します
- 検索結果はベクトル検索の上位候補をクロスエンコーダでリランクしてから予算内に収め、信号密度を最大化します
- 履歴スロットが予算を超過した場合は要約圧縮を適用し、圧縮前にキーワード抽出して重要情報の欠落を防ぎます
#
AIエージェント# #
ソフトウェアアーキテクチャ#