エージェント
エージェントは、コーディングタスクを自律的に計画し実行するAIシステムです。エージェントに高レベルの目標を与えると、目標をステップに分解し、それらのステップをツールを使って実行し、エラーが発生した際には自己修正します。この記事では、エージェントのコアアーキテクチャであるエージェントループ、エージェントの種類、サブエージェント、メモリ、およびプランニングについて説明します。
VS Codeでは、ワークフローに合った方法でエージェントを操作できます。2つのUIから選択し、自由に切り替えることができます。
- チャットビュー: コードを記述する際に、メインのVS Codeウィンドウに留まり、エディター、デバッガー、拡張機能と並行してAIのサポートを利用したい場合。
- エージェントウィンドウ (プレビュー): プロンプトで思考し、複数のプロジェクトにわたるエージェントセッションをオーケストレーションしたい場合に、エージェントファーストのUIに切り替えます。
エージェントループ
エージェントにタスクを与えると、エージェントはエージェントループに従います。このパターンは、最新のAIアシスタントに共通しています。VS Code内では、エージェントは計画を立てて行動するシステムであり、言語モデルはそれらの行動を知らせる応答を生成します。
各ステップで、エージェントは進捗を評価し、次のアクションを選択します。APIを理解するためにファイルを開いたり、編集を行ったり、変更が機能したことを確認するためにコマンドを実行したりする場合があります。各アクションの出力は、次の決定のための入力となります。

エージェントループは通常、3つの高レベルなステージを含みます。
- 理解。 エージェントは、ファイルを読み込み、コードベースを検索し、ドキュメントを参照して、何を変更する必要があるかを理解します。
- 実行。 エージェントは、コードを修正し、ターミナルコマンドを実行し、依存関係をインストールし、またはツールを介して外部サービスを呼び出します。
- 検証。 エージェントはテストを実行し、コンパイラエラーをチェックし、自身の変更をレビューします。何らかの問題がある場合は、イテレーションを続けます。
エージェントは、最適な行動方針について推論するために言語モデルを使用します。しかし、環境と対話する能力がなければ、モデルは一般的な応答を提供することに限定されます。ツールを使用することで、エージェントは各ステップでツール呼び出しを行い、情報を収集し、ファイルの読み込み、コードの変更、ターミナルコマンドの実行、外部サービスへのアクセスなどのアクションを実行します。
エージェントは、タスクを完了するまで必要に応じてこれらのアクションを連鎖させます。コードベースに関する質問に答えるだけなら、数回のファイル読み込みで済むかもしれません。新しい機能を実装する場合、通常は編集、テスト実行、失敗診断、そしてテストが合格するまで再び編集を繰り返すループとなります。
舞台裏では、VS Codeが現在のコンテキストをプロンプトに組み立て、それを言語モデルに送信します。モデルはテキスト、コード編集、またはツールリクエストで応答します。ツールが実行されると、その出力が次のイテレーションのコンテキストに追加され、このサイクルはタスクが完了するまで繰り返されます。
プロセス全体を通して、あなたはコントロールを維持します。新しいメッセージを送信して、エージェントをリダイレクトしたり、コンテキストを追加したり、別のアプローチを提案したりできます。変更のレビューとエージェントの動作管理の詳細については、信頼と安全性を参照してください。
エージェントループのカスタマイズ
エージェントループは万能ではなく、プロジェクトごとに異なる場合があります。エージェントの動作をパーソナライズするためのさまざまなオプションがあります。
- A カスタムエージェントを使用すると、異なるペルソナを定義でき、それぞれに独自の指示、利用可能なツール、言語モデルを設定し、必要に応じて他のエージェントに引き継ぐことができます。
- With エージェントスキルを使用すると、特定領域やタスクのための新しい機能をエージェントに教えることができます。
- フックは、エージェントループ内の特定のライフサイクルポイントでカスタムコマンドを実行します。
カスタマイズの概念について詳しく学ぶ。
エージェントの種類
エージェントは、結果が必要な時期と監視の度合いに応じて、異なる環境で実行されます。2つの主要な側面は、エージェントがどこで実行されるか(ローカルマシンかクラウドか)と、どのように対話するか(対話的か、バックグラウンドで自律的か)です。

