コンテキストウィンドウ管理
Bobの270,000tokenコンテキストウィンドウの仕組み、各カテゴリーのtoken使用量への影響、セッションを集中させコスト効率を高めるためのベストプラクティスを学びます。
コンテキストウィンドウの概要
Bob Shellの各セッションにはコンテキストウィンドウがあります。これはその会話のためのtokenの予算です。上限は270,000 tokenです。Bobが読み込むすべてのものがこれに対してカウントされます。
ウィンドウを埋めるもの
| カテゴリー | 含まれるもの |
|---|---|
| システムプロンプト | セッションのBobのコアインストラクション |
| ツール定義 | 組み込みのツールスキーマと接続されたMCPツール定義 |
| MCPツール | 接続されたMCPサーバーが提供するツールのインストラクションと説明 |
| Rules | プロジェクトおよびモードのルールファイルからのカスタムインストラクション(例:AGENTS.mdまたは.bob/rules-*) |
| スキル | Bobが会話のために読み込んだスキルのインストラクション |
| Messages | あなたのプロンプト、Bobの返答、および会話のツールアクティビティ。これがtokenとしてカウントされるトランスクリプトです。 |
コマンド出力とツール結果はMessagesにカウントされます。ファイルの内容は別の行には表示されません。
tokenレポートには2つのサマリーフィールドが含まれます:
- モデル応答用に予約:Bobの次の返答のために確保されたtoken(通常20.0k)。
- 利用可能なスペース:残りの空きtoken。
ベースラインのオーバーヘッド
固定カテゴリーはBobとの作業を開始する前にコンテキストを使用します。単純な"すぐに挨拶してください。"でさえ約8.5k tokenになります。そのほとんどはツール定義(5.1k)、システムプロンプト(1.5k)、Rules(830)、およびスキル(454)です。Messagesはわずか590です。
Bobはすべてのプロンプトでオーバーヘッドスタック全体を再送信します。MCPサーバーやロードされたスキルが多いほど、入力前にMCPツール、ツール定義、スキルが増えます。
token使用量の監視
Bob Shellは各交換の終わりにtoken使用量を報告します。以下の表は各カテゴリーに影響を与えるものを示しています:
| カテゴリー | 増加する原因 |
|---|---|
| システムプロンプト | セッション開始時に読み込まれる。通常作業中は変わらない。 |
| ツール定義 | 組み込みツールスキーマ。セッション開始時に設定される。通常作業中は変わらない。 |
| MCPツール | 接続されたMCPサーバーと有効なツール。サーバーやツールを追加したときに増加し、プロンプト送信時ではない。 |
| Rules | プロジェクトおよびモードのルールファイル(例:AGENTS.md)。セッション開始時に設定される。 |
| スキル | Bobがセッションのために読み込むスキル。Bobが会話の途中でスキルをアクティブにする場合に増加することがある。 |
| Messages | あなたのプロンプト、Bobの返答、ファイルの読み取り、ツール出力、コマンド出力。毎ターンおよびリポジトリ探索で増加する。 |
短い交換では、固定カテゴリーが合計の多くを使用することが多いです。Bobにファイルを読み込んだりツールを実行させると、Messagesが通常最大のカテゴリーになります。このシフトに注意してください。
利用可能なスペースはどのカテゴリーが増加しても縮小します。モデル応答用に予約はBobの次の返答のために確保されています。その上の使用済み合計には含まれません。
tokenの上限
ハードキャップは1セッションあたり270,000 tokenです。Bobは上限に達する前に要約を始めます。要約は通常、合計使用量が約190,000 tokenの時点で始まります。
自動コンテキスト要約
要約のしきい値で、Bobは:
- 最新の最も関連性の高いコンテキストを保持します。
- 古い会話セグメントを要約または削除します。
- 重要なシステムインストラクション、ツール定義、Rules、スキルを維持します。
- 要約されたコンテキストで継続します。
要約は非可逆的です。Messagesの初期の詳細は残らないかもしれません。トピックが変わったとき、またはMessagesが品質を損なうほど大きくなったときに新しいセッションを開始してください。
Bobコインへの影響
BobコインはToken使用量を追跡します。入力と出力のtokenの両方がカウントされます。
- 各メッセージは固定オーバーヘッドを含むアクティブなコンテキスト全体を再送信します。
- Bobはすでに読み込まれたものを毎回送信のたびに再処理します。
- Messagesが多い長いセッションは後のプロンプトのコストが高くなります。
ベストプラクティス
コンテキストウィンドウはストレージではありません。これは作業メモリです。各ステップでBobが使用できるもの。何を入れるかをコントロールしてください。古い出力でセッションが埋まったらリセットします。結果はBobの返答だけでなくテストで確認してください。
セッションと会話の絞り込み
作業目標ごとに1つのセッションを使用し、範囲を絞ったプロンプトから始めます。リポジトリを探索するようBobに依頼する前に、目標、期待される結果、制約を述べます。ファイルと関数を明示的に指定します。「リポジトリ全体を読む」や「バックエンドを確認する」などの曖昧なリクエストは避けます。トピックが変わったら新しいセッションを開始します。Messages内の無関係なコンテキストはコストを増やし、Bobを混乱させる可能性があります。
固定コンテキストをスリムに保つ
固定カテゴリーは何も入力する前にtokenを消費します。オーバーヘッドを低く保つには:
- カスタムルールと
AGENTS.mdを短く保ちます。セットアップ、テスト、スタイルコマンドのみを入れてください(例:pnpm test、mvn verify)。 - 現在の作業に必要なMCPサーバー、ツール、スキルのみを接続します。使用していないものは切断し、グローバルよりもプロジェクトスコープのMCP設定を優先します。
- Messagesはこのセッション固有の状況証拠(バグ、ログ、関連ファイル)のために確保します。固定ルールを毎回のプロンプトで繰り返さないでください。
必要なときにコンテキストを追加する
大きなコンテンツブロックをチャットプロンプトに貼り付けるのではなく、Bobに対象のファイルを検索・読み取らせます。プロンプトで特定のファイルパスと行範囲を参照し、幅広いディレクトリ参照を避けます:
✓ src/utils/validation.tsの45〜67行のメール検証ロジックを修正する
✗ src/、tests/、docs/のすべてを確認して改善提案をする段階的に作業します。候補ファイルを見つけ、関連するものを確認し、計画を立て、変更し、検証します。広範なリポジトリ読み取りにはsubagentを使用して、すべてのread_file呼び出しがMessagesに入るのではなく、セッションが要約された結果を受け取るようにします。ソースが矛盾する場合は、古いコメントや古いREADMEのメモよりも実行中のコードとテストを信頼します。
大きなリポジトリの詳細なアドバイスについては、大規模プロジェクトでの作業を参照してください。
Messagesが増えたらリセットする
長いセッションでは、Messagesに繰り返されるファイルの内容、放棄された計画、古いツール出力が蓄積されます。作業目標が変わったとき、または会話が品質を損なうほど大きくなったときに新しいセッションを開始します。制約、証拠、未解決の質問を残し、それ以外を削除します。
Bobは古いセグメントを自動的に要約することもできますが、要約は非可逆的でMessagesの初期の詳細は残らない場合があります。差分が確認可能な状態を保ちBobが軌道に乗り続けるように、1回の大きな自律的な実行よりも小さな承認済みの変更を優先します。