init
This commit is contained in:
@@ -0,0 +1,145 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user