VS Codeでエージェントを使用することについて詳しく学びましょう。タスクに適したエージェントの種類を選択するのに役立つ決定表も含まれています。
サブエージェント
複雑なタスクに取り組む際、メインエージェントはサブタスクをサブエージェントに委任できます。サブエージェントは、トピックの調査やコード分析など、集中的な作業を実行し、その結果をメインエージェントに報告する独立したAIエージェントです。
サブエージェントの主な利点は、コンテキストの最適化です。サブエージェントがない場合、研究中のすべてのファイル読み込み、検索結果、中間ステップがメインエージェントのコンテキストウィンドウに蓄積され、重要な情報が埋もれてしまう可能性があります。サブエージェントは独立したコンテキストウィンドウで作業を行い、要約のみを返し、メインの会話を現在のタスクに集中させます。
サブエージェントの主な特徴
- コンテキスト分離: 各サブエージェントは独自のコンテキストウィンドウで実行されます。メインエージェントの会話履歴や指示を継承しません。タスクプロンプトのみを受け取ります。
- 同期実行: サブエージェントの発見は通常次のステップに影響するため、メインエージェントはサブエージェントの結果を待ってから続行します。
- 並列実行: VS Codeは、セキュリティ、パフォーマンス、アクセシビリティの分析などを同時に行うタスクのために、複数のサブエージェントを並列で起動できます。
- 集中的な結果: 最終結果のみがメインエージェントに返され、メインコンテキストが集中し、トークン使用量が削減されます。
例えば、組み込みの計画エージェントは、実装計画を作成する前にサブエージェントを使用して調査と分析を実行します。各サブエージェントは自律的に動作し、その結果のみを返します。
サブエージェントの使用について詳しく学ぶ。
コードファースト vs. エージェントファースト
開発プロセスでAIと連携するにはさまざまな方法があり、適切なアプローチはあなたの好みと現在のタスクによって異なります。VS Codeで異なるワークフローをサポートするためにAIと連携する主な方法は2つあります。
-
コードファースト: エディターでコードを書き、AIをコーディングアシスタントとして使用して、機能の実装、バグ修正、コードのリファクタリングを支援します。主なインターフェースは、コードのレビューと編集、テスト、デバッグを行うためのエディターです。AIを使用して、既存のコーディングワークフローを強化します。
-
エージェントファーストまたはタスクファースト: チャットで(高レベルの)タスクと要件を記述し、それをAIエージェントに渡します。エージェントは計画、実装、結果の検証を行います。主なインターフェースは、作業を整理するためのチャットとセッションリストであり、エディターは必要に応じてAIの実装をレビューおよび調整するための二次的なインターフェースです。AIを使用して作業方法を転換し、問題の定義とソリューションのレビューに集中します。
エージェントウィンドウは、VS Codeにネイティブに組み込まれたエージェントファーストのアプローチ向けに構築されています。すべてのプロジェクトにわたるエージェントセッションを管理するための集中環境を提供し、チャットがエージェントと対話するための中央インターフェースとなります。エージェントウィンドウは、コードファーストのアプローチに最適化されたメインのVS Codeウィンドウ内のチャットビューを補完します。
どちらのUIもセッションや、設定やキーバインディングといったVS Codeの設定を共有するため、どちらか一方に限定する必要はありません。チャットビューは、AIがコーディングを支援しながら、フル機能のエディター、デバッグ、ノートブック、拡張機能エコシステム、リモート開発を利用したい場合に使用します。エージェントウィンドウは、プロンプトで思考し、複数のプロジェクトにわたる作業をオーケストレーションし、AIのカスタマイズ(プラグイン、スキル、MCPなど)を最優先したい場合に使用します。
チャットセッション
チャットセッションは、エージェントとの単一の会話であり、すべてのプロンプト、応答、および途中で蓄積されたコンテキストを含みます。各セッションは独立しており、独自のコンテキストウィンドウを持つため、あるセッションでの作業が別のセッションに漏れることはありません。セッションはエージェント作業の組織単位です。複数のセッションを並行して実行したり、それらを切り替えたり、別の方向性を探るためにセッションをフォークしたり、以前のチェックポイントにロールバックしたりできます。
Because the チャットビューとエージェントウィンドウは同じセッションを共有しているため、一方のUIでタスクを開始し、もう一方のUIで続行することができます。セッションリストは、どこで実行されているかに関わらず、すべてのセッションを統合して表示します。
チャットセッションの管理について詳しく学ぶ。
リモートエージェントセッション
エージェントセッションは、ローカルマシンで実行する必要はありません。リモートホストでセッションを実行し、エージェントウィンドウ、ブラウザ、またはその他のクライアントから接続できます。これは、リモートマシンのリソースを活用したい場合、離れている間にセッションを実行し続けたい場合、または別のデバイスから進行状況を監視したい場合に便利です。リモートマシンは電源が入っており、ネットワーク経由でアクセス可能である必要があります。
VS Codeは、リモートエージェントセッションと連携する2つの方法をサポートしています。
| 方法 | 仕組み |
|---|---|
| エージェントウィンドウ リモート接続を利用 |
エージェントウィンドウをSSHまたは開発トンネル経由でリモートマシンに接続します。エージェントウィンドウは、リモートマシンにVS Code CLIを自動的にインストールして起動し、セッションを管理するエージェントホストプロセスを実行します。 複数のクライアントが同じエージェントホストに同時に接続し、オープンなAgent Host Protocol (AHP)を使用して、すべてのセッションの同期ビューを確認できます。すべてのクライアントが切断しても、セッションはリモートで実行され続けます。 リモートマシンへの接続について詳しく学ぶ。 |
| Copilot CLI リモートコントロール |
Copilot CLIセッションで/remote onコマンドを使用して、セッションをGitHubにミラーリングします。これにより、セッションがマシンで実行され続ける間、github.comまたはGitHubモバイルアプリからセッションを監視および操作できます。Copilot CLIセッションのリモートコントロールについて詳しく学ぶ。 |
メモリ
エージェントは、会話間でコンテキストを保持するためにメモリを使用します。各セッションで最初から始めるのではなく、エージェントはあなたの好みを記憶し、以前のタスクから得た教訓を適用し、時間とともにコードベースに関する知識を構築します。
VS Codeは、2つの補完的なメモリシステムをサポートしています。
- メモリツール: マシンにローカルでノートを保存する組み込みツールで、3つのスコープに整理されています。
- ユーザーメモリ (
/memories/): すべてのワークスペースと会話にわたって持続します。最初の200行は、すべてのセッションに自動的にロードされます。 - リポジトリメモリ (
/memories/repo/): 現在のワークスペースにスコープされ、会話にわたって持続します。 - セッションメモリ (
/memories/session/): 現在の会話にスコープされ、終了時にクリアされます。
- ユーザーメモリ (
- Copilotメモリ: Copilotの各UI(コーディングエージェント、コードレビュー、CLI)全体でリポジトリ固有の洞察をキャプチャするGitHubホスト型のメモリシステムです。VS Codeを超えてGitHub Copilot全体で共有されます。
VS Codeエージェントのメモリについて詳しく学ぶ。
計画
複雑なタスクの場合、すぐにコード生成に飛び込むと、不完全な実装や誤ったアーキテクチャ上の決定につながる可能性があります。組み込みの計画エージェントは、コード変更を行う前に、タスクを調査し、詳細な実装計画を作成するためにあなたと協力します。これにより、要件が理解され、エッジケースが特定され、エージェントがコードを書き始める前にアプローチについて合意が形成されます。
計画エージェントは4段階の反復ワークフローを使用します。
- 発見: 読み取り専用ツールとコードベース分析を使用してタスクを調査します。
- 調整: 曖昧さを解消するために明確化の質問を行います。
- 設計: 構造化された実装計画を草案します。
- 洗練: あなたのフィードバックに基づいて計画を反復します。
計画エージェントは、計画がレビューされ承認されるまでコード変更を行いません。承認されたら、計画をデフォルトのエージェントに引き渡すか、さらに洗練するために保存することができます。
エージェントを使った計画について詳しく学ぶ。