Inter-Agent Communication
Inter-Agent Communication defines the language and transport layer for agents to talk to each other. In a distributed system, Agent A (Booking) might run on a different server than Agent B (Payment). They need a standard way to find each other (Discovery), send requests (Messaging), and understand the data format (Protocol).
When to Use
- Microservices Architecture: Breaking a monolithic agent into smaller, deployable services.
- Ecosystem Integration: Allowing your agent to talk to agents built by other teams or companies.
- Asynchronous Tasks: "Fire and forget" tasks where Agent A sends a job to Agent B and checks back later.
- Load Balancing: Distributing tasks across a pool of identical agents.
Use Cases
- Agent Marketplace: An agent searches a registry to find a "Translation Agent" and hires it for a task.
- Supply Chain: A "Retail Agent" sends a restock order to a "Warehouse Agent", which confirms availability.
- Delegation: A "Personal Assistant Agent" delegates a math problem to a specialized "Wolfram Alpha Agent".
Implementation Pattern
# Conceptual A2A (Agent-to-Agent) Interaction
class AgentA:
def run(self):
# Step 1: Discovery
# Find an agent that supports the 'payment' skill
payment_agent_url = directory.lookup(skill="process_payment")
# Step 2: Messaging (HTTP/RPC)
# Send a structured request
payload = {
"task": "pay_invoice",
"amount": 100,
"currency": "USD"
}
response = http.post(f"{payment_agent_url}/inbox", json=payload)
# Step 3: Handle Response
if response.status == "CONFIRMED":
print("Payment successful")
Examples
Input: An orchestrator agent distributing research tasks to specialist agents.
# Orchestrator sends task
orchestrator.send(Message(
to="researcher-agent-1",
task="Find all SEC filings for AAPL in 2024",
context={"output_format": "json", "deadline": "2025-03-01"}
))
# Researcher replies
researcher.send(Message(
to="orchestrator",
status="complete",
result=filings_data,
metadata={"sources": 14, "latency_ms": 3200}
))
Troubleshooting
| Problem | Cause | Fix | |---|---|---| | Messages lost | No delivery acknowledgement | Require ACK from receiver; use at-least-once delivery with idempotency keys | | Agents talk past each other | No shared schema | Define a typed message schema (Pydantic/JSON Schema) for all message types | | Deadlock between agents | Circular dependency | Design a strict orchestrator hierarchy; no peer-to-peer blocking calls | | Message queue backs up | Slow consumer agent | Add horizontal scaling or a priority queue for time-sensitive messages |
Scan to join WeChat group