A2A(Agent2Agent)プロトコルは、AIエージェント、クライアント、ツール間の構造化された通信を可能にするオープン標準です。このチュートリアルでは、チャット・クライアントがユーザーのクエリーを処理し、それをA2A準拠のサーバー上で実行されているAIエージェントに送信するエージェント・システムを構築できます。
ほとんどのエージェント型AIアプリケーションは、コンポーネント間のカスタム通信を実装しているため(ChatDevのChatChainなど)、異なるアプリケーション間で同じエージェントを再利用したり、外部ツールを統合したりすることが困難です。標準化の欠如により、相互運用性が妨げられ、より広範なエージェント・エコシステムの開発が制限されます。
A2Aは、HTTP、JSON-RPC 2.0、およびサーバー送信イベント(SSE)上に構築された標準化されたプロトコルを通じて、エージェント・ロジックから通信レイヤーを分離することで、この制限を解消します。この分離により、エージェントはカスタム統合コードなしで他のエージェントと連携し、クライアントの要求に応え、外部ツールにアクセスできるようになります。
A2Aは、チームがクライアント・コードを壊すことなく、AIシステムを段階的に進化させられる分散型アーキテクチャーをサポートしています。チームは、複雑なワークフロー全体で一貫したインターフェースを維持しながら、ツールの更新、モデルの交換、またはエージェントの動作の変更を行うことができます。
エージェントは、JSON-RPC形式で構造化されたメッセージで情報を交換します。このメッセージには、エージェントのをやり取りを明確かつ一貫性のあるものにするメタデータが含まれています。各A2Aサーバーは、エージェントの機能を構造化されたJSONデータとして記述する、既知のエンドポイント(.well-known/agent-card.json)でAgentCardを公開します。したがって、クライアントは、APIのドキュメンテーションが利用可能なエンドポイントを説明するのと同様に、エージェントが実行できることを動的に発見できるようになります。
A2Aエージェント・システムの構築と実行の手順に従って、次の実践的な体験を積んでください。
注:ACP(エージェント通信プロトコル)を使用したことがある場合は、類似点を認識できるはずです。ACPは、元々IBMのBeeAIによって開発されましたが、Linux Foundationの下でGoogle A2Aと提携しました。現在のBeeAIはA2Aアダプター(A2AServerとA2AAgent)を使用するようになったため、A2Aに準拠した通信を提供します。A2Aはまた、MCP(モデル・コンテキスト・プロトコル)と連携して、エージェントがデータ・ソースやツールとやり取りできるようにし、相互運用可能なエージェント・エコシステムを作成しています。
このプロジェクトでは、A2Aによってクライアント・インターフェースとエージェント・ロジックを明確に分離する方法を示します。
ワークフローは次の順序で進行します。
このワークフローは、チャットボット、タスク・オートメーション・システム、カスタマー・サポート・エージェント、ツール・オーケストレーション機能を備えたリサーチ・アシスタントなど、構造化されたクライアントとエージェントの通信を必要とするユースケースに適用できる再利用可能なパターンを示しています。
このプロジェクトでは、複数のツール機能を備えた単一のAIエージェントを使用しています。より複雑なシステムでは、それぞれが特定のドメインまたはタスクに焦点を当てた複数の専門エージェントをデプロイできます。
RequirementAgent(BeeAI):ユーザーの要求に基づいて複数のツールを動的に選択および調整する宣言型エージェント。これは次の用途に使用されます。
A2Aサーバー(
2. エージェントのセットアップ:エージェントのライフサイクルを処理するためのツールとメモリを備えたRequirementAgentを作成します。
3. サーバーの構成:A2A準拠のHTTPエンドポイントを介してエージェントを公開します。
サーバーは、エージェントの機能を記述し、エージェント構成の検証に役立つAgentCardを/.well-known/agent-card.jsonで自動的に公開します。
A2Aクライアント(
接続のセットアップ:A2Aクライアント・アダプターを作成します。
本
メッセージの交換:非同期プロンプトを送信し、応答を処理します。
本
このプロジェクトを実行するためのシステム要件は次のとおりです。
開始する前に、このプロジェクトに必要なツールの概要を説明します。
このプロジェクトでは、AIエージェントのモデル・プロバイダーとしてOllamaを使用します。Ollamaをセットアップするには、次の手順に従います。
注:Ollamaと互換性のあるモデルを使用する場合は、
このプロジェクトを実行するには、https://github.com/IBM/ibmdotcom-tutorials.gitをHTTPS URLとして使用して、GitHubリポジトリーをクローンします。リポジトリーをクローンする詳細な手順については、GitHubのドキュメンテーションを参照してください。
このチュートリアルは、リポジトリーのプロジェクト・ディレクトリー内にあります。
端末内で、このチュートリアルのディレクトリーに移動します。
このプロジェクトでは、サーバー用とクライアント用の2つの別々のPythonスクリプトを同時に実行する必要があります。2つの端末ウィンドウまたはタブを開く必要があります。
現在の端末を開いたまま、2つ目の端末を開いて、両方が正しいプロジェクト・ディレクトリー(
IDEを使用している場合
Visual Studio CodeのようなIDEを使用している場合は、Split Terminal機能を使用して複数の端末を並行して管理できます。
それ以外の場合は、2つのスタンドアロン端末ウィンドウを開き、それぞれをプロジェクト・ディレクトリーに移動します。
仮想環境は、依存関係を分離して維持するのに役立ちます。サーバーとクライアントの依存関係を分離するには、コンポーネントごとに仮想環境を作成します。
サーバー用:
ディレクトリーに
Python 3.11で仮想環境を作成する:
仮想環境をアクティブ化する:
Windowsユーザーへの注意:仮想環境をアクティブ化するには、venv\Scripts\activateを使用してください。
クライアント用:
ディレクトリーに
仮想環境を作成してアクティブ化する:
各端末でこのコードを実行して、各コンポーネントに必要な依存関係をインストールする:
端末内で実行して、
1つ目の端末でA2Aエージェント・サーバーを起動します。
次のように表示されます。
これで、サーバーはクライアント・アプリケーションからの受信要求をリッスンし、エージェント間の通信をサポートする準備が整いました。
もう一方の端末でA2Aクライアントを起動します。
これにより、インプットを求められます。
クライアント端末にメッセージを入力して、押します。
サーバー端末には、プッシュ通知との通信を示すA2Aプロトコル・ログが表示されます。
1つ目の要求では、エージェントの機能を記述したAgentCardを取得します。2つ目の要求では、次のようにメッセージが送信され、
注:LLMからのアウトプットは確率的なものであり、同じインプットであっても、ワークフローを実行するたびに変化する可能性があります。
さまざまなタイプのクエリーを試して、エージェントの多様なツールをテストします。
ブラウザでhttps://0.0.0.0:9999/.well-known/agent-card.jsonにアクセスして、
このJSONドキュメントでは、次の内容について説明しています。
このAgentCardを使用すると、A2A準拠のクライアントは、エージェントの実装の詳細を事前に知らなくても、エージェントを発見してやり取りすることができます。
このチュートリアルでは、クライアントとエージェントの通信用の構造化されたインターフェースを公開するA2A準拠サーバーを使用してチャット・システムを構築しました。Agent2Agentプロトコルは、メッセージング・レイヤーを内部ロジックから分離することで、チームがクライアント・コードを変更せずにエージェント機能の更新、モデルの交換、ツール構成の変更を行うことができます。この柔軟性は、インプットが必要なタスクの調整、タスクのステータスの追跡、各オペレーションを個別の作業単位で扱う場合に特に役立ちます。
A2Aは、準拠するコンポーネントが理解できる共通のメッセージ形式を定義することで機能し、自律的なエージェントが他のエージェントと連携できるようにします。プロトコル仕様では、メッセージがJSON-RPC形式でどのように構造化され、メタデータで強化されて、相互作用全体の一貫性と明確さが確保されるかを定義します。
このチュートリアルは、A2Aサンプル・リポジトリーで提供される基本的な例に基づいています。元の実装の詳細については、リポジトリー内のreadmeファイルを参照してください。このファイルには、A2A準拠のシステムを構築するための詳細なコンテキストと事例が含まれています。
実際のデプロイメントの場合、A2Aサーバーは認証メカニズムを実装してエージェントのエンドポイントを保護し、サーバー送信イベントをストリーミング応答に使用し、運用ワークフローに対応できるように拡張します。このワークフローに沿って、コマンド・ライン・クライアントが標準化されたプロトコルを通じてAIエージェントとやり取りし、エージェントが複数のツールを調整し、状況に応じた応答を提供できるようにする方法を確認しました。このアプローチは、保守可能でスケーラブル、かつ柔軟性に優れたAIシステムを実現するA2Aの力を実証しています。
システムのテストが終了したら、次の手順に従って、実行中のすべてのコンポーネントを完全にシャットダウンします。
各端末のウィンドウで、Ctrl+Cを押して実行中のプロセスを停止します。
次のようなアウトプットが表示されます。
サーバーが応答しなくなったり、シャットダウン時にフリーズする場合は、強制的に停止することができます。
プロセスID(PID)を確認する:
停止しようとしているプロセスのPIDを特定します。
プロセスを終了する:
必要に応じて、サーバーごとにこのプロセスを繰り返します。
これで、A2A準拠のチャット・システムの実行に成功しました。
生成AIを使用してワークフローとプロセスを自動化する強力なAIアシスタントとエージェントを構築、デプロイ、管理しましょう。
信頼できるAIソリューションでビジネスの未来を構築します。
IBMコンサルティングAIサービスは、企業がAIをトランスフォーメーションに活用する方法を再考するのに役立ちます。