एजेंट कार्ड
एक एजेंट के लिए एक सेवा प्रोफ़ाइल
एक छोटा सार्वजनिक दस्तावेज़ कॉल करने वालों को एजेंट का नाम, समापन बिंदु, कौशल, प्रोटोकॉल संस्करण, सुरक्षा आवश्यकताएं और यह बताता है कि यह स्ट्रीमिंग या सूचनाओं का समर्थन करता है या नहीं।
A2A एक एआई एजेंट को दूसरे एजेंट से परिचय कराने, नौकरी या कार्य स्वीकार करने, प्रगति की रिपोर्ट करने, अधिक जानकारी मांगने और उपयोगी परिणाम देने का एक मानक तरीका देता है - भले ही दूसरा एजेंट एक अलग एआई सेवा में चलता हो, एक अलग प्रोग्रामिंग भाषा या एजेंट फ्रेमवर्क का उपयोग करता हो, या किसी अन्य क्लाउड में तैनात हो। किसी भी एजेंट को यह समझने की ज़रूरत नहीं है कि दूसरे का निर्माण कैसे हुआ। वे संवाद करने और एक साथ काम करने के लिए A2A मानक का उपयोग करते हैं।
ADK-Rust A2A संदर्भ वास्तुकला
The network contract stays separate from the agent's model, tools, memory, and internal orchestration.
01
एजेंट या एप्लिकेशन किसी अन्य एजेंट से काम करने के लिए कह रहा है।
यह तय करता है कि किस दूरस्थ विशेषज्ञ को कार्य मिलना चाहिए।
कार्ड खोजता है, स्ट्रीमिंग चुनता है, और प्रोटोकॉल संदेश भेजता है।
02
सार्वजनिक अनुबंध प्रत्येक संगत ग्राहक समझ सकता है।
नाम, कौशल, समापन बिंदु, प्रोटोकॉल संस्करण, सुरक्षा और घोषित क्षमताएं।
संस्करण, सामग्री प्रकार, आईडी, संदेश भाग, मेटाडेटा, पहचान और सीमाएँ।
एक साझा कार्यान्वयन के माध्यम से JSON-RPC या REST संचालन भेजता है।
03
फ़्रेमवर्क कार्य निष्पादित करता है और टाइप की गई प्रगति उत्पन्न करता है।
आह्वान संदर्भ बनाता है और एजेंट घटनाओं को स्ट्रीम करता है।
LLM, वर्कफ़्लो, ग्राफ़, कस्टम, या मल्टी-एजेंट तर्क।
Rust उपकरण और MCP
सत्र और स्मृति
04
एक मान्य राज्य मशीन लंबे समय से चल रहे कार्य को निरीक्षण योग्य बनाती है।
स्थिति, संदर्भ, इतिहास, कलाकृतियाँ, मेटाडेटा और पुश कॉन्फ़िगरेशन।
केवल वैध परिवर्तन ही स्वीकार किए जाते हैं; टर्मिनल कार्य टर्मिनल बने रहते हैं।
05
कॉल करने वाला चुनता है कि वह किस प्रकार परिवर्तन प्राप्त करना चाहता है।
पूरा कार्य और उसकी कलाकृतियाँ लौटाएँ।
पहले कार्य, फिर स्थिति और आर्टिफैक्ट अपडेट।
06
लंबे कार्यों को एक कनेक्शन खुला रखे बिना बाद में रिपोर्ट किया जा सकता है।
एक क्लाइंट किसी मौजूदा कार्य के लिए अपडेट सुनता है।
पुन: प्रयास और एसएसआरएफ जांच के साथ प्रमाणित डिलीवरी।
विचार से शुरुआत करें
एक ADK-Rust प्रक्रिया के अंदर, एजेंट Rust प्रकार, सत्र, उपकरण और प्रत्यक्ष फ़ंक्शन कॉल साझा कर सकते हैं। एक बार जब कोई एजेंट किसी अन्य सेवा-या किसी अन्य संगठन से संबंधित हो जाता है, तो वे निजी कार्यान्वयन विवरण अब एक सुरक्षित अनुबंध नहीं रह जाते हैं।
A2A उस सीमा पर साझा भाषा को परिभाषित करता है। कॉल करने वाले को पता चलता है कि रिमोट एजेंट क्या ऑफर करता है, एक संरचित संदेश भेजता है, ज्ञात राज्यों के माध्यम से एक कार्य का पालन करता है, और यह जानने की आवश्यकता के बिना कलाकृतियों को प्राप्त करता है कि कौन सा मॉडल, ढांचा या उपकरण समापन बिंदु के पीछे चलता है।
ADK-Rust adk-server में A2A v1 लागू करता है और प्रोटोकॉल को सीधे Runner से जोड़ता है। वही एजेंट जिसका आप स्थानीय स्तर पर परीक्षण करते हैं, एक नेटवर्क सेवा बन सकता है, जबकि RemoteA2aAgent किसी अन्य ADK-Rust सिस्टम को सामान्य एजेंट इंटरफ़ेस के माध्यम से इसका उपभोग करने देता है।
एजेंट कार्ड
एक छोटा सार्वजनिक दस्तावेज़ कॉल करने वालों को एजेंट का नाम, समापन बिंदु, कौशल, प्रोटोकॉल संस्करण, सुरक्षा आवश्यकताएं और यह बताता है कि यह स्ट्रीमिंग या सूचनाओं का समर्थन करता है या नहीं।
संदेश
एक संदेश में एक भूमिका, एक अद्वितीय आईडी और पाठ या संरचित डेटा जैसे एक या अधिक भाग होते हैं। अद्वितीय आईडी सुरक्षित पुनर्प्रयास को संभव बनाती है।
कार्य
एक कार्य दूरस्थ कार्य को एक आईडी, एक वार्तालाप संदर्भ, एक स्थिति, संदेश इतिहास, मेटाडेटा और रास्ते में उत्पन्न कोई भी कलाकृति देता है।
विरूपण साक्ष्य
एक आर्टिफैक्ट कार्य से जुड़ा एक नामित परिणाम है: एक रिपोर्ट, निर्णय, योजना, उत्पन्न फ़ाइल, या अन्य संरचित आउटपुट जिसे कोई अन्य सिस्टम उपयोग कर सकता है।
एक काम का पालन करें
कॉल करने वाला व्यक्ति एक प्रतिक्रिया की प्रतीक्षा कर सकता है, एक लाइव इवेंट स्ट्रीम खोल सकता है, किसी मौजूदा कार्य की सदस्यता ले सकता है, या बाद के अपडेट के लिए एक वेबहुक पंजीकृत कर सकता है। कार्य की पहचान और संदर्भ प्रत्येक डिलीवरी मोड को उसी कार्य से जोड़े रखते हैं।
कार्य राज्य मशीन
A2A रिटर्न टेक्स्ट से कहीं अधिक कार्य करता है। यह काम को एक पहचान, बातचीत का संदर्भ, वर्तमान स्थिति, इतिहास और कलाकृतियाँ देता है। ADK-Rust प्रत्येक संक्रमण को सहेजने से पहले सत्यापित करता है।
SUBMITTEDसर्वर ने कार्य स्वीकार कर लिया.
WORKINGएजेंट इसे क्रियान्वित कर रहा है.
INPUT REQUIREDएजेंट को अधिक जानकारी चाहिए.
AUTH REQUIREDकॉल करने वाले को प्राधिकरण प्रदान करना होगा.
COMPLETEDकाम और कलाकृतियाँ तैयार हैं.
FAILEDनिष्पादन एक त्रुटि के साथ समाप्त हुआ.
CANCELEDएक स्वीकृत रद्दीकरण ने कार्य समाप्त कर दिया।
REJECTEDसर्वर ने कार्य अस्वीकार कर दिया.
INPUT_REQUIRED, कॉल करने वाला उसी के साथ एक और संदेश भेजता है contextId. ADK-Rust कार्य ढूंढता है, उसे लौटाता है WORKING, संदेश जोड़ता है, और वही कार्य जारी रखता है।वास्तविक दुनिया का तर्क प्रवाह
A customer tells the company's support agent that an order arrived damaged. The support agent remains responsible for the conversation: it understands the request, keeps the customer informed, collects any missing evidence, and presents the final decision. It does not have direct access to warehouse stock, delivery records, or replacement policy.
वह परिचालन संबंधी जानकारी एक अलग से तैनात पूर्ति एजेंट की है। A2A के माध्यम से, सहायता एजेंट पता लगा सकता है कि पूर्ति एजेंट क्या करता है, उसे एक कार्य के रूप में जांच भेजता है, उसकी प्रगति का अनुसरण करता है, अधिक जानकारी के लिए अनुरोधों का उत्तर देता है और अंतिम प्रतिस्थापन निर्णय प्राप्त करता है। प्रत्येक सेवा अपना स्वयं का कोड, डेटा, उपकरण, मॉडल प्रदाता और सुरक्षा नियंत्रण रखती है; वे केवल A2A अनुबंध द्वारा परिभाषित संदेश, कार्य स्थिति और कलाकृतियों को साझा करते हैं।
एक सहायता समन्वयक पूर्ति एजेंट के कार्ड को पढ़ता है और पुष्टि करता है कि यह ऑर्डर जांच को संभालता है और प्रगति को स्ट्रीम करता है।
यह ऑर्डर नंबर, ग्राहक का अनुरोध, एक अद्वितीय संदेश आईडी और एक नया वार्तालाप संदर्भ भेजता है।
रिमोट ADK-Rust एजेंट कॉल करने वाले को उन आंतरिक चीजों को उजागर किए बिना ऑर्डर टूल, इन्वेंट्री, डिलीवरी इतिहास और कंपनी नीति की जांच करता है।
यदि क्षति के प्रमाण की आवश्यकता है, तो अनुमान लगाने या चुपचाप विफल होने के बजाय कार्य INPUT_REQUIRED हो जाता है।
समन्वयक उसी contextId का उपयोग करके अनुमोदित साक्ष्य प्रदान करता है; इतिहास और कार्य की पहचान बरकरार रहती है।
कार्य स्थिति इतिहास और प्रतिस्थापन निर्णय और अगले चरणों वाली एक कलाकृति के साथ पूरा होता है।
Sequence diagram
Read from top to bottom. The A2A service owns the network contract and task record. The fulfilment agent owns its reasoning and private tools.
Calling agent
Protocol boundary
ADK-Rust Runner
Orders · inventory · policy
GET /.well-known/agent-card.json
Discover skills and streaming
Agent Card
Fulfilment capability published
SendStreamingMessage
ORD-1042 · messageId msg-order-1042
Runner invocation
Create task and execute agent
order.lookup + policy.check
Use private business tools
Evidence required
Damage photo is missing
INPUT_REQUIRED
Persist state and context
SSE status update
Ask support for evidence
SendMessage · same contextId
Approved photo reference
Resume task
INPUT_REQUIRED → WORKING
inventory.reserve
Reserve replacement stock
Artifact + COMPLETED
Replacement decision
Final SSE events
Auditable result returned
कोड और तार प्रतिक्रियाएँ
ये उदाहरण ADK-Rust कार्यान्वयन के समान समान v1 ऑपरेशन नाम, संदेश फ़ील्ड, कार्य स्थिति और SSE प्रतिक्रिया आकृतियों का उपयोग करते हैं। आईडी और ऑर्डर विवरण तय किए गए हैं ताकि पूरी बातचीत का अनुसरण करना आसान हो।
let fulfilment = LlmAgentBuilder::new("fulfilment")
.description("Investigates orders and delivery")
.model(model)
.instruction(
"Use the approved order, inventory, and policy tools. Ask for evidence when the replacement policy requires it."
)
.build()?;
A2aServer::builder()
.agent(Arc::new(fulfilment))
.agent_card_name("Fulfilment Agent")
.streaming(true)
.build()?
.serve()
.await?;let fulfilment = RemoteA2aAgent::builder("fulfilment")
.description("Investigates orders and delivery")
.agent_url("https://agents.example.com/fulfilment")
.streaming(true)
.build()?;
let support = LlmAgentBuilder::new("support")
.model(model)
.instruction("Own the customer conversation.")
.sub_agent(Arc::new(fulfilment))
.build()?;{
"jsonrpc": "2.0",
"id": "replace-1",
"method": "SendStreamingMessage",
"params": {
"message": {
"messageId": "msg-order-1042",
"role": "ROLE_USER",
"parts": [{
"text": "Investigate damaged order ORD-1042 and prepare a replacement decision."
}]
}
}
}data: {
"jsonrpc":"2.0", "id":"replace-1",
"result":{"task":{
"id":"task-order-1042",
"contextId":"ctx-order-1042",
"status":{"state":"TASK_STATE_SUBMITTED"}
}}
}
data: {
"jsonrpc":"2.0", "id":"replace-1",
"result":{"statusUpdate":{
"taskId":"task-order-1042",
"contextId":"ctx-order-1042",
"status":{"state":"TASK_STATE_WORKING"}
}}
}{
"statusUpdate": {
"taskId": "task-order-1042",
"contextId": "ctx-order-1042",
"status": {
"state": "TASK_STATE_INPUT_REQUIRED",
"message": {
"role": "ROLE_AGENT",
"parts": [{
"text": "Please provide a photo showing the damaged item."
}]
}
}
}
}{
"jsonrpc": "2.0",
"id": "replace-2",
"method": "SendMessage",
"params": {
"message": {
"messageId": "msg-order-1042-photo",
"contextId": "ctx-order-1042",
"role": "ROLE_USER",
"parts": [{
"text": "Evidence received and approved: damage-photo-8841.jpg"
}]
}
}
}{
"artifactUpdate": {
"taskId": "task-order-1042",
"contextId": "ctx-order-1042",
"artifact": {
"artifactId": "replacement-decision-1042",
"name": "Replacement decision",
"parts": [{
"text": "Approved. Reserve SKU-RED-42 and dispatch with priority shipping."
}]
}
}
}
{
"statusUpdate": {
"taskId": "task-order-1042",
"contextId": "ctx-order-1042",
"status": { "state": "TASK_STATE_COMPLETED" }
}
}A2A v1 API
ADK-Rust, A2A v1 में सभी 11 ऑपरेशन लागू करता है। छोटे कार्य के लिए, SendMessage पर कॉल करें और कार्य परिणाम की प्रतीक्षा करें। जब कार्य में अधिक समय लग सकता है, तो पहले कार्य प्राप्त करने के लिए SendStreamingMessage का उपयोग करें, उसके बाद SSE पर लाइव स्थिति और आर्टिफैक्ट इवेंट का उपयोग करें।
लौटाई गई कार्य आईडी आपके क्लाइंट को कार्य दोबारा सबमिट किए बिना पुनः कनेक्ट करने देती है। यह नवीनतम स्थिति प्राप्त कर सकता है, संबंधित कार्यों की सूची बना सकता है, आगे के अपडेट की सदस्यता ले सकता है, या रद्द करने का अनुरोध कर सकता है। यदि क्लाइंट किसी कनेक्शन को खुला नहीं रख सकता है, तो वह एक प्रमाणित वेबहुक पंजीकृत कर सकता है और रिमोट एजेंट को बाद में परिवर्तन प्रदान करने दे सकता है।
एक संदेश भेजें और पूरा कार्य या लाइव स्ट्रीम प्राप्त करें।
SendMessageSendStreamingMessageवर्तमान कार्य पढ़ें, मेल खाने वाले कार्यों की सूची बनाएं, या किसी कार्य को तब रद्द करें जब उसकी स्थिति इसकी अनुमति दे।
GetTaskListTasksCancelTaskपहले से मौजूद किसी कार्य के अपडेट के लिए SSE सदस्यता खोलें।
SubscribeToTaskकिसी कार्य के लिए प्रमाणित वेबहुक गंतव्य बनाएं, पढ़ें, सूचीबद्ध करें और हटाएं।
CreatePushConfigGetPushConfigListPushConfigsDeletePushConfigकिसी एजेंट की प्रकाशित सेवा प्रोफ़ाइल के विस्तारित संस्करण का अनुरोध करें।
GetExtendedAgentCardJSON-RPC और REST रूट एक ही RequestHandler में डिस्पैच होते हैं, इसलिए ट्रांसपोर्ट के बीच कार्य व्यवहार में बदलाव नहीं होता है।
आने वाले A2A संदेश ADK-Rust सामग्री बन जाते हैं। Runner चयनित एजेंट को निष्पादित करता है और उसके ईवेंट को कार्य स्थिति और कलाकृतियों में परिवर्तित करता है।
दोहराया गया messageId एक ही कार्य को दो बार चलाने के बजाय मौजूदा कार्य लौटाता है। उत्पादन परिनियोजन को इस मैपिंग को पुनरारंभ के दौरान जारी रखना चाहिए।
पहला SSE इवेंट संपूर्ण कार्य है। बाद की घटनाओं में स्थिति और आर्टिफैक्ट अपडेट होते हैं, इसलिए ग्राहक को हमेशा पता होता है कि स्ट्रीम किससे संबंधित है।
RemoteA2aAgent, ADK-Rust एजेंट विशेषता लागू करता है। एक समन्वयक अपने एजेंट पदानुक्रम में एक नेटवर्क सेवा को शामिल कर सकता है और सामान्य रूपरेखा कार्यक्रम प्राप्त कर सकता है।
संस्करण बातचीत, संदेश सत्यापन, वाहक प्रमाणीकरण, दर सीमित करना, ऑडिट इंटरसेप्टर, वेबहुक प्रमाणीकरण और एसएसआरएफ जांच सेवा की रक्षा कर सकते हैं।
सही सीमा चुनें
A2A एक नेटवर्क, एक सार्वजनिक अनुबंध, प्रमाणीकरण, विफलता प्रबंधन और दूरस्थ कार्य स्थिति का परिचय देता है। वे लागतें तब मूल्यवान होती हैं जब वे वास्तविक स्वतंत्रता पैदा करती हैं; वे अनावश्यक हैं जब प्रत्येक एजेंट पहले से ही एक ही प्रक्रिया में रहता है।
स्थानीय उप-एजेंट
रिमोट A2A एजेंट
Rust एजेंट से लेकर नेटवर्क सेवा तक
सुविधा सर्वर एक एजेंट कार्ड, सत्र, A2A मार्गों और सक्षम स्ट्रीमिंग के साथ एक Axum एप्लिकेशन बनाता है। रिमोट एडॉप्टर उस सेवा को खोजता है और उसके कार्य अपडेट को वापस ADK-Rust ईवेंट में परिवर्तित करता है।
use adk_server::a2a::convenience::A2aServer;
let app = A2aServer::quick_start(agent);
let listener = tokio::net::TcpListener::bind(
"0.0.0.0:8080"
).await?;
axum::serve(listener, app).await?;use adk_server::a2a::RemoteA2aAgent;
let fulfilment = RemoteA2aAgent::builder("fulfilment")
.description("Investigates orders and delivery")
.agent_url("https://agents.example.com/fulfilment")
.build()?;
let coordinator = LlmAgentBuilder::new("support")
.model(model)
.sub_agent(Arc::new(fulfilment))
.build()?;RequestHandler::with_runner टास्क स्टोर, पुश सेंडर, एजेंट कार्ड, Runner सेवाएं, JSON-RPC रूट, REST राउटर और वर्जन-नेगोशिएशन मिडलवेयर को स्पष्ट रूप से चुनने का पथ।उत्पादन से पहले
ADK-Rust Runner के साथ v1 प्रकार, हैंडलर, जीवनचक्र, क्लाइंट, सत्यापन, वितरण आदिम और एकीकरण की आपूर्ति करता है। उत्पादन की तैयारी अभी भी आपकी सेवा के लिए चयनित भंडारण, पहचान, नेटवर्क, अवलोकन और संचालन नीतियों पर निर्भर करती है।
केवल उन कौशल, बाइंडिंग, स्ट्रीमिंग, पुश डिलीवरी और सुरक्षा योजनाओं का विज्ञापन करें जिनका तैनाती वास्तव में समर्थन करती है।
शामिल InMemoryTaskStore और इन-मेमोरी आइडेम्पोटेंसी मैप विकास के लिए उपयोगी हैं। लंबे समय तक चलने वाले उत्पादन कार्य के लिए भंडारण की आवश्यकता होती है जो प्रक्रिया के पुनरारंभ होने से बच जाता है।
इनबाउंड कॉल को प्रमाणित करें और आउटबाउंड पुश डिलीवरी की सुरक्षा करें। HTTP पुश प्रेषक वाहक क्रेडेंशियल्स, अधिसूचना टोकन, पुनः प्रयास और निजी-पता अस्वीकृति का समर्थन करता है।
दूरस्थ कार्य एक अनुरोध को पूरा कर सकता है। क्लाइंट टाइमआउट, रद्दीकरण नीति, पुनः प्रयास व्यवहार और जब कोई सेवा अनुपलब्ध हो जाती है तो क्या होता है, इसे परिभाषित करें।
एजेंट सिस्टम कनेक्ट करें
एक ईमानदार एजेंट कार्ड और एक उपयोगी कार्य से शुरुआत करें। स्ट्रीमिंग, मल्टी-टर्न इनपुट, कार्य दृढ़ता, सदस्यता, प्रमाणित पुश और सीमा नियंत्रण जोड़ें क्योंकि काम लंबा हो जाता है और सेवा अधिक महत्वपूर्ण हो जाती है।