
阿里妹導讀
本文主要介紹Google於2025年4月9日釋出的Agent2Agent Protocol(簡稱“A2A”),這是一個旨在促進不同型別智慧體(Agent)之間高效溝通與協作的開放協議。
序言
2025年4月9日,Google 正式釋出了Agent2Agent Protocol(以下簡稱 “A2A”)。該協議為不同型別的智慧體之間搭建了一座高效溝通與協作的橋樑,無論是獨立Agent與獨立Agent、獨立Agent與企業Agent,亦或是企業Agent與企業Agent,都能借助該協議實現通訊互動和事務協作。
A2A 為Agent生態提供了一套標準協議標準,補充了Agent生態基礎設施中至關重要的一塊拼圖,將有力推動Agent生態系統的完善與發展。
一、A2A 介紹
A2A是一個用於連結不同封閉Agent,並實現其相互操作的開放協議。
1.1 A2A 誕生背景
目前為止,比較公認的一個觀點是:2025年是Agent元年。雖然說是元年,但是其爆發式的普及速度,遠遠超過了元年這個詞的含義。所以,發展快是一個前提。
另外一點,Agent作為一個智慧體,它本身具備自主性、主動性、社會性和反應性。其社會性在以人為本構建的產品和服務的世界中,並不能快速的成長。
舉一個簡單的例子:人與人之間可以透過各種各樣的方式溝通:對話,眼神,肢體動作,畫作等,這些可以幫助不同的人之間相互瞭解對方,並做出正確的動作,共同推動人類社會的發展,那麼Agent之間溝通協作呢?Google給出了自己的答案:A2A。
1.2 A2A 的功能特性

A2A作為一個開放協議,充分考慮了Agent在和使用者、企業打通的過程中所面臨的一些挑戰,其主要功能特性有以下四點:
-
安全協作(Secure Collaboration):透過引入認證/授權機制,保證Agent之間的身份互信。 -
任務狀態管理(Task and state mgmt):實現了Agent之間互操作任務以及任務狀態的可管理性。 -
使用者體驗協商(UX negotiation):不同的Agent透過協商的方式,對使用者提供無縫的體驗。 -
功能發現(Capability discovery):提供了Agent之間相互發現各自能力的機制。除此之外,A2A也在企業的無縫接入、簡化整合方面,有比較好的考量。
二、A2A 協議原理
2.1 基本概念
2.1.1 核心三要素

