146 lines
3.8 KiB
Markdown
146 lines
3.8 KiB
Markdown
# Multi-Agent and A2A Protocol
|
|
|
|
## Sub-Agent Composition
|
|
|
|
```python
|
|
from google.adk.agents import Agent
|
|
|
|
code_agent = Agent(
|
|
name="code_specialist", model="gemini-2.5-flash",
|
|
description="Code generation/debugging", tools=[executor, linter]
|
|
)
|
|
|
|
research_agent = Agent(
|
|
name="researcher", model="gemini-2.5-flash",
|
|
description="Web search/analysis", tools=[search, scraper]
|
|
)
|
|
|
|
root = Agent(
|
|
name="coordinator", model="gemini-2.5-flash",
|
|
instruction="Route tasks to specialists.",
|
|
sub_agents=[code_agent, research_agent]
|
|
)
|
|
```
|
|
|
|
## Coordinator Pattern
|
|
|
|
```python
|
|
coordinator = Agent(
|
|
name="coordinator", model="gemini-2.5-flash",
|
|
instruction="Delegate: code_specialist (programming), data_analyst (data), writer (docs)",
|
|
sub_agents=[
|
|
Agent(name="code_specialist", model="gemini-2.5-flash", tools=[code_tools]),
|
|
Agent(name="data_analyst", model="gemini-2.5-flash", tools=[data_tools]),
|
|
Agent(name="writer", model="gemini-2.5-flash", tools=[writing_tools])
|
|
]
|
|
)
|
|
```
|
|
|
|
## RemoteA2aAgent
|
|
|
|
```python
|
|
from google.adk.agents.remote_a2a_agent import RemoteA2aAgent, AGENT_CARD_WELL_KNOWN_PATH
|
|
|
|
prime_checker = RemoteA2aAgent(
|
|
name="prime", description="Check primes",
|
|
agent_card=f"http://localhost:8001{AGENT_CARD_WELL_KNOWN_PATH}"
|
|
)
|
|
|
|
root = Agent(
|
|
name="coordinator", model="gemini-2.5-flash",
|
|
sub_agents=[prime_checker, Agent(name="calc", model="gemini-2.5-flash", tools=[calc])]
|
|
)
|
|
```
|
|
|
|
## Global Instruction
|
|
|
|
```python
|
|
root = Agent(
|
|
name="customer_service", model="gemini-2.5-flash",
|
|
instruction="Handle inquiries",
|
|
global_instruction="Be polite, follow privacy policy, escalate if uncertain",
|
|
sub_agents=[
|
|
Agent(name="billing", model="gemini-2.5-flash", tools=[billing]),
|
|
Agent(name="tech", model="gemini-2.5-flash", tools=[tech])
|
|
]
|
|
)
|
|
```
|
|
|
|
## Patterns
|
|
|
|
### Pipeline
|
|
|
|
```python
|
|
from google.adk.agents import SequentialAgent
|
|
|
|
pipeline = SequentialAgent(
|
|
name="content",
|
|
sub_agents=[
|
|
Agent(name="researcher", model="gemini-2.5-flash", tools=[search]),
|
|
Agent(name="writer", model="gemini-2.5-flash", tools=[write]),
|
|
Agent(name="editor", model="gemini-2.5-flash", tools=[edit])
|
|
]
|
|
)
|
|
```
|
|
|
|
### Parallel
|
|
|
|
```python
|
|
from google.adk.agents import ParallelAgent
|
|
|
|
parallel = ParallelAgent(
|
|
name="multi_source",
|
|
sub_agents=[
|
|
Agent(name="web", model="gemini-2.5-flash", tools=[web]),
|
|
Agent(name="db", model="gemini-2.5-flash", tools=[db]),
|
|
Agent(name="api", model="gemini-2.5-flash", tools=[api])
|
|
]
|
|
)
|
|
```
|
|
|
|
### Hierarchical
|
|
|
|
```python
|
|
backend = Agent(name="backend", model="gemini-2.5-flash",
|
|
sub_agents=[Agent(name="api", tools=[api]), Agent(name="db", tools=[db])])
|
|
frontend = Agent(name="frontend", model="gemini-2.5-flash",
|
|
sub_agents=[Agent(name="ui", tools=[ui]), Agent(name="ux", tools=[ux])])
|
|
root = Agent(name="root", model="gemini-2.5-flash", sub_agents=[backend, frontend])
|
|
```
|
|
|
|
### Iterative
|
|
|
|
```python
|
|
from google.adk.agents import LoopAgent
|
|
|
|
loop = LoopAgent(
|
|
name="review",
|
|
sub_agents=[
|
|
Agent(name="generator", model="gemini-2.5-flash", tools=[gen]),
|
|
Agent(name="reviewer", model="gemini-2.5-flash", tools=[lint])
|
|
],
|
|
max_iterations=3
|
|
)
|
|
```
|
|
|
|
## A2A Protocol
|
|
|
|
```python
|
|
from google.adk.servers.a2a_server import create_a2a_server
|
|
app = create_a2a_server(root_agent)
|
|
# Run: uvicorn my_agent:app --host 0.0.0.0 --port 8000
|
|
```
|
|
|
|
Agent card: `/.well-known/agent.json`
|
|
|
|
Flow: 1) Client requests card 2) Card describes capabilities 3) Client sends task 4) Server streams events
|
|
|
|
## Best Practices
|
|
|
|
- Descriptive `description` for routing
|
|
- Focused coordinator instructions
|
|
- Combine local/remote agents
|
|
- Use `global_instruction` for cross-cutting concerns
|
|
- Apply workflow agents for orchestration
|
|
- Cache remote cards, handle failures
|