A2A 協議完全指南:2026 年 Google 開源 AI 代理通訊標準
發佈時間:2026 年 3 月 · 版本:v0.3.0 · 許可證:Apache 2.0 · 維護者:Google + Linux Foundation
2025 年 4 月,Google 正式開源了 A2A(Agent2Agent)協議 —— 一個旨在解決 AI 代理互操作性問題的開放標準。隨著 AI 代理(AI Agent)在 2026 年的爆發式增長,不同框架、不同公司開發的代理之間如何通訊協作成為了關鍵挑戰。A2A 協議應運而生,被譽為”AI 代理時代的 HTTP”。
A2A 協議的核心目標是讓基於不同框架(如 Google ADK、LangGraph、BeeAI 等)構建的 AI 代理能夠安全、高效地通訊和協作,而無需暴露各自的內部狀態、記憶或工具實現。這一設計理念與 MCP(Model Context Protocol)形成互補:MCP 讓代理連線外部工具,A2A 讓代理互相連線。
為什麼需要 A2A 協議?
AI 代理的”巴別塔”問題
2026 年的 AI 開發生態中,存在著眾多代理框架和平臺:
- Google ADK - Google 官方的代理開發框架
- LangGraph - LangChain 推出的圖式代理框架
- CrewAI - 面向任務編排的多代理框架
- AutoGen - Microsoft 開源的多代理對話框架
- Goose - Block 公司開源的本機代理
- OpenClaw - 快速增長的開源代理平臺
這些框架各自為政,代理之間無法直接通訊。想象一下:你有一個擅長資料分析的 LangGraph 代理,另一個擅長生成報告的 CrewAI 代理,但它們無法協作完成”分析資料並生成報告”的任務。
A2A 的解決方案
A2A 協議透過標準化通訊介面,讓代理能夠:
- 發現彼此的能力 - 透過”代理卡片”(Agent Cards)宣告功能
- 協商互動方式 - 支援文字、表單、媒體等多種模態
- 安全協作長任務 - 支援串流和非同步通訊
- 保持內部隱私 - 無需暴露記憶、工具或專有邏輯
A2A vs MCP:有什麼區別?
| 特性 | A2A Protocol | MCP (Model Context Protocol) |
|---|---|---|
| 目標 | 代理 ↔ 代理通訊 | 代理 ↔ 工具/資料源連線 |
| 場景 | 多代理協作編排 | 單個代理擴充套件能力 |
| 通訊方式 | JSON-RPC 2.0 over HTTP | JSON-RPC 2.0 over stdio/HTTP |
| 發現機制 | Agent Cards | MCP Server Registry |
| 典型用例 | 資料分析代理 + 報告生成代理 | 代理 + GitHub/資料庫/檔案系統 |
| 互補關係 | 代理間的”HTTP” | 代理與工具的”USB” |
最佳實踐:在現代 AI 系統中,同時使用 A2A 和 MCP。例如:一個 A2A 協調代理透過 MCP 連線本地工具,同時透過 A2A 呼叫其他專業代理。
核心概念
1. Agent Card(代理卡片)
每個 A2A 相容的代理都必須提供一個”代理卡片”,宣告其能力:
{
"name": "資料分析代理",
"description": "專門處理 CSV/Excel 資料分析任務",
"url": "https://agents.example.com/data-analyzer",
"version": "1.0.0",
"capabilities": {
"inputFormats": ["text/csv", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"],
"outputFormats": ["application/json", "text/markdown"],
"skills": ["統計分析", "資料視覺化", "異常檢測"]
},
"authentication": {
"type": "bearer",
"required": true
}
}
2. 通訊模式
A2A 支援三種通訊模式:
- 同步請求/響應 - 適用於快速任務
- 串流響應(SSE) - 適用於長任務,實時返回進度
- 非同步推送通知 - 適用於耗時任務,完成後回撥
3. 任務狀態機
[新建] → [進行中] → [完成/失敗/取消]
↓
[需要輸入] → [繼續]
快速開始
系統要求
- Python:3.10+
- Node.js:18+(可選,用於 JS SDK)
- Go:1.21+(可選,用於 Go SDK)
- Java:17+(可選,用於 Java SDK)
- .NET:8.0+(可選,用於 .NET SDK)
安裝 SDK
Python SDK(推薦)
# 安裝 A2A Python SDK
pip install a2a-sdk
# 驗證安裝
python -c "import a2a; print(a2a.__version__)"
Node.js SDK
npm install @a2a-js/sdk
Go SDK
go get github.com/a2aproject/a2a-go
Java SDK(Maven)
<dependency>
<groupId>org.a2a</groupId>
<artifactId>a2a-sdk</artifactId>
<version>0.3.0</version>
</dependency>
.NET SDK
dotnet add package A2A
實戰案例:構建多代理協作系統
場景描述
假設我們需要構建一個”內容創作工作流”,涉及三個專業代理:
- 研究代理 - 搜尋和整理資訊
- 寫作代理 - 根據研究結果撰寫文章
- 審校代理 - 檢查語法和事實準確性
步驟 1:建立研究代理伺服器
# research_agent.py
from a2a.server import A2AServer
from a2a.types import AgentCard, Task, TaskStatus
class ResearchAgent:
def __init__(self):
self.card = AgentCard(
name="研究代理",
description="搜尋和整理網路資訊",
version="1.0.0",
capabilities={
"skills": ["網路搜尋", "資訊提取", "摘要生成"],
"inputFormats": ["text/plain"],
"outputFormats": ["application/json"]
}
)
async def execute(self, task: Task):
"""執行研究任務"""
query = task.input.text
# 呼叫搜尋工具(實際專案中整合 web_search 或 Serper API)
results = await self.search_web(query)
return Task(
id=task.id,
status=TaskStatus.COMPLETED,
output={
"summary": results.summary,
"sources": results.sources,
"key_points": results.key_points
}
)
async def search_web(self, query: str):
# 實現搜尋邏輯
pass
# 啟動伺服器
server = A2AServer(
agent=ResearchAgent(),
host="0.0.0.0",
port=8080
)
server.run()
步驟 2:建立寫作代理客戶端
# writing_agent.py
from a2a.client import A2AClient
from a2a.types import Task, TaskRequest
class WritingAgent:
def __init__(self):
self.research_client = A2AClient(
agent_url="http://localhost:8080",
api_key="your-api-key"
)
async def write_article(self, topic: str):
# 步驟 1:請求研究代理收集資訊
research_task = TaskRequest(
input={"text": f"研究主題:{topic},需要提供關鍵事實、資料來源和相關引用"},
mode="streaming" # 使用串流模式獲取實時進度
)
research_result = await self.research_client.execute(research_task)
# 步驟 2:基於研究結果撰寫文章
article = await self.generate_article(
topic=topic,
research_data=research_result.output
)
return article
async def generate_article(self, topic: str, research_data: dict):
# 呼叫 LLM 生成文章
pass
# 使用範例
async def main():
writer = WritingAgent()
article = await writer.write_article("A2A 協議詳解")
print(article)
import asyncio
asyncio.run(main())
步驟 3:編排完整工作流
# workflow_orchestrator.py
from a2a.client import A2AClient
from a2a.types import Task, TaskRequest
class ContentWorkflow:
def __init__(self):
self.research_agent = A2AClient("http://localhost:8080")
self.writing_agent = A2AClient("http://localhost:8081")
self.review_agent = A2AClient("http://localhost:8082")
async def execute_workflow(self, topic: str):
print(f"📝 開始內容創作工作流:{topic}")
# 階段 1:研究
print("🔍 階段 1:資訊收集...")
research_task = TaskRequest(
input={"text": topic},
mode="sync"
)
research_result = await self.research_agent.execute(research_task)
print(f"✅ 研究完成,找到 {len(research_result.output['sources'])} 個來源")
# 階段 2:寫作
print("✍️ 階段 2:文章撰寫...")
writing_task = TaskRequest(
input={
"topic": topic,
"research_data": research_result.output
},
mode="streaming"
)
async for chunk in self.writing_agent.execute_stream(writing_task):
print(f"📝 寫作進度:{chunk.progress}%")
draft = chunk.output
print(f"✅ 初稿完成,{len(draft['content'])} 字")
# 階段 3:審校
print("🔎 階段 3:質量審校...")
review_task = TaskRequest(
input={
"content": draft['content'],
"check_types": ["grammar", "facts", "citations"]
},
mode="sync"
)
review_result = await self.review_agent.execute(review_task)
print("✅ 工作流完成!")
return {
"final_content": review_result.output['revised_content'],
"quality_score": review_result.output['quality_score'],
"suggestions": review_result.output['suggestions']
}
# 執行工作流
async def main():
workflow = ContentWorkflow()
result = await workflow.execute_workflow("2026 年 AI 代理發展趨勢")
print("\n📄 最終文章:")
print(result['final_content'])
asyncio.run(main())
高階特性
1. 串流響應處理
async def handle_streaming_task(client: A2AClient, task: TaskRequest):
async for event in client.execute_stream(task):
if event.type == "progress":
print(f"進度:{event.data['progress']}%")
elif event.type == "partial_output":
print(f"部分結果:{event.data['content']}")
elif event.type == "completed":
print(f"任務完成!最終結果:{event.data['output']}")
2. 錯誤處理與重試
from a2a.exceptions import AgentUnavailable, TaskFailed
async def execute_with_retry(client: A2AClient, task: TaskRequest, max_retries=3):
for attempt in range(max_retries):
try:
return await client.execute(task)
except AgentUnavailable:
if attempt == max_retries - 1:
raise
await asyncio.sleep(2 ** attempt) # 指數退避
except TaskFailed as e:
print(f"任務失敗:{e.message}")
raise
3. 認證與安全
# 使用 Bearer Token 認證
client = A2AClient(
agent_url="https://agents.example.com/analyzer",
api_key="your-secret-key",
auth_type="bearer"
)
# 使用 OAuth 2.0
from a2a.auth import OAuth2Provider
oauth = OAuth2Provider(
client_id="your-client-id",
client_secret="your-client-secret",
token_url="https://auth.example.com/oauth/token"
)
client = A2AClient(
agent_url="https://agents.example.com/analyzer",
auth_provider=oauth
)
A2A 生態工具
官方資源
- GitHub 倉庫:https://github.com/a2aproject/A2A
- 協議規範:https://a2a-protocol.org/latest/specification/
- 文件站點:https://a2a-protocol.org
- 範例程式碼:https://github.com/a2aproject/a2a-samples
- 免費課程:https://goo.gle/dlai-a2a(Google Cloud + IBM Research 聯合出品)
社群工具
| 工具 | 描述 | 連結 |
|---|---|---|
| A2A Inspector | 除錯和檢查 Agent Cards | pip install a2a-inspector |
| A2A Gateway | 代理閘道器和負載均衡 | https://github.com/a2aproject/a2a-gateway |
| A2A Registry | 代理發現和服務註冊 | https://github.com/a2aproject/a2a-registry |
最佳實踐
✅ 推薦做法
- 明確宣告能力 - 在 Agent Card 中詳細描述代理的技能和限制
- 使用串流通訊 - 對於耗時超過 5 秒的任務,優先使用串流模式
- 實現優雅降級 - 當依賴的代理不可用時,提供備選方案
- 記錄互動日誌 - 便於除錯和稽核代理間的通訊
- 設定超時限制 - 避免無限等待,建議設定 30-60 秒超時
❌ 避免的陷阱
- 過度依賴單個代理 - 設計冗餘和備選方案
- 忽略認證 - 生產環境必須啟用認證
- 暴露敏感資料 - 不要在 Agent Card 中洩露內部實現細節
- 同步阻塞長任務 - 使用非同步或串流模式處理長任務
與 OpenClaw 整合
如果你正在使用 OpenClaw 構建 AI助手,可以透過以下方式整合 A2A:
# 在 OpenClaw 技能中呼叫 A2A 代理
from a2a.client import A2AClient
async def a2a_research_task(query: str):
"""呼叫外部研究代理"""
client = A2AClient("http://research-agent:8080")
result = await client.execute({
"input": {"text": query},
"mode": "sync"
})
return result.output
# 註冊為 OpenClaw 技能
# 在 skills/a2a-integration/SKILL.md 中定義
未來展望
A2A 協議目前由 Linux Foundation 託管,Google 作為主要貢獻者。2026 年的發展路線圖包括:
- v0.4.0(2026 Q2) - 增加多模態支援(影象、音訊)
- v0.5.0(2026 Q3) - 引入代理市場發現機制
- v1.0.0(2026 Q4) - 正式穩定版,向後相容保證
隨著更多公司和專案加入 A2A 生態,我們有望看到一個真正互聯的 AI 代理網路,就像今天的 Web 一樣開放和互操作。
總結
A2A 協議代表了 AI 代理發展的下一個階段:從孤立的智慧體到協作的代理網路。對於開發者而言,現在正是學習和採用 A2A 的好時機:
- ✅ 開源免費 - Apache 2.0 許可,無使用限制
- ✅ 多語言支援 - Python、JS、Go、Java、.NET
- ✅ 大廠背書 - Google 出品,Linux Foundation 託管
- ✅ 生態完善 - 豐富的 SDK、文件和範例
- ✅ 前瞻設計 - 與 MCP 互補,面向未來多代理系統
開始行動:存取 https://github.com/a2aproject/A2A 獲取最新程式碼和文件,或者透過 Google 的免費課程系統學習 A2A 協議。
參考資料: