A2A(Agent2Agent)簡介

阿里妹導讀
本文主要介紹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指的是任務的執行者。
ClientServer之間的通訊,可以理解為就是一個個簡單的請求和結果的響應,只不過這個請求是一個個的任務。一個Agent既可以是Client也可以是Server

2.1.2 核心概念

這裡主要介紹一下,Client AgentServer Agent互動的過程中,主要涉及到的一些Entity:AgentCardTaskArtifactMessagePart

2.1.2.1 AgentCard

AgentCardServer Agent的名片,它主要描述了Server Agent的能力、認證機制等資訊。Client Agent透過獲取不同Server AgentAgentCard,瞭解不同Server Agent的能力,來決斷具體的任務執行應該呼叫哪個Server AgentAgentCard內容示例:
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 ClientServer ClientTask中交換MesaageServer Agent生成的結果叫做Artifact
除此之外,每個Task有一個唯一的sessionId,多個Task可以使用一個sessionId,表明多個Task屬於同一個會話的一部分。Task示例:
interfaceTask {idstring;sessionIdstring;statusTaskStatus;  history?: Message[];  artifacts?: Artifact[];   metadata?: Record<stringany>; }interfaceTaskStatus {stateTaskState;  message?: Message;  timestamp?: string}interfaceTaskStatusUpdateEvent {idstring;statusTaskStatus;finalboolean//indicates the end of the event stream  metadata?: Record<stringany>;}interfaceTaskArtifactUpdateEvent {idstring;artifactArtifact;  metadata?: Record<stringany>;}interfaceTaskSendParams {idstring;  sessionId?: stringmessageMessage;  historyLength?: number  pushNotification?: PushNotificationConfig;  metadata?: Record<stringany>; // extension metadata}typeTaskState =  | "submitted"  | "working"  | "input-required"  | "completed"  | "canceled"  | "failed"  | "unknown";

2.1.2.3 Artifact

ArtifactsServer Agent在執行任務後生成的目標結果叫做Artifact,一個Task可能生成一個或者多個Artifact
Artifacts是不可變的,可以命名,並且可以有多個部分。流式響應可以分批次,將結果附加到現有Artifacts上。
interfaceArtifact {  name?: string;  description?: string;partsPart[];  metadata?: Record<stringany>;indexnumber;  append?: boolean;  lastChunk?: boolean;}

2.1.2.4 Message

Task執行過程中,Server AgentClient Agent之間是透過Message完成交流的,當然,這不包括Artifact。它可以包括:Agent的思考、使用者上下文、指令、錯誤、狀態或元資料。
一個Message可以包含多個Part,每個Part攜帶不同的內容。
Message示例:
interface Message {  role: "user" | "agent";  parts: Part[];  metadata?: Record<string, any>;}

2.1.2.5 Part

PartMessageArtifact的核心組成部分,代表了其攜帶的主要內容。每個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 通訊&認證
ClientAgentServerAgent之間透過HTTP協議進行通訊,使用經典的C/S模式,支援SSE流式資料傳輸,資料格式為JSON-RPC2.0
A2A遵循Open API規範進行身份驗證。A2A不會在協議中交換身份資訊。相反,它們會在帶外獲取材料(如令牌),並在HTTP頭中傳輸。
2.3 核心流程
Client AgentServer 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呢?
官方認為,A2AMCP的一個補充,相當於對子領域的一個增強。
我個人的看法是:MCP還是傳統的工程思維,A2A則是站在人的思維來看待世界。
首先,我們要理解MCP的定位:提供一個規範的方式,向LLMs/Agent提供上下文。MCP強調的是LLMs/Agent為主體,MCPServer為附屬的模式。而A2A強調的是AgentAgent之間的相互操作,協議雙端是對等的。
下面兩個官方的圖示,可以幫助大家理解A2AMCP在工程領域的定位問題。
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 構建湖倉體系,降低轉型過程中的風險和成本。
點選閱讀原文檢視詳情。

相關文章