エージェント型開発を探求する -

エージェント

エージェントとは、コーディングタスクを自律的に計画し実行するAIシステムのことです。エージェントに高レベルの目標を与えると、エージェントはその目標をステップに分解し、ツールを使用してそれらのステップを実行し、エラーが発生した場合には自己修正を行います。この記事では、エージェントのコアアーキテクチャであるエージェントループ、エージェントのタイプ、サブエージェント、メモリ、および計画について解説します。

エージェントループ

タスクをエージェントに与えると、エージェントは「エージェントループ」に従います。このパターンは、現代のAIアシスタント全般で一般的です。VS Codeにおいてエージェントとは、計画を立ててアクションを実行するシステムであり、言語モデルはそれらのアクションを導くための応答を生成します。

各ステップで、エージェントは進捗状況を評価し、次のアクションを選択します。APIを理解するためにファイルを開いたり、編集を行ったり、その後コマンドを実行して変更が機能したことを検証したりします。各アクションの出力は、次の決定のための入力となります。

Diagram showing the agentic loop: User prompt -> Agent reasoning -> Tool calls (read files, edit code, run tests) -> Agent updates based on tool results -> Final output for user review

エージェントループは、通常3つの高レベルなステージで構成されます

  1. 理解(Understand):エージェントはファイルを読み込み、コードベースを検索し、ドキュメントを参照して、何を変更する必要があるのかを把握します。
  2. 実行(Act):エージェントはコードを修正し、ターミナルコマンドを実行し、依存関係をインストールし、またはツールを通じて外部サービスを呼び出します。
  3. 検証(Validate):エージェントはテストを実行し、コンパイラエラーを確認し、自身の変更をレビューします。何らかの問題があれば、反復を継続します。

エージェントは言語モデルを使用して、最適なアクションコースを推論します。しかし、環境と対話する能力がなければ、モデルは一般的な応答を返すことしかできません。ツールがあれば、エージェントは各ステップでツール呼び出しを行い、情報を収集したり、ファイルの読み込み、コード変更、ターミナルコマンドの実行、外部サービスへのアクセスといったアクションを実行したりできます。

エージェントは、タスクが完了するまで必要に応じてこれらのアクションを連鎖させます。コードベースに関する質問に答えるだけなら、数回のファイル読み込みで済むかもしれません。新しい機能を実装する場合は、通常、「編集 → テスト実行 → 失敗の診断 → 再編集」というループを繰り返し、テストがパスするまで作業を続けます。

舞台裏では、VS Codeが現在のコンテキストを組み立て、プロンプトとして言語モデルに送信します。モデルはテキスト、コードの編集、またはツールリクエストで応答します。ツールが実行されると、その出力が次の反復のためのコンテキストに追加され、タスクが完了するまでこのサイクルが繰り返されます。

プロセス全体を通じて、ユーザーが制御を維持します。新しいメッセージを送信してエージェントを誘導したり、コンテキストを追加したり、別のアプローチを提案したりすることができます。変更のレビューやエージェントの動作管理の詳細については、「信頼と安全性」を参照してください。

エージェントループをカスタマイズする

エージェントループは万能ではなく、プロジェクトごとに異なる場合があります。エージェントの動作をパーソナライズするためのさまざまなオプションがあります。

  • カスタムエージェントを使用すると、独自の指示、使用可能なツール、言語モデルを持ち、必要に応じて他のエージェントに引き継ぐことができる、さまざまなペルソナを定義できます。
  • エージェントスキルを使用すると、特定のドメインやタスクに対する新しい機能をエージェントに教え込むことができます。
  • フック(Hooks)は、エージェントループの特定のライフサイクルポイントでカスタムコマンドを実行します。

カスタマイズのコンセプトについて詳しく学びましょう。

エージェントのタイプ

エージェントは、結果がいつ必要か、どの程度の監視が必要かに応じて、さまざまな環境で実行されます。重要な2つの側面は、エージェントが「どこで」実行されるか(ローカルマシンかクラウドか)と、「どのように」対話するか(対話型か、バックグラウンドでの自律型か)です。

