🚀 VS Code で を入手しましょう!

GitHub Copilot エージェントモード(プレビュー)のご紹介

2025年2月24日 Isidor Nikolic

Copilot エージェントモードは、AI 支援コーディングにおける次の進化です。自律的なピアプログラマーとして、コードベースの分析、関連ファイルの読み取り、ファイル編集の提案、ターミナルコマンドとテストの実行など、複数ステップのコーディングタスクをコマンドに応じて実行します。コンパイルエラーとlintエラーに対応し、ターミナルとテストの出力を監視し、タスクが完了するまでループ内で自動修正します。本日よりすべてのVS Code Insidersユーザーが利用でき、近日中にVS Code Stableでも利用可能になります。

Copilot エージェントモードの使い方

VS Code Insiders で、Copilot Edits ビューを開き(⇧⌘I (Windows Ctrl+Shift+I, Linux Ctrl+Shift+Alt+I))、モードドロップダウンからAgentを選択し、プロンプトを入力します。

Copilot エージェントモードは、アプリをゼロから作成したり、複数のファイルにわたるリファクタリングを実行したり、テストを作成および実行したり、レガシーコードを最新のフレームワークに移行したりできます。ドキュメントを自動生成したり、新しいライブラリを統合したり、複雑なコードベースに関する質問に答えたりすることもできます。Copilot エージェントモードは、ワークスペースを理解する AI コラボレーターを持つことで、生産性を大幅に向上させるのに役立ちます。内部の開発フローを調整しながら、ユーザーが制御できるようにします。

Copilot エージェントモードは、目的の結果を達成するためにより自律的かつ動的な方法で動作します。リクエストを処理するために、Copilot は次の手順をループし、必要に応じて複数回繰り返します。

  • 編集する関連コンテキストとファイルを自律的に特定します。
  • タスクを完了するためのコード変更とターミナルコマンドの両方を提案します。たとえば、Copilot はコードのコンパイル、パッケージのインストール、テストの実行などを行う場合があります。
  • コード編集とターミナルコマンド出力の正確性を監視し、問題を修正するために反復処理を行います。

Copilot エージェントモードは、これらのタスクを達成するために一連のツールを使用します。

Screenshot of the Copilot agent mode, and the proposed inline changes

理想的な世界では、Copilot エージェントモードの最終出力だけを気にすればよいのですが、誤りを犯したり、軌道から外れたりすることがあります。そのような状況で簡単に介入して元に戻せるように、すべてのツール呼び出しは UI に透過的に表示され、ターミナルツールには承認が必要であり、豊富なアンドゥ機能をサポートしています。ビューのタイトルバーにある最後の編集を元に戻すコントロールを使用して、最後の編集が適用される前の状態に戻すことができます。完璧なソリューションを得るために1つの長く詳細なプロンプトに頼るのではなく、Copilot と反復処理を行う必要があります。UI は反復処理用に構築されており、プロセスを完全に制御して最終結果がより良くなるようにします。

Copilot エージェントモードは、適切なワークスペースツールを呼び出すことで、正確なコンテキストを自動的に見つけ、ファイルのワーキングセットを設定します。Copilot をより正確にガイドするには、#fileを使用してコンテキストを明示的に参照したり、ドラッグアンドドロップを使用したり、ファイルの追加ボタンをクリックしたりすることができます。たとえば、specifications.mdファイルを作成し、それをコンテキストとして追加して Copilot をより適切に制御したり、カスタム指示を設定して、Copilot がコーディングガイドラインやその他の設定を尊重するようにしたりできます。

Copilot エージェントモードはプロンプトごとに複数のリクエストを送信する可能性があるため、通常のエディットモードほど速くはなく、無料の Copilot クォータをすぐに使い果たす可能性があることに注意してください。明確に定義され、範囲が限定されたタスクの場合は、エディットモードを使用してください。複数の編集が必要な場合や、よりオープンエンドなタスクの場合は、エージェントモードに切り替えてください。

仕組み

Diagram showing the inner works of agent mode and how it interacts with context, LLM and tools

エージェントモードで Copilot にリクエストを送信すると、モデルドロップダウンから選択した LLM にプロンプトが作成されます。このプロンプトには以下が含まれます。

  • あなたのクエリ
  • ワークスペースの要約された構造(トークンを節約するために、完全なコードベースの代わりに)
  • マシンコンテキスト(例:使用している OS)
  • ツールの説明(オプションでツール呼び出し結果)

LLM が呼び出すための一連のツールを定義します。各ツールには、Copilot がジョブを完了するのに役立つ独自の機能があります。これらのツールを使用して、Copilot はワークスペースを検索したり、ファイルの内容を読み取ったり、ターミナルでコマンドを実行したり、エディターからコンパイルエラーまたは lint エラーを取得したり、投機的デコーダーエンドポイント(パフォーマンス改善が進行中)を介して提案された変更を適用したりできます。ツールのリストは拡大し続けており、エージェントモードでの Copilot の機能を向上させる可能性のある他のツールを実験しています。

