AIのコンテキストを管理する
適切なコンテキストを提供することで、VS CodeのAIからより関連性の高く正確な応答を得ることができます。この記事では、チャットでコンテキストを管理する方法について説明します。これには、#-メンションを使用してファイル、フォルダー、シンボルを参照する方法、Webコンテンツを参照する方法、またはカスタム指示を使用してAIの応答を誘導する方法が含まれます。
Implicit context
VS Codeは、現在の活動に基づいて、チャットプロンプトにコンテキストを自動的に提供します。以下の情報がチャットコンテキストに暗黙的に含まれます
- アクティブなエディターで現在選択されているテキスト。
- アクティブなエディターのファイル名またはノートブック名。
VS Codeは、アクティブなファイルをチャット入力ボックスにコンテキスト項目として自動的に追加します(現在のファイルとして表示されます)。コンテキスト項目を選択すると、チャットコンテキストから除外されます。
#-メンション
チャットでは、参照したいコンテキスト項目の後に#
と入力することで、明示的にコンテキストを参照できます。これにより、AIはあなたが参照している特定のコンテキストに基づいて、より関連性の高い応答を提供できるようになります。
チャット入力フィールドに#
記号を入力すると、利用可能なコンテキスト項目の一覧が表示されます。
特定のワークスペースファイル、フォルダー、またはコードシンボルを参照するには、#
の後にファイル名、フォルダー名、またはシンボル名を入力します。チャットでファイルとフォルダーを参照するの詳細については、こちらをご覧ください。
または、利用可能な定義済みコンテキスト項目(変更されたファイルの差分を取得する#changes
や、ワークスペースのコードベース検索を実行する#codebase
など)から選択してください。
github.copilot.chat.codesearch.enabled (プレビュー)設定を有効にして、最適な結果を得るようにしてください。
サポートされているコンテキスト項目の全リストは、チートシートのチャット変数セクションを参照してください。
プロンプトの例
以下の例は、チャットプロンプトで#-メンションを使用する方法を示しています
保留中のソース管理の変更を参照する
"#changesを要約してください"
"#changesに基づいてリリースノートを生成してください"
コードベースを理解する
"#codebaseで認証がどのように機能するか説明してください"
"データベース接続文字列はどこで設定されていますか? #codebase"
"この#codebaseをビルドするにはどうすればよいですか?"
"#getUserはどこで使われていますか? #usages"
コードベースと整合性のとれたコードを生成する
"アバウトページを作成し、ナビゲーションバーに含めてください #codebase"
"アドレス情報を更新するための新しいAPIルートを追加してください #codebase"
"ログインボタンを追加し、#styles.cssに基づいてスタイルを設定してください"
ワークスペースの問題を修正する
"#problems内の問題を修正してください"
"失敗したテストを修正してください #testFailure"
拡張機能に関する情報を取得する
"このワークスペースに最適な#extensionsは何ですか?"
Webからコンテンツを参照する
"react 18で'useState'フックを使用するにはどうすればよいですか? #fetch https://18.react.dev/reference/react/useState#usage"
"アドレス情報を取得するAPIエンドポイントを構築し、#githubRepo contoso/api-templatesからテンプレートを使用してください"
ファイルをコンテキストとして追加する
AIにワークスペース内の関連ファイルやシンボルを自動的に見つけさせるには、#codebase
を使用できます。特定のファイル、フォルダー、またはシンボルをコンテキストとして提供するには、以下の方法でチャットに追加します
-
チャットメッセージでファイル、フォルダー、またはシンボルの名前の後に
#
を入力して#-メンションします。シンボルを参照するには、まずそのシンボルを含むファイルをエディターで開くようにしてください。 -
エクスプローラービュー、検索ビュー、またはエディタータブからチャットビューにファイルやフォルダーをドラッグアンドドロップして、コンテキストとして追加します。
-
チャットビューのコンテキストを追加ボタンを使用し、ファイルとフォルダーまたはシンボルを選択します。
可能な場合、ファイルを添付するとそのファイルの内容全体が含まれます。コンテキストウィンドウに収まらないほど大きい場合は、実装なしで関数とその説明を含むファイルの概要が含まれます。概要も大きすぎる場合は、ファイルはプロンプトの一部にはなりません。
コードベース検索を実行する
個々のファイルを手動で追加する代わりに、VS Codeにコードベースから適切なファイルを自動的に見つけさせることができます。これは、質問に関連するファイルがどれかわからない場合に役立ちます。
プロンプトに#codebase
を追加するか、コンテキストを追加 > ツール > codebaseを選択して、ワークスペースのコード検索を有効にします。
以下のプロンプト例は、コードベース検索の使用方法を示しています
"#codebaseで認証がどのように機能するか説明してください"
"データベース接続文字列はどこで設定されていますか? #codebase"
"アドレスを更新するための新しいAPIルートを追加してください #codebase"
github.copilot.chat.codesearch.enabled (プレビュー)設定を有効にして、最適な結果を得るようにしてください。
Webコンテンツを参照する
チャットプロンプトでWebコンテンツを参照できます。例えば、最新のAPIリファレンスやコード例を取得するためです。
-
#fetch
: このツールを使用して、特定のWebページ(フレームワークのバージョン固有のドキュメントページなど)からコンテンツを取得します。このツールを使用するには、参照したいページのURLの後に#fetch
と入力します。"VS Code 1.100のハイライトは何ですか? #fetch https://vscode.dokyumento.jp/updates/v1_100"
"asp.netアプリを.net 9に更新してください #fetch https://learn.microsoft.com/en-us/aspnet/core/migration/80-90"
-
#githubRepo
: このツールを使用して、GitHubリポジトリ内でコード検索を実行します。例えば、別のプロジェクトのコードパターンや例を参照するためです。#githubRepo
の後にリポジトリ名(例:microsoft/vscode-docs
)を入力します。"next.jsでルーティングはどのように機能しますか? #githubRepo vercel/next.js"
"#githubRepo microsoft/typescriptと整合性があるか検証するためにコードレビューを実行してください"
"私のアプリの単体テストを追加してください。#githubRepo rust-lang/rustと同じテスト設定と構造を使用してください"
ツールを参照する
VS Codeのチャットにはいくつかの組み込みツールがあり、MCPサーバーや拡張機能からのツールでさらに拡張できます。例えば、#fetch
ツールはWebページからコンテンツを取得できる組み込みツールです。ツールをツールセットにグループ化することもでき、その後チャットプロンプトで参照できます。
チャットプロンプトでツールまたはツールセットを直接参照するには、#
の後にツール(セット)名とオプションのツールパラメータを入力します。以下のプロンプト例は、ツールの使用方法を示しています
-
GitHub MCPサーバーツールを使用する(
mcp.json
でgithub-mcp
として設定されている)"私のオープンな課題は何ですか #github-mcp"
"contoso/tailwindtradersの課題 #123 の修正を実装してください #github-mcp"
"microsoft/vscode-docsのPR 8407は何についてですか? #github-mcp"
-
#postgres
MCPサーバーを使用してPostgreSQLデータベースをクエリする"#postgresから天気データを取得するためのAPIエンドポイントとデータアクセスレイヤーを生成してください"
"#postgresの会社名の最大長は何ですか"
@-メンション
チャット参加者は、チャットでドメイン固有の質問を可能にする特殊なアシスタントです。チャット参加者を呼び出すには、@を付けてメンションします。@
の後に参加者名を入力します。VS Codeには、@vscode
、@terminal
、@workspace
など、いくつかの組み込みのチャット参加者がいます。これらは、それぞれのドメインに関する質問に答えるように最適化されています。
以下の例は、チャットプロンプトで@-メンションを使用する方法を示しています
"@vscode 折り返しを有効にするには?"
"@terminal 現在のディレクトリで上位5つの最大ファイルは何ですか?"
チャット入力フィールドに@
を入力すると、利用可能なチャット参加者の一覧が表示されます。
拡張機能も独自のチャット参加者を提供できます。
チャット参加者は、エージェントモードの自律的なコーディングフローの一部として呼び出されるツールとは異なります。チャット参加者は、プロンプト全体を自分で処理する責任があります。
VS Codeのシンプルブラウザーから要素を追加する(実験的)
VS Codeには組み込みのシンプルブラウザがあり、ローカルでホストされているWebアプリケーションを表示したり操作したりできます。例えば、Webアプリケーションの迅速なテストやデバッグに利用できます。
シンプルブラウザウィンドウから要素をチャットプロンプトにコンテキストとして追加できます。これを行うには
-
chat.sendElementsToChat.enabled設定で、シンプルブラウザからの要素選択を有効にしてください。
-
Webアプリケーションをローカルで実行します。
-
コマンドパレットからシンプルブラウザ: 表示コマンドを実行して、シンプルブラウザビューを開きます。
-
開始ボタンを選択して、現在のページから要素の選択を開始します。
-
Webページの要素にカーソルを合わせ、クリックしてチャットプロンプトに追加します。
選択した要素が現在のチャットプロンプトにコンテキストとして追加されることに注目してください。
コンテキストに含める情報を構成できます。
- CSSを添付する - chat.sendElementsToChat.attachCSS設定で有効にします。
- 画像を添付する - chat.sendElementsToChat.attachImages設定で有効にします。
この機能は、Live Preview拡張機能(プレリリース版)でも利用できます。
チャット履歴
VS Codeのチャットは、複数ターンにわたる会話として設計されています。チャットセッション内で、VS Codeは会話の履歴を現在のプロンプトのコンテキストとして使用します。これにより、コンテキストを繰り返すことなく、追加の質問をしたり、以前の質問を明確にしたりできます。
新しいチャットセッションを開始し、現在のコンテキストを破棄するには、チャットビューで新しいチャット(+
)ボタン(⌘N (Windows, Linux Ctrl+N))を選択します。これは、別のトピックに移行し、以前のコンテキストや履歴を避けたい場合に便利です。
チャット履歴とコンテキスト管理の詳細については、こちらをご覧ください。
カスタム指示
指示ファイルを使用すると、コーディングスタイルや好みに合った応答を生成するための一般的なガイドラインやルールをAIに提供できます。指示ファイルは、ワークスペース内または現在のプロファイル内に作成できるMarkdownファイルです。
指示ファイルを使用することで、チャットプロンプトに一般的な指示を繰り返し追加する必要がなくなり、AIがこれらの指示をチャットのやり取りに自動的に適用するようになります。
指示ファイルの使用の詳細については、こちらをご覧ください。
ワークスペースのインデックス作成
VS Codeは、関連するコードスニペットをコードベース内で迅速かつ正確に検索するためにインデックスを使用します。このインデックスは、GitHubによって維持されるか、ローカルマシンに保存されます。
以下のワークスペースインデックスオプションが利用可能です
- リモートインデックス: コードがGitHubリポジトリでホストされている場合、リモートインデックスを構築して、大規模なコードベースでも迅速にコードベースを検索できます。
- ローカルインデックス: ローカルマシンに保存される高度なセマンティックインデックスを使用して、コードベースの高速かつ正確な検索結果を提供します。
- 基本インデックス: ローカルインデックスが利用できない場合、大規模なコードベースでローカルに機能するように最適化されたシンプルなアルゴリズムを使用できます。
ワークスペースのインデックス作成の詳細については、こちらをご覧ください。
関連リソース
- エージェントモードのツールについて学ぶ。
- 指示ファイルでAIをカスタマイズする。
- ワークスペースのインデックス作成について学ぶ。
- VS Codeでのチャットの開始。