Findy Tools
開発ツールのレビューサイト
検索結果がありません
目次
Xのツイートボタン
このエントリーをはてなブックマークに追加
Xのツイートボタン
このエントリーをはてなブックマークに追加
Google CloudでAgent Development Kit (ADK) とAgent2Agent (A2A) を利用しマルチエージェントの構築
公開日 更新日

Google CloudでAgent Development Kit (ADK) とAgent2Agent (A2A) を利用しマルチエージェントの構築

AIエージェントとは

エージェントとは、人の代わりに特定の目標を達成するために、周囲の環境を認識し、自律的に判断し、行動するエンティティです。このエージェントという考え方自体は新しいものではありませんが、近年の大規模言語モデル(LLM)の驚異的な進化により、その実用性が飛躍的に高まり、注目を集めています。

エージェントは以下の特徴があります:

  • 自律性 (Autonomy): 人間の直接的な指示がなくても、タスクを遂行できます。
  • 目標指向 (Goal-Oriented): 適切なツールの選定や適切なアクションを実行し目的へ向かっていきます
  • 環境認識 (Perception): テキスト、画像、APIデータソースなどを利用し目的を達成に必要な情報を収集し実行環境の状況を認識します。
  • 行動 (Action): ツール(APIの呼び出し、データベースの検索など)を利用し、目的の達成のため働きかけます。

環境認識、「目的を達成するために、適切なツールと行動を判断する際にAIを活用するエージェントをAIエージェントと呼びます。

AIエージェントは基本的に以下のコンポーネントで構成されています(図1)。

  • モデル: エージェントの「脳」として機能し、ユーザーの指示を理解し、推論し、計画を立てる役割を担います。通常、Geminiのような大規模言語モデル(LLM)がこの中核を担います。
  • ツール: エージェントが特定のタスクを実行するための「手足」です。Google検索で最新情報を取得したり、APIを呼び出してホテルの予約をしたりと、モデルだけでは不可能な情報収集やアクションの実行を可能にします。
  • オーケストレーション: ユーザーのリクエストに基づき、モデルとツールを適切な順序で連携させる「指揮者」の役割を担います。タスクを小さなステップに分解し、どのツールをいつ使うべきかを判断し、プロセス全体を管理します。このブログで紹介するADK(Agent Development Toolkit)はこのコンポーネントに相当します。


図1:AIエージェントの構成

Geminiモデル:エージェントの能力を飛躍させる大規模言語モデル

Geminiモデルは、Googleが開発した最先端な生成AIモデルで、テキストだけでなく、画像、音声、動画、コードなど、さまざまな種類の情報を同時に理解し、処理ができる「マルチモーダル」モデルです。Geminiモデルは200万トークンまで対応でき、大量のコンテキストを処理しユーザへ適切な回答を返すことができる。Geminiモデルにはエージェント実現に役立つ多数の機能があります(図2)。


図2:Geminiのエージェント向け主要な機能

  • マルチモーダル
    Geminiはマルチモーダルであるため、テキスト、音声、画像、その他のドキュメント形式など、複数の種類の情報を同時に処理可能で、よりリッチで多様なデータに基づいたエージェントを構築できます。

  • 関数呼び出し
    エージェントが特定のタスクを実行するために、あらかじめ定義されたカスタム関数を呼び出すことができます。これにより、外部のツールやAPIと連携させ、エージェントの能力を拡張することが可能になります。

  • グーグル検索
    エージェントが必要な情報を得るために、動的にGoogle検索を実行する機能です。これにより、常に最新の情報に基づいた応答やアクションが可能になります。

  • Reasoning(推論)
    Geminiの思考モデルがエージェントに与えられた目的や複雑な指示を深く理解し、最適な行動計画を立てることが可能。

  • MCP (Model Context Protocol) 対応
    GeminiのSDKがMCP(Model Context Protocol)にネイティブで対応可能。これにより、より高度で精密なモデルの制御が可能になります。

  • リンク/Youtube対応
    プロンプトにウェブサイトのリンクやYouTube動画のURLを含めることで、そのコンテンツを直接コンテキストとして利用できる機能です。これにより、エージェントが外部の情報を参照してタスクを実行できます。

ADKの紹介

