コンテキスト
コンテキストとは、モデルが回答を生成する際に参照できるすべての情報のことです。これには、会話履歴、ワークスペース内のファイル内容、ツール出力、カスタム指示、そして明示的に追加したあらゆる参照先が含まれます。モデルは見えている情報に基づいてしか推論できないため、適切なコンテキストを提供することはAIの回答精度を向上させる最も効果的な方法の一つです。
この記事では、VS Codeがどのようにコンテキストを組み立てるのか、どのような種類のコンテキストが利用可能か、そしてコンテキストウィンドウの制限の中でいかに効果的に作業を行うかについて説明します。
コンテキストが重要な理由
関連するファイル、明確な指示、焦点を絞った履歴を含むプロンプトは、コンテキストのない曖昧なプロンプトよりも優れた結果をもたらします。モデルは過去のセッションを記憶しておらず、与えられていないファイルにアクセスすることもできません。モデルがあなたのタスクについて知っているすべての情報は、現在のリクエストのために組み立てられたコンテキストから得られます。
VS Codeがコンテキストを組み立てる仕組み
メッセージを送信すると、VS Codeは複数のソースから言語モデル用のプロンプトを構築します

- システム指示: エージェントの動作を定義する組み込みのガイドライン。
- カスタマイズ: カスタムエージェント、スキル、カスタム指示など、設定したAIのカスタマイズ。
- ユーザーメッセージ: エージェントに送信する現在のメッセージ。
- 会話履歴: 現在のセッションでこれまでやり取りされたメッセージ。
- 暗黙的なコンテキスト: 編集中のファイル、現在の選択範囲、表示されているエラー、gitの状態。
- 明示的な参照:
#メンションを使用して参照するファイル、エディタのコンテキスト、Webコンテンツ、その他のソース。 - ツール出力: エージェントセッション中に実行されたファイル読み込み、ターミナルコマンド、コードベース検索結果、その他のツール呼び出しの結果。
このように組み立てられたプロンプトが、モデルに見えているすべてです。これ以外の情報はモデルからは見えません。そのため、モデルが見ていないコードについて尋ねるよりも、#fileを使用して特定のファイルを参照する方が良い結果が得られるのです。
ワークスペースのインデックス作成
VS Codeはインデックスを使用して、コードベースから関連するコードスニペットを迅速かつ正確に検索します。このインデックスは、GitHubによって管理されるか、ローカルマシンに保存されます。
- リモートインデックス: コードがGitHubリポジトリでホストされている場合、リモートインデックスを構築することで、大規模なコードベースであってもコードベースを迅速に検索できます。
- ローカルインデックス: ローカルマシンに保存された高度なセマンティックインデックスを使用して、迅速かつ正確な検索結果を得ることができます。
- 基本インデックス: ローカルインデックスが利用できない場合、より大規模なコードベースに対しては、より単純なアルゴリズムがローカルで機能します。
ワークスペースのインデックス作成について詳しく学ぶ。
暗黙的なコンテキスト
VS Codeは、現在の活動に基づいてプロンプトにコンテキストを自動的に提供します
- アクティブなエディタで現在選択されているテキスト。
- アクティブなエディタのファイル名またはノートブック名。
- Ask エージェントを使用している場合、アクティブなファイルは自動的にコンテキストとして含まれます。
- Agent を使用している場合、プロンプトに基づいてアクティブなファイルを追加すべきかどうかを自律的に判断します。
コンテキストを効果的に活用する
- タスクごとに新しいセッションを開始する。 セッションは、独自のコンテキストウィンドウと履歴を持つ独立した会話です。各セッションは真っさらな状態から始まるため、無関係なタスクのために単一の会話を使い回さないようにしてください。
- コンテキストを選択的に使用する。 コードベース全体を追加することが常に役立つとは限りません。タスクに関連する特定のファイルを参照してください。
- 永続的なルールにはカスタム指示を使用する。 カスタム指示に追加したルールはすべてのリクエストに含まれるため、会話が要約されたときにルールが失われることはありません。
例
以下の例は、コンテキストを追加することで結果がいかに改善されるかを示しています
曖昧なプロンプト(コンテキストなし):
How does authentication work?
モデルには、あなたがどのプロジェクトを指しているかを知る術がなく、認証パターンに関する一般的な回答を返します。
明示的なコンテキストを含むプロンプト:
How does authentication work for this project?
モデルは実際の認証ファイルを読み込み、特定の関数や設定値を参照しながら、あなたの実装がどのように機能するかを説明します。
Webコンテキストを含むプロンプト:
Migrate the auth module to the latest passport.js API #fetch https://www.passportjs.org/concepts/authentication/
モデルはWeb上の最新のドキュメントを使用して移行をガイドし、トレーニングデータに含まれる古いAPIパターンを避けます。
チャットへのコンテキストの追加について詳しく学ぶ。