A2A中包含三個核心的參與者:
-
User -
Client Agent -
Remote Agent
User存在於協議中,主要的作用是用於認證&授權。Client Agent指的是任務發起者,Server Agent指的是任務的執行者。
Client和Server之間的通訊,可以理解為就是一個個簡單的請求和結果的響應,只不過這個請求是一個個的任務。一個Agent既可以是Client也可以是Server。
2.1.2 核心概念
這裡主要介紹一下,Client Agent和Server Agent互動的過程中,主要涉及到的一些Entity:AgentCard、Task、Artifact、Message、Part。
2.1.2.1 AgentCard
AgentCard是Server Agent的名片,它主要描述了Server Agent的能力、認證機制等資訊。Client Agent透過獲取不同Server Agent的AgentCard,瞭解不同Server Agent的能力,來決斷具體的任務執行應該呼叫哪個Server Agent。AgentCard內容示例:
interface AgentCard {
name: string;
description: string;
url: string;
provider?: {
organization: string;
url: string;
};
version: string;
documentationUrl?: string;
capabilities: {
streaming?: boolean;
pushNotifications?: boolean;
stateTransitionHistory?: boolean;
};
authentication: {
schemes: string[];
credentials?: string;
};
defaultInputModes: string[];
defaultOutputModes: string[];
skills: {
id: string;
name: string;
description: string;
tags: string[];
examples?: string[];
inputModes?: string[];
outputModes?: string[];
}[];
}
2.1.2.2 Task
Task是一個具有狀態的實體,由Client Agent建立,其狀態由Server Agent維護。一個Task用於達到特定的目標或者結果。Agent Client和Server Client在Task中交換Mesaage,Server Agent生成的結果叫做Artifact。
除此之外,每個Task有一個唯一的sessionId,多個Task可以使用一個sessionId,表明多個Task屬於同一個會話的一部分。Task示例:
interfaceTask {
id: string;
sessionId: string;
status: TaskStatus;
history?: Message[];
artifacts?: Artifact[];
metadata?: Record<string, any>;
}
interfaceTaskStatus {
state: TaskState;
message?: Message;
timestamp?: string;
}
interfaceTaskStatusUpdateEvent {
id: string;
status: TaskStatus;
final: boolean; //indicates the end of the event stream
metadata?: Record<string, any>;
}
interfaceTaskArtifactUpdateEvent {
id: string;
artifact: Artifact;
metadata?: Record<string, any>;
}
interfaceTaskSendParams {
id: string;
sessionId?: string;
message: Message;
historyLength?: number;
pushNotification?: PushNotificationConfig;
metadata?: Record<string, any>; // extension metadata
}
typeTaskState =
| "submitted"
| "working"
| "input-required"
| "completed"
| "canceled"
| "failed"
| "unknown";
2.1.2.3 Artifact
Artifacts:Server Agent在執行任務後生成的目標結果叫做Artifact,一個Task可能生成一個或者多個Artifact。
Artifacts是不可變的,可以命名,並且可以有多個部分。流式響應可以分批次,將結果附加到現有Artifacts上。
interfaceArtifact {
name?: string;
description?: string;
parts: Part[];
metadata?: Record<string, any>;
index: number;
append?: boolean;
lastChunk?: boolean;
}
2.1.2.4 Message
在Task執行過程中,Server Agent和Client Agent之間是透過Message完成交流的,當然,這不包括Artifact。它可以包括:Agent的思考、使用者上下文、指令、錯誤、狀態或元資料。
一個Message可以包含多個Part,每個Part攜帶不同的內容。
Message示例:
interface Message {
role: "user" | "agent";
parts: Part[];
metadata?: Record<string, any>;
}
2.1.2.5 Part
Part是Message和Artifact的核心組成部分,代表了其攜帶的主要內容。每個Part都標識了內容型別和具體內容。
Part示例:
interface TextPart {
type: "text";
text: string;
}
interface FilePart {
type: "file";
file: {
name?: string;
mimeType?: string;
// oneof {
bytes?: string; //base64 encoded content
uri?: string;
//}
};
}
interface DataPart {
type: "data";
data: Record<string, any>;
}
type Part = (TextPart | FilePart | DataPart) & {
metadata: Record<string, any>;
};
2.2 通訊&認證
ClientAgent和ServerAgent之間透過HTTP協議進行通訊,使用經典的C/S模式,支援SSE流式資料傳輸,資料格式為JSON-RPC2.0。
A2A遵循Open API規範進行身份驗證。A2A不會在協議中交換身份資訊。相反,它們會在帶外獲取材料(如令牌),並在HTTP頭中傳輸。
2.3 核心流程
Client Agent和Server Agent之間協同工作需要經過以下幾個關鍵步驟:
-
Server Agent 在指定站點託管自己的AgentCard; -
Client Agent 主動發現AgentCard; -
Client Agent 發起一個Task; -
Client Agent 設定任務通知監聽; -
Server Agent 執行任務,返回Artifact; -
Client Agent 獲取Artifact。
2.3.1 AgentCard 託管 & 發現
官方建議將AgentCard託管在
https://${host}/.well-known/agent.json
。上面這種方式叫做Open Discovery,除此之外,還有另外兩種方式:Curated Discovery 和 Private Discovery,詳見:https://google.github.io/A2A/#/topics/agent_discoveryAgent Client可以透過請求https://${host}/.well-known/agent.json
,獲取到指定的AgentCard,並整合到自己的提示詞或者工具集中。//agent card
{
"name":"Google Maps Agent",
"description":"Plan routes, remember places, and generate directions",
"url":"https://maps-agent.google.com",
"provider":{
"organization":"Google",
"url":"https://google.com"
},
"version":"1.0.0",
"authentication":{
"schemes":"OAuth2"
},
"defaultInputModes":["text/plain"],
"defaultOutputModes":["text/plain","application/html"],
"capabilities":{
"streaming":true,
"pushNotifications":false
},
"skills":[
{
"id":"route-planner",
"name":"Route planning",
"description":"Helps plan routing between two locations",
"tags":["maps","routing","navigation"],
"examples":[
"plan my route from Sunnyvale to Mountain View",
"what's the commute time from Sunnyvale to San Francisco at 9AM",
"create turn by turn directions from Sunnyvale to Mountain View"
],
// can return a video of the route
"outputModes":["application/html","video/mp4"]
},
{
"id":"custom-map",
"name":"My Map",
"description":"Manage a custom map with your own saved places",
"tags":["custom-map","saved-places"],
"examples":[
"show me my favorite restaurants on the map",
"create a visual of all places I've visited in the past year"
],
"outputModes":["application/html"]
}
]
}
2.3.2 發起Task
允許客戶端向遠端代理傳送內容,以啟動新任務、恢復中斷的任務或重新開啟已完成的任務。
{
"jsonrpc":"2.0",
"id":1,
"method":"tasks/send",
"params":{
"id":"de38c76d-d54c-436c-8b9f-4c2703648d64",
"message":{
"role":"user",
"data":[{
"type":"text",
"text":"tell me a joke"
}]
},
"metadata":{}
}
}
2.3.3 設定ClientAgent任務狀態監聽
ClientAgent可以設定一個方法,給到ServerAgent,當ServerAgent修改Task狀態後,同步呼叫ClientAgent的監聽方法。
//Request
{
"jsonrpc":"2.0",
"id":1,
"method":"tasks/pushNotification/set",
"params":{
"id":"de38c76d-d54c-436c-8b9f-4c2703648d64",
"pushNotificationConfig":{
"url":"https://example.com/callback",
"authentication":{
"schemes":["jwt"]
}
}
}
}
//Response
{
"jsonrpc":"2.0",
"id":1,
"result":{
"id":"de38c76d-d54c-436c-8b9f-4c2703648d64",
"pushNotificationConfig":{
"url":"https://example.com/callback",
"authentication":{
"schemes":["jwt"]
}
}
}
}
2.3.4 執行 Task,返回結果
Server Agent執行任務,並以Artifact的形式,返回結果。
{
"jsonrpc":"2.0",
"id":1,
"result":{
"id":"de38c76d-d54c-436c-8b9f-4c2703648d64",
"sessionId":"c295ea44-7543-4f78-b524-7a38915ad6e4",
"status":{
"state":"completed",
},
"artifacts":[{
"name":"joke",
"parts":[{
"type":"text",
"text":"Why did the chicken cross the road? To get to the other side!"
}]
}],
"metadata":{}
}
}
2.3.5 獲取 Artifact
這裡需要注意的是,Client Agent需要透過獲取Task的方式,獲取到Artifact
//Request
{
"jsonrpc":"2.0",
"id":1,
"method":"tasks/get",
"params":{
"id":"de38c76d-d54c-436c-8b9f-4c2703648d64",
"historyLength":10,
"metadata":{}
}
}
//Response
{
"jsonrpc":"2.0",
"id":1,
"result":{
"id":"de38c76d-d54c-436c-8b9f-4c2703648d64",
"sessionId":"c295ea44-7543-4f78-b524-7a38915ad6e4",
"status":{
"state":"completed"
},
"artifacts":[{
"parts":[{
"type":"text",
"text":"Why did the chicken cross the road? To get to the other side!"
}]
}],
"history":[
{
"role":"user",
"parts":[
{
"type":"text",
"text":"tell me a joke"
}
]
}
],
"metadata":{}
}
}
三、 A2A vs. MCP
如果沒有A2A,只使用MCP是否也可以實現Agent之間的互相呼叫?答案肯定是可以的。那為什麼還要有A2A呢?
官方認為,A2A是MCP的一個補充,相當於對子領域的一個增強。
我個人的看法是:MCP還是傳統的工程思維,A2A則是站在人的思維來看待世界。
首先,我們要理解MCP的定位:提供一個規範的方式,向LLMs/Agent提供上下文。MCP強調的是LLMs/Agent為主體,MCPServer為附屬的模式。而A2A強調的是Agent和Agent之間的相互操作,協議雙端是對等的。
下面兩個官方的圖示,可以幫助大家理解A2A和MCP在工程領域的定位問題。
Agent-To-Agent

Agent-To-MCP-To-Agent

四、展望
Agent相互之間的發現、瞭解和互動呼叫,是一個發展趨勢。
首先,企業基於當前業務,都在探索、建立各種各樣的領域Agent。在內部的各種領域Agent之間的溝通協作,是必須要面對和解決的一個問題。
其次,對於對外提供Agent服務的提供商來說,我如何讓其他Agent主動發現我,就像SEO,吸引更多的流量,也是一個需要思考的問題。
參考資料:
[1]https://google.github.io/A2A/#/[2]https://developers.googleblog.com/en/a2a-a-new-era-of-agent-interoperability/[3]https://modelcontextprotocol.io/introduction
低成本、高效能的湖倉一體化架構
湖倉一體架構融合了資料湖的低成本、高擴充套件性,以及資料倉庫的高效能、強資料治理能力,高效應對大資料時代的挑戰。SelectDB 透過高效能資料分析處理引擎和豐富的湖倉資料對接能力,助力企業加速從 0 到 1 構建湖倉體系,降低轉型過程中的風險和成本。
點選閱讀原文檢視詳情。