ec2b666284
Continuous Integration / Pre-commit Linter (push) Has been cancelled
Continuous Integration / Mypy Check (Python 3.10) (push) Has been cancelled
Continuous Integration / Mypy Check (Python 3.11) (push) Has been cancelled
Continuous Integration / Mypy Check (Python 3.12) (push) Has been cancelled
Continuous Integration / Mypy Check (Python 3.13) (push) Has been cancelled
Continuous Integration / Unit Tests (Python 3.10) (push) Has been cancelled
Continuous Integration / Unit Tests (Python 3.11) (push) Has been cancelled
Continuous Integration / Unit Tests (Python 3.12) (push) Has been cancelled
Continuous Integration / Unit Tests (Python 3.13) (push) Has been cancelled
Continuous Integration / Unit Tests (Python 3.14) (push) Has been cancelled
Continuous Integration / A2A v0.3 Tests (Python 3.10) (push) Has been cancelled
Continuous Integration / A2A v0.3 Tests (Python 3.11) (push) Has been cancelled
Continuous Integration / A2A v0.3 Tests (Python 3.12) (push) Has been cancelled
Copybara PR Handler / close-imported-pr (push) Has been cancelled
Continuous Integration / A2A v0.3 Tests (Python 3.13) (push) Has been cancelled
Continuous Integration / A2A v0.3 Tests (Python 3.14) (push) Has been cancelled
135 lines
4.3 KiB
Markdown
135 lines
4.3 KiB
Markdown
# A2A Root Sample Agent
|
|
|
|
This sample demonstrates how to use a **remote Agent-to-Agent (A2A) agent as the root agent** in the Agent Development Kit (ADK). This is a simplified approach where the main agent is actually a remote A2A service, also showcasing how to run remote agents using uvicorn command.
|
|
|
|
## Overview
|
|
|
|
The A2A Root sample consists of:
|
|
|
|
- **Root Agent** (`agent.py`): A remote A2A agent proxy as root agent that talks to a remote a2a agent running on a separate server
|
|
- **Remote Hello World Agent** (`remote_a2a/hello_world/agent.py`): The actual agent implementation that handles dice rolling and prime number checking running on remote server
|
|
|
|
## Architecture
|
|
|
|
```
|
|
┌─────────────────┐ ┌────────────────────┐
|
|
│ Root Agent │───▶│ Remote Hello │
|
|
│ (RemoteA2aAgent)│ │ World Agent │
|
|
│ (localhost:8000)│ │ (localhost:8001) │
|
|
└─────────────────┘ └────────────────────┘
|
|
```
|
|
|
|
## Key Features
|
|
|
|
### 1. **Remote A2A as Root Agent**
|
|
|
|
- The `root_agent` is a `RemoteA2aAgent` that connects to a remote A2A service
|
|
- Demonstrates how to use remote agents as the primary agent instead of local agents
|
|
- Shows the flexibility of the A2A architecture for distributed agent deployment
|
|
|
|
### 2. **Uvicorn Server Deployment**
|
|
|
|
- The remote agent is served using uvicorn, a lightweight ASGI server
|
|
- Demonstrates a simple way to deploy A2A agents without using the ADK CLI
|
|
- Shows how to expose A2A agents as standalone web services
|
|
|
|
### 3. **Agent Functionality**
|
|
|
|
- **Dice Rolling**: Can roll dice with configurable number of sides
|
|
- **Prime Number Checking**: Can check if numbers are prime
|
|
- **State Management**: Maintains roll history in tool context
|
|
- **Parallel Tool Execution**: Can use multiple tools in parallel
|
|
|
|
### 4. **Simple Deployment Pattern**
|
|
|
|
- Uses the `to_a2a()` utility to convert a standard ADK agent to an A2A service
|
|
- Minimal configuration required for remote agent deployment
|
|
|
|
## Setup and Usage
|
|
|
|
### Prerequisites
|
|
|
|
1. **Start the Remote A2A Agent server**:
|
|
|
|
```bash
|
|
# Start the remote agent using uvicorn
|
|
uvicorn contributing.samples.a2a_root.remote_a2a.hello_world.agent:a2a_app --host localhost --port 8001
|
|
```
|
|
|
|
1. **Run the Main Agent**:
|
|
|
|
```bash
|
|
# In a separate terminal, run the adk web server
|
|
adk web contributing/samples/
|
|
```
|
|
|
|
### Example Interactions
|
|
|
|
Once both services are running, you can interact with the root agent:
|
|
|
|
**Simple Dice Rolling:**
|
|
|
|
```
|
|
User: Roll a 6-sided die
|
|
Bot: I rolled a 4 for you.
|
|
```
|
|
|
|
**Prime Number Checking:**
|
|
|
|
```
|
|
User: Is 7 a prime number?
|
|
Bot: Yes, 7 is a prime number.
|
|
```
|
|
|
|
**Combined Operations:**
|
|
|
|
```
|
|
User: Roll a 10-sided die and check if it's prime
|
|
Bot: I rolled an 8 for you.
|
|
Bot: 8 is not a prime number.
|
|
```
|
|
|
|
**Multiple Rolls with Prime Checking:**
|
|
|
|
```
|
|
User: Roll a die 3 times and check which results are prime
|
|
Bot: I rolled a 3 for you.
|
|
Bot: I rolled a 7 for you.
|
|
Bot: I rolled a 4 for you.
|
|
Bot: 3, 7 are prime numbers.
|
|
```
|
|
|
|
## Code Structure
|
|
|
|
### Root Agent (`agent.py`)
|
|
|
|
- **`root_agent`**: A `RemoteA2aAgent` that connects to the remote A2A service
|
|
- **Agent Card URL**: Points to the well-known agent card endpoint on the remote server
|
|
|
|
### Remote Hello World Agent (`remote_a2a/hello_world/agent.py`)
|
|
|
|
- **`roll_die(sides: int)`**: Function tool for rolling dice with state management
|
|
- **`check_prime(nums: list[int])`**: Async function for prime number checking
|
|
- **`root_agent`**: The main agent with comprehensive instructions
|
|
- **`a2a_app`**: The A2A application created using `to_a2a()` utility
|
|
|
|
## Troubleshooting
|
|
|
|
**Connection Issues:**
|
|
|
|
- Ensure the uvicorn server is running on port 8001
|
|
- Check that no firewall is blocking localhost connections
|
|
- Verify the agent card URL in the root agent configuration
|
|
- Check uvicorn logs for any startup errors
|
|
|
|
**Agent Not Responding:**
|
|
|
|
- Check the uvicorn server logs for errors
|
|
- Verify the agent instructions are clear and unambiguous
|
|
- Ensure the A2A app is properly configured with the correct port
|
|
|
|
**Uvicorn Issues:**
|
|
|
|
- Make sure the module path is correct: `contributing.samples.a2a_root.remote_a2a.hello_world.agent:a2a_app`
|
|
- Check that all dependencies are installed
|