GitHub Copilot「チャットを要約中」の裏側:コンテキスト圧縮の仕組みを解説
こんにちは。
最近よくGitHub Copilotを使っています。
GitHub Copilotを触っているとふと疑問に思うことがありました。
- 長い処理を指示すると右下のゲージがどんどんたまっていく
- ある一定になると「チャットを要約中」と出る。
触ってきたことがなかったので正直この要約がどの部分を要約しているのか、既に指示していた内容から必要な情報がそぎ取られたりしていないのかよく分からなかったのです。
なので今回は調べてみたことを記事にしました。
注意: 本記事は VS Code 公式ドキュメント・GitHub Issues・GitHub Changelog の一次情報のみをもとに構成しています。
Copilot Chat の内部実装(要約プロンプトの詳細・messages 配列の具体的な構造など)は Microsoft が非公開としているため、本記事では触れていません。
1. 「チャットを要約中」が何を解決しているのか
GitHub Copilot Chat(VS Code)は、会話のたびに過去の全メッセージ・ファイル参照・ツール実行結果をまとめてLLMに送信しています。会話が長くなるほどこの「送信データ」は膨らみ、やがてモデルが処理できる上限(コンテキストウィンドウ)を超えます。
この問題を解決するのが Context Compaction(コンテキスト圧縮) であり、UI上では「チャットを要約中...」として表示されます。
2. コンテキストウィンドウの構造
VS Code の公式ドキュメント(Context concepts)によると、メッセージ送信時にVS Codeが組み立てるプロンプトは以下のカテゴリで構成されます。
System instructions: エージェントの行動を定義する組み込みのガイドライン。
Customizations: カスタムエージェント、スキル、カスタム指示など、AIで設定できるカスタマイズ。
User message: エージェントに送っている現在のメッセージ。
Conversation history: 現在のセッションでこれまでにやり取りされたメッセージ。
Implicit context: 編集しているファイル、現在の選択、見えるエラー、gitの状態。
Explicit references: ファイル、編集者のコンテキスト、ウェブコンテンツ、そして#で参照するその他の情報源。
Tool outputs: ファイル読み取り、ターミナルコマンド、コードベースの検索結果、エージェントセッション中の他のツール呼び出しの結果。
Reserved Output とは
コンテキストウィンドウのうち約30%(192Kモデルの場合は約50〜60Kトークン)は、モデルが応答を生成するために静的に予約されています。これはユーザーが変更できない領域です(GitHub Community Discussion #188691)。
このため、空のチャットを開いただけでコンテキストメーターが40%前後を示すのは正常な挙動です。
3. いつ圧縮されるのか
1. 自動圧縮
会話履歴がコンテキストウィンドウを満杯にしたときに自動でトリガーされます。
Copilot CLI の実装情報(DeepWiki)では、具体的なしきい値としてトークン使用率が95%に到達したときという記述があります。
圧縮はバックグラウンドで透過的に実行され、ユーザーはそのまま会話を続けられます。
2. 手動圧縮
v1.110(2026年2月リリース)から手動トリガーが追加されました。
方法①:チャット入力欄に /compact と打つ
/compact
方法②:カスタム指示付きで圧縮
/compact focus on the database schema decisions
/compact forget about all variants, except the rust version
指示を付加することで、要約に含めたい・除外したい情報をガイドできます。
方法③:コンテキストウィンドウメーターのUIから操作
チャット入力欄に表示されているコンテキストメーターをクリックし「Compact Conversation」を選択。

/compactはローカルセッション、バックグラウンドセッション、Claude エージェントセッションで利用可能。
4. コンテキスト圧縮時に何が起きているのか
4-1. 圧縮の対象
圧縮の対象は古い会話履歴です。圧縮が走っても以下は変更されません。
| 項目 | 圧縮後の状態 |
|---|---|
| System Instructions | 変わらない |
カスタム指示(.github/copilot-instructions.md 等) |
変わらない(毎回ロードされる) |
| Tool Definitions | 変わらない |
| 古い会話履歴 | 要約テキストに置換・削除 |
公式ドキュメント には明示的に次のように記載されています:
「カスタム指示に追加したルールは、会話が要約されても引き継がれます(毎リクエストに含まれるため)」
4-2. 大きなツール出力の扱い(v1.110〜)
v1.110 以降、ファイル読み取りや検索などの大きなツール出力はコンテキストに詰め込まずディスクに書き出すようになりました。これにより、圧縮時に重要な詳細が失われにくくなっています。
4-3. エージェントのプラン記憶(v1.110〜)
v1.110 から Plan memory が導入されており、エージェントが立てたプランは圧縮をまたいでも引き継がれます。圧縮が発生してもエージェントが最初から計画を立て直すことなく作業を継続できます。
5. コンテキスト圧縮がもたらす情報損失のリスク
コンテキスト圧縮には情報損失のリスクがあります。VS Code Issues や Community Discussion では多くのユーザーが「要約後にエージェントが重要な文脈を失った」と報告しています(Discussion #162256)。
典型的な症状:
- 直前に決定した設計方針を無視した提案が来る
- フェーズ移行後に前のタスクの成果を参照できない
また、v1.110 で圧縮後のコンテキスト回収率が悪化したという報告もあります(Issue #299810)。以前は圧縮直後のコンテキスト使用率が20%以下に戻っていたが、v1.110 では50%前後に留まるケースが確認されています。
情報を損失しないための(極小に抑えるための)対策
| 対策 | 説明 | 根拠 |
|---|---|---|
| カスタム指示を活用 |
.github/copilot-instructions.md に重要な方針・制約を書いておく。圧縮後も毎回ロードされる |
公式ドキュメント |
/compact を能動的に使う |
フェーズ移行などの区切りで手動圧縮し、要約品質をコントロールする | 公式ドキュメント |
/compact に指示を付ける |
focus on... / forget about... で重要情報を明示的にガイドする |
GitHub Changelog v1.110 |
| 新セッションを切る | 全く別タスクに移るときは新しいチャットを開始する | 公式 Best Practices |
| サブエージェントを使う | 調査・探索タスクをサブエージェントに分離し、メイン会話のコンテキストを節約する | 公式 Best Practices |
6. まとめ:コンテキスト圧縮で「保持される」ものと「失われる」もの
圧縮後も保持されるもの(公式確認済み)
- System Instructions(Copilotのコアルール)
-
.github/copilot-instructions.mdなどのカスタム指示(毎リクエストで再ロード) - Tool Definitions
- エージェントのプラン(Plan memory)※v1.110〜
- ディスクに書き出された大きなツール出力 ※v1.110〜
圧縮されると失われる可能性があるもの
- 古い会話の詳細
- 途中で参照したコードスニペット(明示的な
#file参照なしの場合) - ツール実行の詳細ログ
参考情報源
| 情報源 | 内容 |
|---|---|
| VS Code 公式 - Manage context for AI | /compact コマンド・自動圧縮の公式説明 |
| VS Code 公式 - Context concepts | プロンプト構造の公式説明 |
| VS Code 公式 - Best practices | セッション管理・/compact 活用の公式推奨 |
| GitHub Changelog v1.110 (Feb 2026) | 手動 /compact・Plan memory・大出力ディスク書き出しのリリースノート |
| DeepWiki - Copilot CLI Context & Token Management | 95%しきい値の実装情報 |
| GitHub Community Discussion #188691 | Reserved Output の構造と割合 |
| GitHub Community Discussion #162256 | 圧縮後のコンテキスト損失事例 |
| microsoft/vscode Issue #299810 | v1.110での圧縮効率低下の報告 |