コンテキスト ウィンドウについて
GitHub Copilotを使用すると、送信するすべてのメッセージ、Copilotからのすべての応答、すべてのツール呼び出しとその結果、およびCopilotの動作を定義するシステム命令がすべてコンテキスト ウィンドウに保持されます。 コンテキスト ウィンドウは、AI モデルが応答を生成するときに一度に考慮できる情報の合計量です。
コンテキスト ウィンドウには、モデルによって異なる、トークン単位で測定される固定サイズがあります。 トークンは通常、短い一般的に使用される単語と、複数音節の単語のフラグメントで構成されます。 会話が進むと、コンテキスト ウィンドウに次の情報が表示されます。
- システム命令とツール定義: Copilot の動作を指示する組み込み命令と、使用可能なすべてのツールのスキーマ。 これらは常に存在し、コンテキスト ウィンドウの固定部分を占めます。
- メッセージ: 送信するすべてのプロンプト。
- Copilotの回答: Copilotが応答するすべてがあなたに返されます。
- ツールの呼び出しと結果: Copilot ファイルの読み取り、コマンドの実行、またはコードベースの検索を行うと、要求と出力の両方がコンテキストに追加されます。 ツールの結果は特に大きくなる可能性があります。たとえば、ツールが長いファイルを読み取ったり、広範な出力を生成するコマンドを実行したりする場合などです。
これらすべてがコンテキスト ウィンドウに蓄積されます。 長いセッションまたは複雑なセッションでは、コンテキスト ウィンドウがいっぱいになる可能性があります。
コンテキスト ウィンドウが重要な理由
コンテキスト ウィンドウは、Copilot がプロンプトにどう応答するかを決定するときに、会話の前の部分を考慮できるようにするものです。 コンテキストウィンドウ内のすべての内容は、Copilot がタスクに取り組む際に参照できます。
つまり、非常に長いセッションでは、 Copilot は会話履歴全体を一度に保持できない可能性があります。 Copilot そのため、必要な限り会話を継続できるコンテキスト管理機能があります。
コンテキストの使用状況の確認
コンテキスト使用のコントロールは、クライアントとサーフェスによって異なります。 例えば次が挙げられます。
- Copilot CLIとGitHub Copilot appで、
/contextを使用して現在のセッションの使用状況を確認します。 - サポートされている IDE で、Copilot チャット入力領域内またはその下にあるコンテキスト ウィンドウ インジケーターを探します。 たとえば、 Visual Studio Codeでは、インジケーターは小さな円です。 その他の IDE では、 Copilot Extensionによって提供されるセッション情報ダイアログに使用状況が表示されます。
コンテキストの使用状況は、次の場合に確認したほうがよいです。
- セッションが長くなると、残りの空き容量がどれくらいあるか知りたくなることがあります。
- Copilot は会話の最初の部分を忘れているように見えます。
- 圧縮が発生したかどうか、または間もなく発生する可能性があるかどうかを理解する必要があります。 「 圧縮」を参照してください。
コンテキスト ウィンドウの管理
使用状況の監視、古いメッセージの圧縮、大きなツール出力の制御によって、コンテキスト ウィンドウを管理できます。
メモ
使用可能なコントロールは、クライアントとサーフェスによって異なります。
使用可能なコマンドと設定を使用してコンテキスト ウィンドウを効果的に管理できない場合は、切り捨てたり要約したりするように Copilot を求めることで、会話をより小さなセッションに分割したり、ツール出力のサイズを小さくしたりするなどの代替戦略を検討する必要があります。 また、 Copilot は、メイン エージェントとは別のコンテキスト ウィンドウがあるサブエージェントに作業を委任できます。 これは、メイン エージェントのコンテキストの焦点を絞った状態を保つのに役立ちます。
/context コマンドを使用したコンテキストの使い方
一部の画面では、/context スラッシュ コマンドを使用して、現在のコンテキスト ウィンドウの使用状況を視覚化できます。 出力の最初の行には、モデルのコンテキスト ウィンドウの合計容量のうち、アクティブなモデルと現在使用されているトークンの数が表示されます。 出力の残りの部分には、トークンの使用状況とコンテキスト ウィンドウの割合が表示されます。
- システム プロンプト: 基本システム プロンプト。
- カスタム命令: 読み込まれたカスタム命令 (存在する場合にのみ表示されます)。
- システム ツール: 組み込みのツール定義。
- MCP ツール: MCP サーバーによって提供されるツール定義。
- メッセージ: 会話履歴。
- 空き領域: 未使用のコンテキストは引き続き使用できます。
- バッファー: モデルの応答と余裕分のために確保される容量。
大きなツール出力の管理 Copilot CLI
1 つのツールの応答でコンテキスト ウィンドウの消費が多くなりすぎないように、既定では、20 KiB を超えるツール出力が一時ファイルに保存されます。 モデルは、完全な出力ではなく、ファイル パスとプレビューを受け取ります。 これは、MCP サーバーによって提供されるツールを含むすべてのツールに適用されます。
制限を変更するには、CLI を開始する前に、COPILOT_LARGE_OUTPUT_THRESHOLD_BYTES を正の UTF-8 バイト数に設定します。 制限を大きくすると、会話とその後のツール呼び出しで使用できるコンテキストが少なくなります。
圧縮
圧縮は、コンテキスト ウィンドウの制限に達することなく、 Copilot が実行時間の長いセッションをサポートできるようにするプロセスです。
圧縮の可用性、動作、および制御は、クライアントとサーフェスによって異なります。 例えば次が挙げられます。
- Copilot CLIとGitHub Copilot appでは、コンパクションが自動的に行われるか、
/compactを使用してトリガーできます。 - Visual Studio CodeとJetBrains IDEsでは、Copilot Extensionを使用してセッションを手動で圧縮できます。
圧縮が行われる場合
圧縮の正確なしきい値と動作は、クライアントとその構成によって異なります。
Copilot CLIでは、会話がコンテキスト ウィンドウの容量の約 80% に達すると、Copilot CLI自動的にバックグラウンドでコンテキストの圧縮が開始されます。 これにより、圧縮の進行中にツール呼び出しを引き続き実行できるように、約 20% のバッファーが残ります。 コンパクションが完了する前にコンテキストが約 95% に満たされた場合、 Copilot CLI は圧縮が完了するまでしばらく一時停止してから続行します。
Copilot CLIとGitHub Copilot appでは、/compact コマンドを入力することで、いつでも手動で圧縮をトリガーできます。 これは、新しい作業フェーズを開始しようとしている場合に、コンテキスト領域を事前に解放する場合に便利です。 気が変わる場合は、 Esc キーを押して手動圧縮をキャンセルします。
圧縮が行われる場所
圧縮は、 Copilot CLI、 GitHub Copilot app、 Copilot cloud agent、 Visual Studio Code、 Visual Studio、 JetBrains IDEs、Eclipse など、ほとんどのサポートされているクライアントで使用できますが、Xcode IDE では使用できません。
圧縮の機能
圧縮を実行すると、次の Copilot。
- 現在の会話履歴のスナップショットを取得します。
- 構造化された概要を生成するように求める特別なプロンプトを使用して、完全な会話を AI モデルに送信します。 概要では、会話の目標、何が行われたか、主要な技術的な詳細、重要なファイル、および計画された次の手順がキャプチャされます。
- 古い会話履歴を概要に置き換え、元のユーザー指示やプランまたはTo-Doリストの現在の状態も一緒に含めます。
- 圧縮の実行中に追加されたすべてのメッセージをバックグラウンドで保持します。
その結果、会話履歴がはるかに小さな要約に圧縮され、新しい作業のコンテキスト ウィンドウの大部分が解放されます。 Copilot では、元のメッセージが置き換えられたにもかかわらず、この概要を使用して継続性を維持します。これは、話し合われた内容、決定された内容、次に何を行うかを知っています。
圧縮で保持されない内容
圧縮は集計プロセスであるため、一部の詳細は必然的に失われます。 この概要では重要なポイントをキャプチャしますが、細かい詳細 (すべてのメッセージの正確な文言、すべてのコマンドの完全な出力、長い会話の早い段階で行われた小さな決定など) は含まれない場合があります。 セッションのはるかに早い段階から非常に具体的な詳細を思い出すために Copilot が必要な場合は、圧縮後にその情報が含まれていない可能性があります。
完成した圧縮を元に戻すことはできません。
圧縮なしで何が起こるか
圧縮を行わないと、コンテキスト ウィンドウがいっぱいになった場合、Copilot は最後の手段として、単に古いメッセージを会話履歴から削除し、要約や記録なしにそれらを削除することになります。 これは、コンテキストが突然失われ、削除されたメッセージの内容を Copilot が認識できなくなることを意味します。 圧縮では、履歴を破棄するのではなく、インテリジェントな要約に置き換えることで、これを回避できます。
Checkpoints
チェックポイントには、圧縮によって生成される保存された概要、ファイル編集の復元ポイント、会話をフォークできるポイントが含まれ得ます。 これらは異なる機能であり、その可用性とアクションはクライアントとサーフェスによって異なります。
この記事の残りの部分では、チェックポイント は、Copilot CLIで作成された番号付きのタイトル付きファイルなど、保存された圧縮の概要を指します。
チェックポイントが役立つ場合
- 何が起こったかを確認する: 複数の圧縮を伴う長いセッションの後、会話の以前のフェーズはアクティブなコンテキストではなくなりました。 チェックポイントを使用すると、圧縮のたびに Copilot が行ったことを読み返します。
- 継続性の確認: 続行する前に、 Copilotの概要が以前の作業を正確にキャプチャしたことを確認する場合は、最新のチェックポイントを確認できます。
- デバッグの混乱: Copilot 決定を忘れたように思われる場合や、以前の作業と矛盾する方向に進む場合、チェックポイントをチェックすると、圧縮時に保持されていた内容と、予想とは異なる要約が表示される可能性があります。
メモ
Copilot CLIを含むほとんどのクライアントでは、チェックポイントの概要が自動的に作成されます。 管理する必要はありません。必要なときには存在しています。 ほとんどのセッションでは、チェックポイントをまったく確認する必要はありません。
Copilot CLI のチェックポイントの表示
現在のセッションのすべてのチェックポイントを表示するには、次のように入力します。
/session checkpoints
/session checkpoints
これにより、番号とタイトルを持つすべてのチェックポイントが一覧表示されます。
Checkpoint History (3 total):
3. Refactoring authentication module
2. Implementing user dashboard
1. Initial planning and setup
チェックポイント番号を使用して、チェックポイントの完全な内容を表示します。 たとえば、チェックポイント 2 を表示するには、次のように入力します。
/session checkpoints 2
/session checkpoints 2
実行時間の長いセッションの使用
自動圧縮を使用すると、コンテキスト ウィンドウの制限に達することを心配することなく、実行時間の長いセッションで作業を続けられます。 これが非常に便利な場合もあれば、新しいセッションを開始したい場合もあります。
長いセッションが役立つ場合
実行時間の長いセッションは、次の場合に適切に機能します。
- スキャフォールディング、実装、テスト、プル要求の作成を必要とする機能の構築など、複数フェーズのタスクに取り組んでいます。
- あなたは問題を繰り返しており、 Copilot は何が試みられ、何がうまくいっていないかのコンテキストを保持したいと考えています。
- コードベース全体で探索的な作業を行い、時間の経過と共に Copilot との共有理解を構築しています。
新しいセッションを開始するタイミング
次の場合は、新しいセッションを開始することをお勧めします。
- 関連のないタスクに切り替えます。 Copilot は前の作業のコンテキストを必要とせず、クリーン なコンテキスト ウィンドウは新しいタスクのためのより多くの領域を意味します。
- 会話は多くの圧縮を経て、要約プロセスで重要なコンテキストが失われていると感じています。
- 新しいスタートを切りたい場合があります。たとえば、作業が間違った方向に進んでしまい、以前の決定を新しいアプローチで調整するのではなく、最初からやり直すことを選ぶ方が良いと考える場合です。
一部のクライアントとサーフェスでは、最初からやり直す代わりに、前のセッションを再開して既存の会話コンテキストを保持したまま続けられます。 再開方法とチェックポイントの可用性は、クライアントとサーフェスによって異なります。