Diagram showing the different agent types: Local agents (interactive in VS Code), Background agents (autonomous on your machine), Cloud agents (run on GitHub's infrastructure), and Third-party agents (connect external AI providers).

VS Codeでのエージェントの使用について、タスクに適したエージェントタイプを選択するための決定表など、詳細を学びましょう。

サブエージェント

複雑なタスクに取り組む際、メインエージェントはサブタスクをサブエージェントに委任できます。サブエージェントは、トピックの調査やコードの分析など、焦点を絞った作業を行う独立したAIエージェントであり、結果をメインエージェントに報告します。

サブエージェントの主な利点はコンテキストの最適化です。サブエージェントがない場合、調査中のすべてのファイル読み込み、検索結果、中間ステップがメインエージェントのコンテキストウィンドウに蓄積され、重要な情報が埋もれてしまう可能性があります。サブエージェントは別のコンテキストウィンドウで作業を行い、要約のみを返すため、メインの会話は現在取り組んでいるタスクに集中できます。

サブエージェントの主な特徴

  • コンテキストの分離:各サブエージェントは独自のコンテキストウィンドウで実行されます。メインエージェントの会話履歴や指示を継承せず、タスクプロンプトのみを受け取ります。
  • 同期実行:サブエージェントの調査結果は通常次のステップに影響するため、メインエージェントは結果が出るまで待機します。
  • 並列実行:VS Codeは、セキュリティ、パフォーマンス、アクセシビリティの分析など、複数のサブエージェントを並列で実行できます。
  • 焦点の絞られた結果:最終結果のみがメインエージェントに返されるため、メインのコンテキストを整理し、トークン消費を抑えます。

例えば、組み込みの計画エージェント(Plan agent)は、実装計画を作成する前にサブエージェントを使用して調査や分析を行います。各サブエージェントは自律的に作業し、発見した内容のみを返します。

サブエージェントの使用について詳しく学びましょう。

メモリ

エージェントはメモリを使用して、会話全体でコンテキストを保持します。セッションごとにゼロから始めるのではなく、エージェントは好みを記憶し、過去のタスクからの教訓を適用し、時間の経過とともにコードベースに関する知識を蓄積します。

VS Codeは、2つの補完的なメモリシステムをサポートしています。

  • メモリツール:ローカルマシン上にノートを保存し、3つのスコープで整理する組み込みツールです。
    • ユーザーメモリ (/memories/):すべてのワークスペースと会話で永続化されます。最初の200行は、すべてのセッションに自動的に読み込まれます。
    • リポジトリメモリ (/memories/repo/):現在のワークスペースに限定され、会話を超えて永続化されます。
    • セッションメモリ (/memories/session/):現在の会話に限定され、終了時に消去されます。
  • Copilotメモリ:GitHubがホストするメモリシステムで、Copilotの各サーフェス(コーディングエージェント、コードレビュー、CLI)全体でリポジトリ固有のインサイトをキャプチャします。VS Codeを超えたGitHub Copilot全体で共有されます。

VS Codeエージェントのメモリについて詳しく学びましょう。

計画

複雑なタスクにおいて、いきなりコード生成に移ると、実装が不完全になったり、アーキテクチャ上の誤った判断を下したりする可能性があります。組み込みの「計画エージェント」は、ユーザーと協力してタスクを調査し、コード変更を行う前に詳細な実装計画を作成します。これにより、要件の把握、エッジケースの特定を行い、エージェントがコードを書き始める前にアプローチについて合意を得ることができます。

計画エージェントは4フェーズの反復ワークフローを使用します

  1. 発見(Discovery):読み取り専用ツールとコードベース分析を使用してタスクを調査します。
  2. 調整(Alignment):曖昧さを解消するために質問を投げかけます。
  3. 設計(Design):構造化された実装計画をドラフトします。
  4. 洗練(Refinement):フィードバックに基づいて計画を改善します。

計画エージェントは、計画がレビューされ承認されるまでコード変更を行いません。承認されると、その計画をデフォルトのエージェントに引き継ぐか、さらなる改善のために保存することができます。

エージェントによる計画について詳しく学びましょう。

© . This site is unofficial and not affiliated with Microsoft.