ADK (Agent Development Kit) は、開発者がAIエージェントを効率的に構築、テスト、デプロイできるようにGoogleが設計した包括的なOSS(オープン・ソース)ツールキットです。ADKを活用することで、複雑なエージェントのロジックや外部ツールとの連携をシンプルに実装できます。
ADKが提供する主なメリットは以下の通りです。

  • マルチエージェント・システム
    特定の役割を持つ複数のエージェントを階層的に組み合わせることで、モジュール性と拡張性に優れたアプリケーションを構築できます。これにより、エージェント間の複雑な連携やタスクの委任が実現します。

  • 豊富なツール・エコシステム
    エージェントに多彩な機能を持たせることが可能です。検索やコード実行といった便利な標準ツールに加え、独自のカスタム関数や、LangChain、CrewAIといったサードパーティ製フレームワークのツールも統合できます。さらに、他のエージェント自体を一つのツールとして利用することもできます。

  • 柔軟なオーケストレーション
    SequentialAgentやLoopAgentなどを使い、処理の流れが決まったワークフローを定義できます。その一方で、LLMの判断に基づいて次に実行する処理を動的に切り替える、状況に応じた柔軟な動作も実現可能です。

  • 一貫した開発体験
    強力なCLIと対話的なUIが用意されており、ローカル環境で開発からデバッグまで一貫して行えます。エージェントが実行される各ステップのイベントや状態を詳細に追跡することも可能です。

  • 組み込みの評価機能
    エージェントの最終的な回答の品質だけでなく、そこに至るまでの処理プロセスも、あらかじめ定義したテストケースと照らし合わせて評価できます。これにより、エージェントの性能を体系的に分析・改善することが可能です。

  • デプロイへの対応
    開発したエージェントはコンテナ化できるため、様々な環境にデプロイできます。ローカルでの実行はもちろん、Vertex AI Agent Engine上でのスケーリングや、Cloud Run、Dockerを用いたカスタム環境への統合も柔軟に行えます。

ADKでマルチエージェントの作成

ここからは、ADK(Agent Development Kit)を用いて、マルチエージェントシステムを構築し、Google Cloudにデプロイします。
このシステムは、ユーザーの指示に基づきImagen 3で画像を生成し、その結果を別のエージェントが評価します。この「生成と評価」のプロセスを、ユーザーの意図に沿った画像が得られるまで自動で繰り返します。
システムの全体構成は、図3に示す通りです。


図3:ADKを利用し作成するエージェントの構成

1. 環境を準備しましょう

今回は以下の環境が必要となります
a. Google Cloudアカウント
b. Google CloudでVertex AI APIを利用できるようにする
c. Python実行環境、Cloud Shellやローカルマシン。ローカルマシンを利用したい場合はターミナルの事前認証が必要となります。
d. gcloud CLI (Cloud Shellにはデフォルトでインストールされています)

2. コードをクローンし必要なライブラリをインストールしましょう

#プロジェクトディレクトリを作成
mkdir imagescoring
cd imagescoring
#プロジェクトディレクトリにコードをクローン
git clone https://github.com/haren-bh/multiagenthandson.git

#Pythonの仮想環境の作成
python3 -m venv pythonenv
source pythonenv/bin/activate

# google-adk と a2a sdkのインストール
python3 -m pip install google-adk==1.8.0
python3 -m pip install a2a-sdk==0.2.16
#poetry をインストールしますcd multiagenthandson #アプリケーションディレクトリへ移動
pip install poetry poetry-plugin-export
poetry install --with deployment
#GCSバケットがない場合、バケットを作成 
gsutil mb gs://YOUR-UNIQUE-BUCKETNAME

3. パラメータを設定

image_scoringフォルダー配下以下のコンテンツで.envファイル作成(TODOのところ変更)

GOOGLE_GENAI_USE_VERTEXAI=1 

#TODO プロジェクトIDを記載
GOOGLE_CLOUD_PROJECT=YOUR CLOUD PROJECT NAME 

GOOGLE_CLOUD_LOCATION=us-central1

#TODO GCOバケット名を記載
GOOGLE_CLOUD_STORAGE_BUCKET=YOUR BUCKET NAME


SCORE_THRESHOLD=40 
IMAGEN_MODEL="imagen-3.0-generate-002" 
GENAI_MODEL="gemini-2.5-flash"

