ए2ए एजेंट-एजेंट प्रोटोकॉल
Type: Build
Languages: Python (stdlib, Agent Card + Task harness)
Prerequisites: Phase 13 · 06 (MCP fundamentals), Phase 13 · 08 (MCP client)
Time: ~75 minutes
सीखने के लक्ष्य
- एजेंट-टू-टू-टूल (MCP) के उपयोग के मामलों में एजेंट-टू-एजेंट (A2A) के बीच अंतर करना।
- पर एजेंट कार्ड प्रकाशित करें
/.well-known/agent-card.jsonकौशल औरsupportedInterfacesमेटाडेटा। - कार्य जीवन चक्र का पालन करें:
TASK_STATE_SUBMITTED,TASK_STATE_WORKING,TASK_STATE_INPUT_REQUIRED, और टर्मिनल राज्योंTASK_STATE_COMPLETED,TASK_STATE_FAILED,TASK_STATE_CANCELED,TASK_STATE_REJECTED. . - संदेशों का उपयोग करें जिनकी प्रत्येक भाग में एक से एक है
text,raw,urlयाdata, और कलाकृतियों के रूप में आउटपुट.
समस्या
ग्राहक सेवा एजेंट को रिपोर्ट लिखने को एक विशेषज्ञ लेखक एजेंट को सौंपने की आवश्यकता होती है।
- कस्टम REST एपीआई काम करता है, लेकिन हर जोड़ने एक बार है.
- साझा कोडबेस. दो एजेंटों को एक ही ढांचे को चलाने की आवश्यकता होती है.
- MCP: MCP को कॉल करने के लिए उपकरण है, दो एजेंटों के लिए नहीं जो एक साथ काम करते हैं जबकि प्रत्येक एजेंट की अस्पष्ट आंतरिक तर्क को संरक्षित करते हैं।
A2A अंतर को भरता है। यह एक एजेंट के जीवन चक्र, संदेशों और कलाकृतियों के साथ एक कार्य को दूसरे को भेजने के रूप में बातचीत का मॉडल बनाता है। बुलाए गए एजेंट की आंतरिक स्थिति अस्पष्ट रहती है।
A2A "चैरेक के माध्यम से एजेंटों को एक दूसरे से बात करने दें" प्रोटोकॉल है। यह MCP की जगह नहीं लेता है; दोनों पूरक हैं।
अवधारणा
एजेंट कार्ड
A2A के अनुरूप प्रत्येक एजेंट एक कार्ड प्रकाशित करता है /.well-known/agent-card.json:
json{
"name": "research-agent",
"description": "Summarizes academic papers and drafts citations.",
"version": "1.2.0",
"supportedInterfaces": [
{
"url": "https: TOK0
"protocolBinding": "JSONRPC",
"protocolVersion": "1.0"
}
],
"capabilities": {"streaming": true, "pushNotifications": true},
"securitySchemes": {
"bearer": {"httpAuthSecurityScheme": {"scheme": "Bearer"}}
},
"securityRequirements": [{"schemes": {"bearer": {"list": []}}}],
"defaultInputModes": ["text/plain"],
"defaultOutputModes": ["text/markdown"],
"skills": [
{
"id": "summarize_paper",
"name": "Summarize a paper",
"description": "Read a paper PDF and produce a 3-paragraph summary.",
"tags": ["research", "summarization"],
"inputModes": ["text/plain", "application/pdf"],
"outputModes": ["text/markdown"]
}
]
}खोज URL पर आधारित हैः कार्ड लाओ, पहले चुनें supportedInterfacesप्रविष्टि जिसका protocolBindingइनपुट और आउटपुट मोड मीडिया प्रकार हैं।
हस्ताक्षरित एजेंट कार्ड
एक कार्ड एक signaturesप्रत्येक प्रविष्टि एक JWS (RFC 7515) है जो कार्ड के RFC 8785 कैनोनिकल JSON पर गणना की जाती है, जिसमें signaturesउपभोक्ता कार्ड को उसी तरह से कैनोनिकलाइज़ करते हैं और सत्यापित करते हैं. नकलीकरण को रोकता है।
कार्य जीवन चक्र
textTASK_STATE_SUBMITTED
-> TASK_STATE_WORKING
-> TASK_STATE_COMPLETED | TASK_STATE_FAILED | TASK_STATE_CANCELED | TASK_STATE_REJECTED
TASK_STATE_WORKING
-> TASK_STATE_INPUT_REQUIRED
-> TASK_STATE_WORKING (the client sends a message with the same taskId)ग्राहक से शुरू करते हैंSendMessageतथा सर्वर कार्य बनाता है। कहा एजेंट राज्यों के माध्यम से संक्रमण; ग्राहकों के साथ सर्वेक्षणGetTaskया SSE पर धारा के साथ SendStreamingMessageऔर SubscribeToTaskएक धारा ले जाती हैstatusUpdateऔर artifactUpdateकार्य समाप्त होने पर समाप्त होता है।finalध्वज।
संदेश और भाग
एक संदेश में एक messageId, ए role(ROLE_USERया ROLE_AGENT), और एक या अधिक भागों. प्रत्येक भाग में एक सामग्री फ़ील्ड होता है, और उस फ़ील्ड का नाम प्रकार होता है। कोई kindक्षेत्र।
text: सादा सामग्री।raw: फ़ाइल बाइट्स, JSON में आधार64, आमतौर पर के साथfilenameऔरmediaType. .url: फ़ाइल सामग्री का लिंक।data: संरचित JSON उपयोगिता लोड (कॉल एजेंट के लिए संरचित इनपुट) ।
उदाहरण:
json{
"messageId": "msg-001",
"role": "ROLE_USER",
"parts": [
{"text": "Summarize this paper."},
{"raw": "...", "filename": "paper.pdf", "mediaType": "application/pdf"},
{"data": {"targetLength": "3 paragraphs"}, "mediaType": "application/json"}
]
}कलाकृतियाँ
आउटपुट आर्टिफैक्ट हैं, कच्चे स्ट्रिंग नहीं। एक आर्टिफैक्ट एक नामित, टाइप आउटपुट हैः
json{
"artifactId": "art-001",
"name": "summary",
"parts": [{"text": "...", "mediaType": "text/markdown"}]
}कलाकृतियों को टुकड़ों के रूप में स्ट्रीम किया जा सकता है।artifactUpdateघटना कलाकृतियों के साथ है प्लस appendऔर lastChunk. . कॉल करने वाला जमा हो जाता है.
तीन प्रोटोकॉल बंधन
- JSON-RPC 2.0 over HTTP(
JSONRPC) अनुरोधों के लिए पोस्ट, स्ट्रीमिंग के लिए एसएसई।SendMessage,SendStreamingMessage,GetTask,ListTasks,CancelTask,SubscribeToTask,CreateTaskPushNotificationConfig,GetTaskPushNotificationConfig,ListTaskPushNotificationConfigs,DeleteTaskPushNotificationConfigऔरGetExtendedAgentCard. . - gRPC(
GRPC) उद्यम वातावरण के लिए जहां gRPC मूल है। समान विधि नाम। - HTTP+JSON/REST(
HTTP+JSON) संसाधन URL जैसेPOST /message:sendऔरGET /tasks/{id}. .
सभी तीनों बंधन एक ही डेटा मॉडल रखते हैं।supportedInterfacesप्रविष्टि नाम एक बाध्यकारी और उसके protocolVersion. ग्राहक हेडर भेजेंA2A-Version: 1.0हर अनुरोध पर, क्योंकि एक सर्वर संस्करण 0.3 के रूप में एक अनुरोध के बिना पढ़ता है।
httpPOST /a2a HTTP/1.1
Host: research.example.com
Content-Type: application/json
A2A-Version: 1.0
{
"jsonrpc": "2.0",
"id": 1,
"method": "SendMessage",
"params": {
"message": {
"messageId": "msg-001",
"role": "ROLE_USER",
"parts": [{"text": "Summarize this paper."}]
}
}
}खुलेपन का संरक्षण
एक प्रमुख डिजाइन सिद्धांतः बुलाए गए एजेंट की आंतरिक स्थिति अस्पष्ट है। कॉल करने वाला कार्य स्थिति और कलाकृतियों को देखता है। बुलाए गए एजेंट की सोच श्रृंखला, उसके उपकरण कॉल, उसके उप-एजेंट प्रतिनिधि सभी अदृश्य हैं। यह एमसीपी से अलग है, जहां उपकरण कॉल पारदर्शी हैं।
तर्कः A2A प्रतियोगियों को आंतरिक जानकारी के बिना सहयोग करने की अनुमति देता है। A2A "इस ग्राहक सेवा एजेंट को कॉल करें" हो सकता है, बिना कॉल करने वाले को यह जानने के कि एजेंट सेवा को कैसे लागू करता है।
समय रेखा
- 2025-04-09.गूगल A2A की घोषणा करता है।
- 2025-06-23.लिनक्स फाउंडेशन को दान किया गया।
- 2025-08.आईबीएम के एसीपी को अवशोषित करता है।
- 2025-09.एपी2 विस्तार (एजेंट भुगतान) जहाज।
- 2026-04.150+ सहायक संगठनों के साथ जारी v1.0।
एमसीपी के साथ संबंध
| Dimension | MCP | A2A |
|---|---|---|
| Use case | Agent-to-tool | Agent-to-agent |
| Opacity | Transparent tool calls | Opaque inner reasoning |
| Typical caller | Agent runtime | Another agent |
| State | Tool-call result | Task with lifecycle |
| Authorization | OAuth 2.1 (Phase 13 · 16) | Agent Card securitySchemes + securityRequirements |
| Transport | Stdio / Streamable HTTP | JSON-RPC / gRPC / HTTP+JSON |
जब आप किसी विशिष्ट टूल को कॉल करना चाहते हैं तो MCP का उपयोग करें। जब आप किसी अन्य एजेंट को पूरा कार्य सौंपना चाहते हैं तो A2A का उपयोग करें। कई उत्पादन प्रणालियों दोनों का उपयोग करती हैंः एक एजेंट अपने टूल लेयर के लिए MCP का उपयोग करता है और A2A अपने सहयोग लेयर के लिए।
इसका प्रयोग करें
code/main.pyएक न्यूनतम ए 2 ए हर्नल लागू करता हैः लेखक एजेंट अपना कार्ड प्रकाशित करता है, शोध एजेंट उसे एक भेजता है SendMessageएक पीडीएफ भाग और एक पाठ निर्देश के साथ अनुरोध, और कार्य के माध्यम से चलता है TASK_STATE_WORKING→ TASK_STATE_INPUT_REQUIRED→ TASK_STATE_WORKING→ TASK_STATE_COMPLETEDसभी stdlib; संदेश के आकार पर ध्यान केंद्रित करने के लिए एक स्मृति में परिवहन का उपयोग करता है.
क्या देखना हैः
- एजेंट कार्ड JSON आकार।
- सर्वर-साइड टास्क आईडी असाइनमेंट और स्टेट ट्रांजिशन।
- उन भागों को टाइप किया गया है जिनकी सामग्री फ़ील्ड मौजूद है।
TASK_STATE_INPUT_REQUIREDशाखा मध्य कार्य।- कलाकृतियों को पूरा होने पर वापस।
इसे भेजें
यह सबक हमें फल देता हैoutputs/skill-a2a-agent-spec.md. एक नए एजेंट को देखते हुए जिसे अन्य एजेंटों द्वारा बुलाया जाना चाहिए, कौशल एजेंट कार्ड JSON, कौशल योजना और अंत बिंदु ब्लूप्रिंट का उत्पादन करता है।
व्यायाम
- दौड़ें
code/main.pyTASK_STATE_INPUT_REQUIREDरुकें जहां बुलाए गए एजेंट स्पष्टीकरण के लिए पूछता है।
- एक हस्ताक्षरित एजेंट कार्ड जोड़ें. एक JWS प्रविष्टि डालें.
signaturesके साथalgपर सेट किया गयाHS256, कार्ड के कैनोनिक JSON हस्ताक्षर बिनाsignaturesएक सत्यापनकर्ता लिखें और पुष्टि करें कि यह एक उत्परिवर्तन कार्ड पर विफल रहता है।
- के साथ कार्य प्रवाह को लागू करें
SendStreamingMessage: लेखक एजेंट द्वारा प्रेषितtask, तीनartifactUpdateटुकड़े, और एकstatusUpdateके साथTASK_STATE_COMPLETEDऔर फिर धारा बंद कर देता है. कॉल करने वाले टुकड़े जमा करते हैं.
- एक ए 2 ए एजेंट डिजाइन करें जो एक एमसीपी सर्वर को लपेटता है। प्रत्येक एमसीपी टूल को एक ए 2 ए कौशल में मैप करें। व्यापारिक अंतरों पर ध्यान दें क्या अस्पष्टता खो गई है?
- A2A v1.0 घोषणा को पढ़ें और एक विशेषता की पहचान करें जो अप्रैल 2026 तक किसी भी ढांचे द्वारा लागू नहीं की गई है। (संकेतः यह मल्टी-हॉप टास्क डेलिगेशन से संबंधित है) ।
प्रमुख शर्तें
| Term | What people say | What it actually means |
|---|---|---|
| A2A | "Agent-to-Agent protocol" | Open protocol for opaque agent collaboration |
| Agent Card | "/.well-known/agent-card.json" | Published metadata describing an agent's skills and supportedInterfaces |
| Skill | "A callable unit" | A named operation the agent supports (analog to MCP tool) |
| Task | "Unit of delegation" | A work item with a lifecycle and final artifact |
| Message | "Task input" | Carries Parts (text, raw, url, data) |
| Part | "Typed chunk" | Exactly one of text / raw / url / data, plus optional mediaType; no kind field |
| Artifact | "Task output" | Named, typed output returned on completion |
| AP2 | "Agent Payments Protocol" | Payments extension built on A2A; card signing is core A2A (signatures) |
| Opacity | "Black-box collaboration" | Called agent's internals are hidden from caller |
TASK_STATE_INPUT_REQUIRED | "Task pause" | Interrupted state when the agent needs more info |
आगे पढ़ना
- a2a-protocol.org कैनोनिक ए2ए विनिर्देश
- a2aproject/A2A — GitHub संदर्भ कार्यान्वयन और एसडीके
- A2A v1.0.1 release: टैग
docs/specification.mdऔर मानदंडspecification/a2a.protoयह सबक निम्नलिखित है - Linux Foundation — A2A launch press release जून 2025 शासन हस्तांतरण
- Google Cloud — A2A protocol upgrade रोडमैप और भागीदार गति
- Google Dev — A2A 1.0 milestone v1.0 रिलीज नोट्स और बैकवर्ड कॉम्पैक्ट गाइड
This free lesson is part of the AI Engineering from Scratch curriculum. Read the full explanation, run the lesson code, and verify the result in the interactive reader or from the repository source.
Browse the complete course catalog or open this lesson on GitHub.