
プロジェクト概要
これはAgent2Agent(A2A)protocolに基づく数字当てゲームの例で、3つの軽量なA2Aエージェントがどのように協力して古典的な数字当てゲームを完成させるかを実証しています。このプロジェクトはA2A protocolとPython SDKの実用的な入門例として機能し、以下の特徴があります:
- LLM依存なし:APIキーや大規模言語モデルが不要
- ローカル実行:3つのエージェントすべてがリモートサーバーなしでローカル実行
- 簡単インストール:最小限の外部依存関係
- 核心概念実証:A2A protocolの核心機能を紹介
エージェント役割説明
| エージェント | 役割 | 機能 |
|---|---|---|
| AgentAlice | 評価者 | 1-100の秘密の数字を選択、推測を評価してヒントを提供 |
| AgentBob | CLIフロントエンド | プレイヤーの推測を中継、Aliceのヒントを表示、Carolと交渉 |
| AgentCarol | 可視化 | 推測履歴のテキスト可視化を生成、要求に応じて履歴をランダムシャッフル |
詳細コードファイル分析
1. 設定ファイル(config.py)
AGENT_ALICE_PORT = 8001
AGENT_BOB_PORT = 8002
AGENT_CAROL_PORT = 8003
機能:ポート設定を一元管理してポート競合を回避。すべてのエージェントがこのモジュールから設定をインポートし、ポート割り当ての一貫性を確保。
2. AgentAlice(agent_Alice.py)
核心機能:
- 起動時に1-100の秘密の数字をランダム選択
NumberGuessExecutorクラスを実装して推測評価を処理- A2A SDKの
AgentExecutorインターフェースを通じてメッセージを処理
主要メソッド:
execute():新しく受信したメッセージを処理、process_guess()を呼び出して推測を評価cancel():指定されたタスクを拒否
応答タイプ:
"Go higher"- 推測が秘密の数字より小さい"Go lower"- 推測が秘密の数字より大きい"correct! attempts: <n>"- 推測が正しい、試行回数を表示
3. AgentBob(agent_Bob.py)
核心機能:
- CLIフロントエンドとして機能、プレイヤーを他のエージェントと接続
- ゲーム状態と履歴記録を管理
- Carolと交渉して履歴記録をソート
主要メソッド:
_handle_guess():推測をAliceに転送してフィードバックを返す_negotiate_sorted_history():履歴がソートされるまでCarolと交渉_visualise_history():フォーマットされた履歴可視化を要求して印刷play_game():インタラクティブCLIループを実行
交渉ロジック:
- Carolに初期シャッフル要求を送信
- 返されたリストがソートされているかチェック
- ソートされていない場合、"Try again"を送信して交渉を継続
- ソートされている場合、"Well done!"を送信して交渉を完了
4. AgentCarol(agent_Carol.py)
核心機能:
- 推測履歴記録を可視化
- 履歴記録リストをランダムシャッフル
- マルチターン対話とタスク参照をサポート
主要メソッド:
_handle_initial():新しい会話での初期メッセージを処理_handle_followup():既存タスクを参照するフォローアップメッセージを処理execute():メッセージタイプに基づいて適切なハンドラーにディスパッチ
スキル定義:
history_visualiser:フォーマットされた推測履歴要約を生成history_shuffler:履歴記録エントリの順序をランダムシャッフル
5. ユーティリティモジュール(utils/)
game_logic.py
核心機能:
process_guess():個別の推測を評価してフィードバックを返すbuild_visualisation():人間が読める履歴記録レンダリングを作成is_sorted_history():履歴が推測値でソートされているかチェックprocess_history_payload():履歴関連要求を処理
protocol_wrappers.py
核心機能:
send_text():ターゲットエージェントにテキストメッセージを同期送信send_followup():フォローアップメッセージを送信、会話コンテキストを維持cancel_task():リモートエージェントでタスクをキャンセルextract_text():TaskまたはMessageオブジェクトからプレーンテキストを抽出
server.py
核心機能:
run_agent_blocking():ブロッキングエージェントサーバーを開始- Starlette + UvicornをHTTPサーバーとして使用
システムアーキテクチャフローチャート
graph TD
A[Player] --> B[AgentBob CLI]
B --> C[AgentAlice Evaluator]
B --> D[AgentCarol Visualizer]
C --> E[Secret Number 1-100]
C --> F[Evaluate Guess]
F --> G{Guess Result}
G -->|Too Low| H[Return Go higher]
G -->|Too High| I[Return Go lower]
G -->|Correct| J[Return correct! attempts: N]
B --> K[Game History]
K --> L[Send to Carol for Visualization]
L --> M[Generate Formatted Table]
M --> N[Display to Player]
B --> O[Negotiate Sorting]
O --> P[Send Shuffle Request]
P --> Q[Carol Random Shuffle]
Q --> R{Check if Sorted}
R -->|Not Sorted| S[Send Try again]
R -->|Sorted| T[Send Well done!]
S --> Q
T --> U[Update History]
style A fill:#e1f5fe
style B fill:#f3e5f5
style C fill:#e8f5e8
style D fill:#fff3e0
style E fill:#ffebee
style F fill:#e8f5e8
style K fill:#f3e5f5
style O fill:#f3e5f5
メッセージフロー図
sequenceDiagram
participant Player as Player
participant Bob as AgentBob
participant Alice as AgentAlice
participant Carol as AgentCarol
Note over Player,Carol: Game Start
Player->>Bob: Input guess number
Bob->>Alice: Send guess
Alice->>Bob: Return evaluation result
Bob->>Player: Display hint
Note over Player,Carol: Record History
Bob->>Bob: Add to game history
Note over Player,Carol: Visualize History
Bob->>Carol: Send history records
Carol->>Bob: Return formatted table
Bob->>Player: Display history visualization
Note over Player,Carol: Negotiate Sorting
Bob->>Carol: Send shuffle request
Carol->>Bob: Return shuffled list
Bob->>Bob: Check if sorted
alt Not Sorted
Bob->>Carol: Send "Try again"
Carol->>Bob: Shuffle list again
Bob->>Bob: Recheck sorting
else Sorted
Bob->>Carol: Send "Well done!"
Carol->>Bob: Complete task
Bob->>Bob: Update history
end
Note over Player,Carol: Continue Game or End
alt Guess Correct
Bob->>Player: Display victory message
else Guess Incorrect
Player->>Bob: Continue inputting guesses
end
uvでプロジェクトを実行
1. 環境セットアップ
uvがインストールされていることを確認:
# uvをインストール(まだインストールされていない場合)
curl -LsSf https://astral.sh/uv/install.sh | sh
2. プロジェクトセットアップ
# プロジェクトをクローン
git clone https://github.com/a2aproject/a2a-samples.git
cd a2a-samples/samples/python/agents/number_guessing_game
# uvを使用して仮想環境を作成し依存関係をインストール
uv venv
source .venv/bin/activate # Linux/macOS
# または .venv\Scripts\activate # Windows
# 依存関係をインストール
uv pip install -r requirements.txt
3. ゲームの実行
3つのターミナルウィンドウを開き、それぞれで仮想環境をアクティベート:
# ターミナル1 - Alice(評価者)を開始
uv run python agent_Alice.py
# ターミナル2 - Carol(可視化)を開始
uv run python agent_Carol.py
# ターミナル3 - Bob(CLIフロントエンド)を開始
uv run python agent_Bob.py
4. ゲームプレイ
Bobのターミナルで、ゲームは1-100の数字を入力するよう促します。正しく推測するまで、Aliceのフィードバックに基づいて推測を続けてください。
ゲームフローの例:
Guess the number AgentAlice chose (1-100)!
Your guess: 50
Alice says: Go higher
=== Carol's visualisation (sorted) ===
Guesses so far:
1. 50 -> Go higher
============================
Your guess: 75
Alice says: Go lower
=== Carol's visualisation (sorted) ===
Guesses so far:
1. 50 -> Go higher
2. 75 -> Go lower
============================
Your guess: 62
Alice says: correct! attempts: 3
You won! Exiting…
プロジェクト要約
技術的特徴
-
A2A Protocol実践:
- エージェント間通信の核心概念を実証
- メッセージ送信、タスク管理、状態追跡を実装
- マルチターン対話とタスク参照メカニズムを表示
-
モジュラー設計:
- 責任の明確な分離:Aliceは評価、Bobは相互作用、Carolは可視化を処理
- 拡張とメンテナンスが容易な再利用可能ユーティリティモジュール
-
エラーハンドリング:
- 入力検証とエラープロンプト
- ネットワーク通信例外処理
- タスクキャンセルとタイムアウトメカニズム
学習価値
- A2A入門:A2A protocolを理解するためのシンプルで理解しやすい例を提供
- エージェント協力:複数のエージェントが複雑なタスクを完了するために協力する方法を表示
- 非同期プログラミング:非同期メッセージ処理と状態管理を実証
- Protocol設計:明確なエージェントインターフェースとスキル定義の設計方法を表示
拡張可能性
- より多くのエージェントを追加:統計アナリスト、戦略アドバイザーなどの新しいエージェント役割を導入
- ゲームロジックの強化:時間制限、スコアリングシステムなどのより複雑なゲームルールを追加
- ネットワーク展開:エージェントを異なるマシンに展開し、分散エージェントシステムを実証
- LLM統合:インテリジェントなヒントと戦略提案を提供するAIエージェントを追加
セキュリティ考慮事項
プロジェクトドキュメントで言及されているように、本番環境では:
- 外部エージェントは信頼できないエンティティとして扱うべき
- 受信したすべてのデータは検証と無害化が必要
- 入力検証や認証情報保護などの適切なセキュリティ対策を実装
この例は、開発者にA2A protocolを学習し実験するための安全で制御された環境を提供し、分散エージェントシステム構築の基本パターンを実証します。
関連ケーススタディ
🚀 入門例
-
A2A Samples: Hello World Agent
- A2A Python SDKを使用してHello Worldエージェントを構築する完全ガイド
- 詳細な環境セットアップとテスト手順を含む
-
A2A SDK Currency Agent Tutorial
- 通貨変換エージェント構築のステップバイステップガイド
- OpenRouter AIサービスを統合
🐍 Python実装ケース
-
A2A Python Example: GitHub Agent
- a2a-pythonを使用してGitHubエージェントを作成・接続
- コードリポジトリ情報クエリ機能を実装
-
A2A Example: Travel Planning Assistant
- OpenRouterを統合した旅行計画エージェント実装
- Python a2a-sdkを使用して構築
-
- 詳細なA2A SDK Python開発チュートリアル
- ワークフロー図と実践的なコード例を含む
🟨 JavaScript/TypeScriptケース
-
- TMDB APIとOpenRouter AIとの統合
- Express.jsサーバー実装
-
- TypeScript型安全実装
- Express.jsサーバーSDKとストリーミング処理
☕ Java実装ケース
- A2A Java Example
- Mavenマルチモジュールアーキテクチャ
- Spring BootサーバーSDK実装
- AI翻訳サービス例
🔧 フレームワーク統合ケース
-
- Google ADKフレームワークを使用してA2Aインテリジェントエージェントシステムを実装
- 完全な開発ワークフローをカバー
-
- Google ADKとA2A protocolに基づくインテリジェント経費精算エージェント
- フォーム補完情報を自動生成
-
- CrewAIフレームワークを使用してデータ分析エージェントを構築
- チャート生成とデータ可視化機能を統合
🛠️ 開発ツール
-
A2A Inspector: Agent2Agent通信デバッグ解説
- 強力なWebベースデバッグツール
- エージェントカードとJSON-RPC通信のリアルタイム検査
-
- Google A2A Protocol v0.2.1を実装する.NETライブラリ
- ASP.NET Coreアプリケーションに適用
📚 Protocol理解とベストプラクティス
-
- A2A protocolを理解するための包括的ガイド
- 核心概念とAIエージェント相互運用性の利点
-
- Python実装仕様の包括的ガイド
- エージェントカード、メッセージング、タスク管理を含む核心機能をカバー
-
- A2A protocolの包括的紹介と実践ガイド
- 基本概念から高度なアプリケーションまで完全カバー
🌟 エコシステムリソース
-
- Google A2A protocolの完全エコシステムを探索
- 公式ドキュメント、コミュニティ実装、サンプルプロジェクト、統合ガイドを含む
-
- A2A protocolの様々なオープンソース実装を探索
- Java、TypeScript、Go、Rust、Pythonなどを含む
これらのケーススタディを通じて、シンプルなHello World例から複雑なマルチエージェントシステムまで、異なるシナリオでのA2A protocolアプリケーションについて深い洞察を得ることができ、A2A開発の旅に豊富な参考リソースを提供します。
Related Articles
Explore more content related to this topic
A2UI Introduction - Declarative UI Protocol for Agent-Driven Interfaces
Discover A2UI, the declarative UI protocol that enables AI agents to generate rich, interactive user interfaces. Learn how A2UI works, who it's for, how to use it, and see real-world examples from Google Opal, Gemini Enterprise, and Flutter GenUI SDK.
Agent Gateway Protocol (AGP): Practical Tutorial and Specification
Learn the Agent Gateway Protocol (AGP): what it is, problems it solves, core spec (capability announcements, intent payloads, routing and error codes), routing algorithm, and how to run a working simulation.
Integrating A2A Protocol - Intelligent Agent Communication Solution for BeeAI Framework
Using A2A protocol instead of ACP is a better choice for BeeAI, reducing protocol fragmentation and improving ecosystem integration.
A2A vs ACP Protocol Comparison Analysis Report
A2A (Agent2Agent Protocol) and ACP (Agent Communication Protocol) represent two mainstream technical approaches in AI multi-agent system communication: 'cross-platform interoperability' and 'local/edge autonomy' respectively. A2A, with its powerful cross-vendor interconnection capabilities and rich task collaboration mechanisms, has become the preferred choice for cloud-based and distributed multi-agent scenarios; while ACP, with its low-latency, local-first, cloud-independent characteristics, is suitable for privacy-sensitive, bandwidth-constrained, or edge computing environments. Both protocols have their own focus in protocol design, ecosystem construction, and standardization governance, and are expected to further converge in openness in the future. Developers are advised to choose the most suitable protocol stack based on actual business needs.
Building an A2A Currency Agent with LangGraph
This guide provides a detailed explanation of how to build an A2A-compliant agent using LangGraph and the Google Gemini model. We'll walk through the Currency Agent example from the A2A Python SDK, explaining each component, the flow of data, and how the A2A protocol facilitates agent interactions.