image_scoring フォルダ内のagent.py(http://agent.py)で以下を確認してください。これがADKでエージェントの基本的な作成方法となります。

image_scoring = LoopAgent(
    name="image_scoring",
    description="Repeatedly runs a sequential process and checks a termination condition.",
    sub_agents=[
        image_generation_scoring_agent,  # First, run your sequential process [1]
        checker_agent_instance,  # Second, check the condition and potentially stop the loop [1]
    ],
    before_agent_callback=set_session,
)
root_agent = image_scoring

4. ローカルでエージェントを実行

#以下のコマンドをルートフォルダーmultiagenthandsonから実行します
#TODO バケット名を変更してくださいexport GCS_BUCKET_NAME=your gcs bucket name
adk web

実行すると以下の画面が表示されます 。

5. ADKエージェントのGoogle Cloudへデプロイ

次に、エージェントを Agent Engine にデプロイします。Agent Engine は、Google Cloud にエージェントをデプロイするためのフルマネージド サービスです。Agent Engine は ADK と互換性があるため、ADK で構築されたエージェントを Agent Engine にデプロイできます。Agent Engineへデプロイするには以下の手順に従っていきます。(TODOのところ自分の環境に合わせて変更してください)

export GOOGLE_CLOUD_LOCATION='us-central1'#TODO プロジェクトIDを変更してください
export GOOGLE_CLOUD_PROJECT='your project id'
# TODO pyproject.toml のあるmultiagenthandsonへ移動してから以下を実行してください
pip install poetry-plugin-export

#Create requirements.txt file
poetry export -f requirements.txt --output requirements.txt --without-hashes
poetry build

dist フォルダ内、.whlファイルが作成されていることを確認してください。

image-scoringフォルダ内にあるdeploy.pyファイルを以下のように編集してください(TODO のところ注目)


import vertexai
from .agent import root_agent
import os
import glob # To easily find the wheel file

#TODO プロジェクトIDを自分のGoogle CloudプロジェクトIDに変更
PROJECT_ID = "YOUR PROJECT ID" #change this your project
LOCATION = "us-central1" #change this
#TODO 自分のGCSバケットに変更
STAGING_BUCKET = "gs://YOUR BUCKET " #change this to your bucket

from vertexai import agent_engines

vertexai.init(
   project=PROJECT_ID,
   location=LOCATION,
   staging_bucket=STAGING_BUCKET,
)

remote_app = agent_engines.create(
   agent_engine=root_agent,
   requirements=open(os.path.join(os.getcwd(), 
"requirements.txt")).readlines()+["./dist/image_scoring-0.1.0-py3-none-any.whl"],#TODO change this to your local location
   extra_packages=[
       "./dist/image_scoring-0.1.0-py3-none-any.whl", # TODO change this to your location
   ]
)

print(remote_app.resource_name)

ファイル変更終わりましたら保存し以下のコマンドを実行

python3 -m image_scoring.deploy


ここで表示された、最後の行、projects/xxxx/locations/us-central1/reasoningEngines/xxxx はagent engine IDです、agent engine IDをメモします。

Google CloudコンソールのVertex AI画面にあるAgent EngineにアクセスしデプロイされたAgent Engineの確認や削除が可能です。

6. デプロイされたエージェントをテストしましょう

testclient フォルダに移動し、remote_test.py ファイルを開いて、以下のように編集します(TODOを確認)。

#TODO
PROJECT_ID = "" #change this
#TODO
LOCATION = "" #change this
TODO
STAGING_BUCKET = "" #change this

#TODO, 上記メモしたreplace the id with your own.
reasoning_engine_id="your agent engine id"

#自分のプロンプトに変更可能
image_prompt="A cat riding a bicycle"
python3 remote_test.py

A2Aエージェントサーバを立ち上げる

Agent2Agent(A2A)は、グーグルが開発したオープンマルチエージェントプロトコルです。A2Aは異なるフレームワーク、ベンダー、ドメインで開発された自律型AIエージェント同士が、シームレスかつ安全に通信・連携できるように設計されています。

A2Aの主な特徴

  • 普遍的な相互運用性
    A2Aは、エージェントフレームワークやプラットフォームに依存せず、エージェント間の連携を可能にします。これにより、異なる企業が別々のプラットフォームで構築したエージェント同士でも、円滑に通信し、協力し合える真のマルチエージェント・エコシステムが実現します。

  • 機能の発見
    各エージェントは、自身のID、対応するA2Aの機能、スキル、認証要件などを記述した「エージェントカード」(JSON形式のドキュメント)を公開できます。これにより、他のエージェントは、特定のタスクに最も適したエージェントを効率的に見つけ出し、選択することが可能になります。

  • デフォルトで安全な設計 (セキュア・バイ・デフォルト)
    セキュリティはA2Aの中核をなす原則です。HTTPS/TLS、JWT、OIDC、APIキーといった標準技術を利用し、機密データを保護するためのエンタープライズレベルの認証・認可メカニズムが組み込まれており、安全な通信を保証します。

  • 多様な通信手段 (モダリティ非依存)
    テキスト、音声、動画のストリーミング、インタラクティブなフォーム、埋め込みiframeなど、様々な形式の通信をサポートします。この柔軟性により、エージェントはタスクやユーザーにとって最適な手段で情報を交換できます。

  • 構造化されたタスク管理
    タスクの委任、進捗監視、完了に関する明確な手順を定めています。関連するタスクはグループ化され、一意のタスクIDによって複数のエージェント間で管理されます。タスクは「送信済み」「処理中」「完了」といった定義済みのライフサイクルに沿って状態が遷移します。

  • 実行プロセスの非公開性 (ブラックボックス実行)
    重要な特徴として、エージェントは自身の内部的な思考プロセス、メモリ、使用する特定ツールを他のエージェントに開示する必要がありません。呼び出し可能なサービスのみを公開することで、モジュール性とプライバシーを確保します。

  • 既存の標準技術を基盤
    HTTP、リアルタイム通信のためのSSE(Server-Sent Events)、構造化データ交換のためのJSON-RPCなど、広く普及しているWeb技術を基盤としています。そのため、既存のITインフラへの統合が容易です。

  • 非同期通信
    A2Aは非同期通信を前提に設計されており、柔軟なタスク処理を促進します。これにより、常時接続が維持されていない状況でも、プッシュ通知による状況更新などが可能です。

これまでADKで作成したエージェントをA2Aプロトコルを利用し公開します。 A2Aプロトコルの重要な要素がAgent Cardとなります。Agent Cardにはエージェントの詳細とアクセス方法などが記載されています。A2Aで公開されたエージェントを利用するには、 Agent Cardを以下のURLからアクセス可能です。

agent-domain/.well-known/agent-card.json

ソースコードのimage_scoring_adk_a2a_server 内のremote_a2a/image_scoring フォルダに、次の内容の agents.json があります。これが今回作成するA2Aエージェントのagent-cardとなります。

{
  "name": "image_scoring",
  "description": "Agent that generates images based on user prompts and scores their adherence to the prompt.",
  "url": "http://localhost:8001/a2a/image_scoring",
  "version": "1.0.0",
  "defaultInputModes": ["text/plain"],
  "defaultOutputModes": ["image/png", "text/plain"],
  "capabilities": {
    "streaming": true,
    "functions": true
  },
  "skills": [
    {
      "id": "generate_and_score_image",
      "name": "Generate and Score Image",
      "description": "Generates an image from a given text prompt and then evaluates how well the generated image adheres to the original prompt, providing a score.",
      "tags": ["image generation", "image scoring", "evaluation", "AI art"],
      "examples": [
        "Generate an image of a futuristic city at sunset",
        "Create an image of a cat playing a piano",
        "Show me an image of a serene forest with a hidden waterfall"
      ]
    }
  ]
}

今回はADKのA2Aサーバ機能を利用しA2Aサーバを立ち上げます。A2Aサーバを立ち上げるには、トップフォルダ image_scoring_adk_a2a_server から次のコマンドを実行します(TODOのところ自分の環境に合わせて変更してください)。

#set some environmental variables
#TODO
export GOOGLE_CLOUD_PROJECT=YOUR PROJECT
#TODO
export GOOGLE_CLOUD_LOCATION=YOUR PROJECT LOCATION eg. us-central1
#TODO
export GCS_BUCKET_NAME=YOUR BUCKET

#following command runs the ADK agent as a2a agent
adk api_server --a2a --port 8001 remote_a2a

上記のコマンドを実行するとhttp://localhost:8001にA2Aサーバが立ち上がります。このサーバを通じてこれまで作成されたimage-scoringルートエージェントをアクセスすることができます。

これからagent cardにアクセスしてみましょう。agent cardへアクセスするには以下のcurlコマンドを実行します。

curl http://localhost:8001/a2a/image_scoring/.well-known/agent.json

A2Aエージェントはネットワーク経由アクセスできるようになっており、以下のcurlコマンド実行しアクセスします。
curl -X POST   http://localhost:8001/a2a/image_scoring   -H 'Content-Type: application/json'   -d '{
    "id": "uuid-123",
    "params": {
      "message": {
        "messageId": "msg-456",
        "parts": [{"text": "Create an image of a cat"}],
        "role": "user"
      }
    }
  }'

これで、簡単なA2Aサーバを立ち上げることができました。

まとめ

本記事では、Google Cloud、ADK、A2Aを活用したマルチエージェントの構築について解説しました。主な学習内容は以下の通りです。

  • ADKの基本と、それを用いたマルチエージェントシステムの作成方法
  • Google Cloudを利用したエージェントの簡単なデプロイ方法
  • A2Aプロトコルの基本
  • A2AプロトコルとADKを組み合わせたオープンエージェントの作成

今回の記事では、A2Aを利用したマルチエージェントの作成やGoogle Cloudへのデプロイまでは詳しく触れられませんでした。
次回の記事では、このA2Aを中心に解説していく予定です。

資料ダウンロード

必要事項を記入のうえ、「この内容で送信する」ボタンを押してください。

  • ツールに関するご提案や最新情報の提供のため、資料ダウンロード後にFindy Toolsを契約している資料に該当する協賛会社(以下「協賛会社」といいます)から、記載いただいた情報をもとにご案内を差し上げる場合があります。
  • 上記ご案内のため、上記記載内容ならびにFindy Toolsにご登録いただいたユーザー情報を当社から協賛会社に対して提供いたします。