Screenshot Copilot agent mode proposing a terminal tool to "npm run dev"

各ツールには、LLM がツールをいつ、どのように使用するかについての詳細な指示があります。例として、read_fileツールの説明を次に示します。

{
  "name": "read_file",
  "description": "Read the contents of a file. You must specify the line range you're interested in, and if the file is larger, you will be given an outline of the rest of the file. If the file contents returned are insufficient for your task, you may call this tool again to retrieve more content.",
  "parameters": {
    "type": "object",
    "properties": {
      "filePath": {
        "description": "The absolute paths of the files to read.",
        "type": "string"
      },
      "startLineNumberBaseZero": {
        "type": "number",
        "description": "The line number to start reading from, 0-based."
      },
      "endLineNumberBaseZero": {
        "type": "number",
        "description": "The inclusive line number to end reading at, 0-based."
      }
    },
    "required": ["filePath", "startLineNumberBaseZero", "endLineNumberBaseZero"]
  }
}

私たちの開発時間の多くは、これらのツールの説明とシステムプロンプトを洗練し、LLM がツールを正確に使用するようにすることに費やされました。これは、Anthropic が効果的なエージェントの構築に関するブログでも指摘しています。自動評価はありますが、プロンプトと説明を更新し、それらが実際のユースケースでどのように動作するかを確認することの間には、まだ多くのやり取りがあります。

GPT-4o と Claude Sonnet で異なる動作が見られますが、今のところ、これらのモデルに同様のシステムプロンプトを送信しています。今後、Copilot エージェントモードのサポートをより多くの LLM に拡大するにつれて、各モデルに合わせてプロンプトを特別に調整する予定です。

私たちはセルフホスティングが大好きです

VS Code の初日から、私たちはセルフホスティングを強く信じてきました。チームが本番環境に対応した変更を行うために新機能を使用していない場合、その機能には問題があります。私たちにとって、それはそれほど単純なことです。

私たちのチームは 200 を超える GitHub リポジトリを所有しており、Copilot エージェントモードは、すでに生産性の向上を推進している小さなリポジトリで優れていることがわかりました。Copilot にオープンエンドな質問をする機能は、リポジトリのサイズに関係なく優れています。たとえば、特定の機能がどこに、どのように実装されているかなどです。vscode のような大規模なコードベースでの複数ファイルにわたるリファクタリングは、今日のソフトウェアエンジニアリングエージェントにとって困難な課題です。複雑なリポジトリでの Copilot エージェントモードの改善は、私たちのチームにとってより多くのセルフホスティングの機会を、そしてユーザーにとっては役立つインタラクションを解き放ちます。

セルフホスティングとは別に、VS Code チームのメンバーは、天気予報、食事計画、コーヒー消費量ジムでのワークアウトなどの趣味のプロジェクトで Copilot エージェントモードを使用することを楽しんでいます。

現在、VS Code チームは、Copilot エージェントモードのユースケースで GPT-4o よりも Claude Sonnet を好んでいます。Claude 3.7 Sonnet の初期テストでは、Copilot エージェントモードの機能が大幅に改善されていることがわかりました。

本日より利用可能

Copilot エージェントモードはプレビュー段階であり、本日よりすべてのVS Code Insidersユーザーが利用できます。私たちは Copilot を改善するために文字通り毎日コードをプッシュしているため、VS Code Insiders での体験は日々向上しています(例:今日、提案されたターミナルコマンドを編集する機能をプッシュしました)。私たちのリポジトリでフィードバックをお待ちしております。Copilot エージェントモードをどのように使用したいか教えてください。提供する機能がユーザーにインパクトを与えるようにします。

次に、私たちは以下に取り組む予定です。

  • きめ細かいアンドゥ機能
  • コンテキスト UI (ワーキングセット) の簡素化
  • ノートブックのサポート(現時点では、編集セッションはテキストエディターでのみ機能します)
  • 特定のターミナルコマンドを自動承認する機能
  • ターミナルツール UI の改善(例:ターミナルコマンド出力をインラインで表示)
  • エージェントモードのツールとして、ツールの拡張性MCP サーバーを検討しています。拡張機能のアイデアがある場合は、教えてください
  • チャットと編集のエクスペリエンスの統合
  • 並行して、Copilot エージェントモードをすべての VS Code Stable ユーザーに出荷することを目標に、品質とパフォーマンスを向上させています。

Copilot エージェントモードの詳細な概要については、公式ドキュメントをお読みください。

Copilot エージェントモードに興奮しています。今日お試しいただき、ご感想をお聞かせください。

ハッピーなバイブスでコーディングを!

Isidor と VS Code チーム