
1. परियोजना अवलोकन
A2A Protocol .NET SDK एक .NET लाइब्रेरी है जो Google के A2A Protocol v0.2.1 को लागू करती है, जिससे .NET अनुप्रयोगों में एजेंट-से-एजेंट संचार संभव होता है। यह SDK ASP.NET Core अनुप्रयोगों के साथ काम करने के लिए डिज़ाइन किया गया है, जिससे आपके एजेंटों में A2A समर्थन जोड़ने का एक सरल तरीका प्रदान होता है।
मुख्य विशेषताएँ
- प्रोटोकॉल संगतता: A2A Protocol v0.2.1 की अधिकांश विशेषताओं को लागू करता है
- मल्टी-फ्रेमवर्क समर्थन: .NET 9.0, .NET 8.0, और .NET Standard 2.0 का समर्थन करता है
- ASP.NET Core एकीकरण: सरल एकीकरण विधियाँ प्रदान करता है
- कार्य प्रबंधन: मानकीकृत कार्य प्रबंधन और निष्पादन समर्थन
- स्ट्रीमिंग: रीयल-टाइम स्ट्रीमिंग प्रतिक्रियाओं का समर्थन करता है
- OpenTelemetry: अंतर्निहित टेलीमेट्री और अवलोकनीयता समर्थन
परियोजना स्थिति
लाइब्रेरी ने प्रोटोकॉल की अधिकांश विशेषताओं को लागू किया है, लेकिन कुछ परिदृश्य अभी भी अपूर्ण हो सकते हैं। सबसे बड़ी अनुपस्थित विशेषता पुश नोटिफिकेशन का उपयोग करके क्लाइंट कॉलबैक है।
2. A2A .NET Core आर्किटेक्चर
2.1 परियोजना संरचना
src/
├── A2A/ # मुख्य A2A प्रोटोकॉल कार्यान्वयन
│ ├── Client/ # क्लाइंट घटक
│ ├── JsonRpc/ # JSON-RPC कार्यान्वयन
│ ├── Models/ # डेटा मॉडल
│ ├── Server/ # सर्वर-साइड घटक
│ └── openapi.yaml # API विनिर्देश
└── A2A.AspNetCore/ # ASP.NET Core एकीकरण
2.2 मुख्य घटक
- A2A Core Library: मुख्य प्रोटोकॉल कार्यान्वयन शामिल है
- A2A.AspNetCore: ASP.NET Core एकीकरण प्रदान करता है
- Sample Projects: विभिन्न उपयोग परिदृश्यों को प्रदर्शित करने वाले उदाहरण कोड
3. A2A .NET क्लाइंट कार्यान्वयन
3.1 A2AClient क्लास
A2AClient क्लास एजेंटों के साथ संवाद करने के लिए मुख्य क्लाइंट इंटरफेस है, जो IA2AClient इंटरफेस को लागू करता है।
मुख्य फंक्शन:
public class A2AClient : IA2AClient
{
// संदेश भेजें
public Task<A2AResponse> SendMessageAsync(MessageSendParams taskSendParams)
// कार्य प्राप्त करें
public Task<AgentTask> GetTaskAsync(string taskId)
// कार्य रद्द करें
public Task<AgentTask> CancelTaskAsync(TaskIdParams taskIdParams)
// स्ट्रीम संदेश भेजना
public async IAsyncEnumerable<SseItem<A2AEvent>> SendMessageStreamAsync(MessageSendParams taskSendParams)
// कार्य को पुनः सदस्यता दें
public async IAsyncEnumerable<SseItem<A2AEvent>> ResubscribeToTaskAsync(string taskId)
}
मुख्य विशेषताएँ:
- JSON-RPC संचार: सभी संचार JSON-RPC प्रोटोकॉल के माध्यम से किए जाते हैं
- स्ट्रीमिंग प्रतिक्रिया: रीयल-टाइम स्ट्रीमिंग के लिए Server-Sent Events (SSE) का समर्थन करता है
- सीरियलाइजेशन अनुकूलन: उच्च-प्रदर्शन सीरियलाइजेशन के लिए System.Text.Json स्रोत जनरेटर का उपयोग करता है
- त्रुटि प्रबंधन: पूर्ण त्रुटि प्रबंधन और स्थिति प्रबंधन
3.2 JsonRpcContent क्लास
JSON-RPC अनुरोधों के लिए विशेष रूप से HTTP सामग्री क्लास:
public class JsonRpcContent : HttpContent
{
public JsonRpcContent(JsonRpcRequest request)
{
_request = request;
Headers.ContentType = new MediaTypeHeaderValue("application/json");
}
}
3.3 A2ACardResolver क्लास
एजेंट कार्ड जानकारी को पार्स करने और प्राप्त करने के लिए उपयोग किया जाता है:
public class A2ACardResolver
{
public async Task<AgentCard> GetAgentCardAsync(Uri agentUri)
public async Task<AgentCard> GetAgentCardAsync(string agentUrl)
}
4. A2A .NET सर्वर कार्यान्वयन
4.1 TaskManager क्लास
TaskManager कार्य जीवनचक्र प्रबंधन के लिए जिम्मेदार मुख्य सर्वर-साइड घटक है।
मुख्य जिम्मेदारियाँ:
- कार्य जीवनचक्र प्रबंधन: कार्य बनाना, अपडेट करना, रद्द करना
- संदेश प्रसंस्करण: आने वाले संदेशों और कार्य अपडेट को संभालना
- इवेंट वितरण: कार्य स्थिति परिवर्तन इवेंट प्रबंधन
- स्टोरेज अमूर्तीकरण:
ITaskStoreइंटरफेस के माध्यम से कार्य स्थायित्व
मुख्य विधियाँ:
public class TaskManager : ITaskManager
{
// इवेंट हैंडलर
public Func<MessageSendParams, Task<Message>>? OnMessageReceived { get; set; }
public Func<AgentTask, Task> OnTaskCreated { get; set; }
public Func<AgentTask, Task> OnTaskCancelled { get; set; }
public Func<AgentTask, Task> OnTaskUpdated { get; set; }
public Func<string, AgentCard> OnAgentCardQuery { get; set; }
// मुख्य संचालन
public async Task<AgentTask> CreateTaskAsync(string? contextId = null)
public async Task<AgentTask?> CancelTaskAsync(TaskIdParams? taskIdParams)
public async Task<A2AResponse?> SendMessageAsync(MessageSendParams messageSendParams)
public async Task<IAsyncEnumerable<A2AEvent>> SendMessageStreamAsync(MessageSendParams messageSendParams)
public async Task UpdateStatusAsync(string taskId, TaskState status, Message? message = null, bool final = false)
public async Task ReturnArtifactAsync(string taskId, Artifact artifact)
}
4.2 ITaskStore इंटरफेस
कार्य भंडारण के लिए अमूर्त इंटरफेस:
public interface ITaskStore
{
Task<AgentTask?> GetTaskAsync(string taskId);
Task SetTaskAsync(AgentTask task);
Task UpdateStatusAsync(string taskId, TaskState status);
}
4.3 ASP.NET Core एकीकरण
A2A.AspNetCore लाइब्रेरी द्वारा प्रदान की गई एक्सटेंशन मेथड्स के माध्यम से:
// JSON-RPC A2A समर्थन जोड़ें
app.MapA2A(taskManager, "/echo");
// HTTP A2A समर्थन जोड़ें
app.MapHttpA2A(taskManager, "/echo");
5. A2A .NET डेटा मॉडल
5.1 मुख्य मॉडल क्लासेस
AgentCard - एजेंट कार्ड
public class AgentCard
{
public string Name { get; set; } // एजेंट नाम
public string Description { get; set; } // एजेंट विवरण
public string Url { get; set; } // एजेंट URL
public AgentProvider? Provider { get; set; } // प्रदाता जानकारी
public string Version { get; set; } // संस्करण जानकारी
public AgentCapabilities Capabilities { get; set; } // एजेंट क्षमताएँ
public List<AgentSkill> Skills { get; set; } // एजेंट कौशल
public List<string> DefaultInputModes { get; set; } // डिफ़ॉल्ट इनपुट मोड
public List<string> DefaultOutputModes { get; set; }// डिफ़ॉल्ट आउटपुट मोड
}
AgentTask - एजेंट कार्य
public class AgentTask : A2AResponse
{
public string Id { get; set; } // कार्य ID
public string? ContextId { get; set; } // संदर्भ ID
public AgentTaskStatus Status { get; set; } // कार्य स्थिति
public List<Artifact>? Artifacts { get; set; } // कार्य आर्टिफैक्ट
public List<Message>? History { get; set; } // संदेश इतिहास
public Dictionary<string, JsonElement>? Metadata { get; set; } // मेटाडेटा
}
Message - संदेश
public class Message : A2AResponse
{
public MessageRole Role { get; set; } // संदेश भूमिका (User/Agent)
public List<Part> Parts { get; set; } // संदेश भाग
public string? MessageId { get; set; } // संदेश ID
public string? TaskId { get; set; } // संबंधित कार्य ID
public string? ContextId { get; set; } // संदर्भ ID
public Dictionary<string, JsonElement>? Metadata { get; set; } // मेटाडेटा
}
5.2 कार्य स्थितियाँ
public enum TaskState
{
Submitted, // प्रस्तुत
Working, // कार्यरत
InputRequired, // इनपुट आवश्यक
Completed, // पूर्ण
Canceled, // रद्द
Failed, // विफल
Rejected // अस्वीकृत
}
5.3 संदेश भाग प्रकार
कई संदेश भाग प्रकारों का समर्थन करता है:
TextPart: पाठ सामग्रीFilePart: फ़ाइल सामग्रीDataPart: डेटा सामग्री
6. A2A .NET AgentServer उदाहरण विस्तृत विश्लेषण
6.1 परियोजना अवलोकन
AgentServer उदाहरण दिखाता है कि कैसे विभिन्न प्रकार के एजेंटों को बनाया और तैनात किया जाए, जिसमें शामिल हैं:
- EchoAgent: सरल इको एजेंट
- EchoAgentWithTasks: कार्य समर्थन के साथ इको एजेंट
- HostedClientAgent: होस्टेड क्लाइंट एजेंट
- ResearcherAgent: शोधकर्ता एजेंट (स्टेट मशीन कार्यान्वयन)
6.2 EchoAgent कार्यान्वयन
public class EchoAgent
{
private ITaskManager? _taskManager;
public void Attach(TaskManager taskManager)
{
_taskManager = taskManager;
taskManager.OnMessageReceived = ProcessMessage;
taskManager.OnAgentCardQuery = GetAgentCard;
}
public Task<Message> ProcessMessage(MessageSendParams messageSendParams)
{
var messageText = messageSendParams.Message.Parts.OfType<TextPart>().First().Text;
var message = new Message()
{
Role = MessageRole.Agent,
MessageId = Guid.NewGuid().ToString(),
ContextId = messageSendParams.Message.ContextId,
Parts = [new TextPart() { Text = $"Echo: {messageText}" }]
};
return Task.FromResult(message);
}
}
6.3 ResearcherAgent कार्यान्वयन
ResearcherAgent एक अधिक जटिल स्टेट मशीन कार्यान्वयन दिखाता है:
public class ResearcherAgent
{
private enum AgentState
{
Planning, // योजना चरण
WaitingForFeedbackOnPlan, // योजना पर प्रतिक्रिया की प्रतीक्षा
Researching // शोध चरण
}
public async Task Invoke(string taskId, string message)
{
switch (_agentStates[taskId])
{
case AgentState.Planning:
await DoPlanning(taskId, message);
break;
case AgentState.WaitingForFeedbackOnPlan:
if (message == "go ahead")
await DoResearch(taskId, message);
else
await DoPlanning(taskId, message);
break;
case AgentState.Researching:
await DoResearch(taskId, message);
break;
}
}
}
7. AgentServer उदाहरण चलाने का तरीका
7.1 पर्यावरण आवश्यकताएँ
- .NET 9.0 SDK या उच्चतर
- वैकल्पिक: OpenTelemetry Collector (टेलीमेट्री डेटा के लिए)
7.2 चलाने के चरण
-
परियोजना क्लोन करें:
git clone https://github.com/a2aproject/a2a-dotnet cd a2a-dotnet -
उदाहरण निर्देशिका में नेविगेट करें:
cd samples/AgentServer -
परियोजना चलाएँ:
dotnet run -
सेवा चल रही है यह सत्यापित करें: सेवा निम्नलिखित पोर्ट पर शुरू होगी:
- HTTP: http://localhost:5048
- HTTPS: https://localhost:7014
7.3 उपलब्ध एंडपॉइंट
/echo- सरल इको एजेंट/echotasks- कार्य समर्थन के साथ इको एजेंट/hostedclient- होस्टेड क्लाइंट एजेंट/researcher- शोधकर्ता एजेंट
7.4 API कॉल का परीक्षण
एजेंट कार्ड प्राप्त करें
curl -X GET http://localhost:5048/echo/.well-known/agent.json
इको एजेंट को संदेश भेजें
curl -X POST http://localhost:5048/echo \
-H "Content-Type: application/json" \
-d '{
"id": "1",
"jsonrpc": "2.0",
"method": "message/send",
"params": {
"message": {
"messageId": "12345",
"role": "user",
"parts": [
{
"kind": "text",
"text": "Hello, world!"
}
]
}
}
}'
शोधकर्ता एजेंट कार्य बनाएँ
curl -X POST http://localhost:5048/researcher \
-H "Content-Type: application/json" \
-d '{
"id": "1",
"jsonrpc": "2.0",
"method": "message/send",
"params": {
"message": {
"messageId": "research-1",
"role": "user",
"parts": [
{
"kind": "text",
"text": "Research the current price of butter"
}
]
}
}
}'
8. अनुक्रम आरेख
8.1 सरल संदेश प्रसंस्करण अनुक्रम आरेख
sequenceDiagram
participant Client as Client
participant Server as A2A Server
participant Agent as Agent Implementation
participant TaskMgr as TaskManager
Client->>Server: POST /echo (JSON-RPC message/send)
Server->>TaskMgr: SendMessageAsync()
TaskMgr->>Agent: OnMessageReceived()
Agent->>Agent: ProcessMessage()
Agent-->>TaskMgr: Return Message
TaskMgr-->>Server: Return A2AResponse
Server-->>Client: JSON-RPC Response
8.2 कार्य प्रसंस्करण अनुक्रम आरेख
sequenceDiagram
participant Client as Client
participant Server as A2A Server
participant TaskMgr as TaskManager
participant Agent as Agent Implementation
participant Store as TaskStore
Client->>Server: POST /researcher (message/send)
Server->>TaskMgr: SendMessageAsync()
TaskMgr->>TaskMgr: CreateTaskAsync()
TaskMgr->>Store: SetTaskAsync()
TaskMgr->>Agent: OnTaskCreated()
Agent->>Agent: State Change (Planning)
Agent->>TaskMgr: UpdateStatusAsync(Working)
TaskMgr->>Store: UpdateStatusAsync()
Agent->>TaskMgr: ReturnArtifactAsync()
Agent->>TaskMgr: UpdateStatusAsync(InputRequired)
TaskMgr-->>Server: Return AgentTask
Server-->>Client: JSON-RPC Response
Note over Client,Store: Client sends follow-up message
Client->>Server: POST /researcher (message/send, taskId)
Server->>TaskMgr: SendMessageAsync()
TaskMgr->>Store: GetTaskAsync()
TaskMgr->>Agent: OnTaskUpdated()
Agent->>Agent: State processing logic
Agent->>TaskMgr: UpdateStatusAsync(Completed)
TaskMgr-->>Server: Return AgentTask
Server-->>Client: JSON-RPC Response
8.3 स्ट्रीमिंग प्रसंस्करण अनुक्रम आरेख
sequenceDiagram
participant Client as Client
participant Server as A2A Server
participant TaskMgr as TaskManager
participant Agent as Agent Implementation
Client->>Server: POST /echo (JSON-RPC message/stream)
Server->>TaskMgr: SendMessageStreamAsync()
TaskMgr->>Agent: OnMessageReceived()
loop Streaming Response
Agent->>TaskMgr: Generate Event
TaskMgr->>Server: A2AEvent
Server->>Client: Server-Sent Event
end
Agent->>TaskMgr: Complete Processing
TaskMgr->>Server: End Stream
Server->>Client: Close Connection
9. A2A .NET प्रमुख डिज़ाइन पैटर्न
9.1 इवेंट-ड्रिवन आर्किटेक्चर
TaskManager इवेंट-ड्रिवन पैटर्न का उपयोग करता है:
OnMessageReceived: आने वाले संदेशों को संभालनाOnTaskCreated: कार्य निर्माण इवेंटOnTaskUpdated: कार्य अपडेट इवेंटOnTaskCancelled: कार्य रद्दीकरण इवेंट
9.2 रणनीति पैटर्न
विभिन्न एजेंट कार्यान्वयन में विभिन्न प्रसंस्करण रणनीतियाँ हो सकती हैं:
- स्टेटलेस प्रसंस्करण (EchoAgent)
- स्टेटफुल प्रसंस्करण (ResearcherAgent)
- कार्य-उन्मुख प्रसंस्करण (EchoAgentWithTasks)
9.3 स्टोरेज अमूर्तीकरण
ITaskStore इंटरफेस के माध्यम से कार्य स्टोरेज अमूर्तीकरण:
InMemoryTaskStore: इन-मेमोरी स्टोरेज कार्यान्वयन- डेटाबेस स्टोरेज कार्यान्वयन के लिए विस्तारणीय
10. A2A .NET प्रदर्शन और अवलोकनीयता
10.1 प्रदर्शन अनुकूलन
- स्रोत-जनित सीरियलाइजेशन: System.Text.Json स्रोत जनरेटर का उपयोग करता है
- AOT संगतता: Native AOT संकलन का समर्थन करता है
- अतुल्यकालिक प्रसंस्करण: async/await पैटर्न का व्यापक उपयोग
- स्ट्रीमिंग प्रसंस्करण: बड़े डेटा वॉल्यूम स्ट्रीमिंग का समर्थन करता है
10.2 अवलोकनीयता
एकीकृत OpenTelemetry समर्थन:
- वितरित ट्रेसिंग: ActivitySource एकीकरण
- मेट्रिक्स संग्रह: कार्य स्थिति और प्रदर्शन मेट्रिक्स
- लॉगिंग: संरचित लॉगिंग समर्थन
// OpenTelemetry कॉन्फ़िगरेशन उदाहरण
builder.Services.AddOpenTelemetry()
.WithTracing(tracing => tracing
.AddSource(TaskManager.ActivitySource.Name)
.AddSource(A2AJsonRpcProcessor.ActivitySource.Name)
.AddConsoleExporter()
.AddOtlpExporter());
11. A2A .NET सारांश
A2A .NET SDK .NET अनुप्रयोगों में एजेंट-से-एजेंट संचार को लागू करने के लिए एक पूर्ण, उत्पादन-तैयार समाधान प्रदान करता है।
11.1 मुख्य लाभ
- मानकीकृत प्रोटोकॉल: Google के A2A Protocol मानक पर आधारित
- आसान एकीकरण: सरल ASP.NET Core एकीकरण
- लचीला आर्किटेक्चर: कई एजेंट कार्यान्वयन पैटर्न का समर्थन करता है
- उच्च प्रदर्शन: अनुकूलित सीरियलाइजेशन और अतुल्यकालिक प्रसंस्करण
- अवलोकनीयता: अंतर्निहित टेलीमेट्री और निगरानी समर्थन
- विस्तारणीयता: अमूर्त इंटरफेस कस्टम कार्यान्वयन का समर्थन करते हैं
11.2 उपयोग के मामले
- AI एजेंट सिस्टम: बुद्धिमान एजेंट इंटरैक्शन सिस्टम बनाना
- माइक्रोसर्विस आर्किटेक्चर: सेवाओं के बीच बुद्धिमान संचार
- वर्कफ़्लो इंजन: जटिल व्यावसायिक प्रक्रियाओं का एजेंट-आधारित प्रसंस्करण
- चैटबॉट: मल्टी-एजेंट सहयोगी संवाद प्रणाली
11.3 भविष्य का विकास
- पुश नोटिफिकेशन: पूर्ण क्लाइंट कॉलबैक समर्थन
- अधिक स्टोरेज बैकएंड: डेटाबेस और वितरित स्टोरेज समर्थन
- सुरक्षा वृद्धि: अधिक व्यापक प्रमाणीकरण और प्राधिकरण तंत्र
- प्रोटोकॉल अपडेट: A2A Protocol के नवीनतम संस्करणों के साथ अद्यतन रहना
11.4 विकास अनुशंसाएँ
- सरल शुरुआत: मूल अवधारणाओं को समझने के लिए EchoAgent का उपयोग करें
- स्टेट प्रबंधन समझें: ResearcherAgent के स्टेट मशीन कार्यान्वयन का अध्ययन करें
- त्रुटि प्रबंधन पर जोर दें: व्यापक त्रुटि प्रबंधन और पुनर्प्राप्ति तंत्र लागू करें
- निगरानी और डिबगिंग: सिस्टम निगरानी के लिए OpenTelemetry का उपयोग करें
- परीक्षण-संचालित: व्यापक इकाई परीक्षण और एकीकरण परीक्षण लिखें
यह SDK .NET डेवलपर्स को अगली पीढ़ी के बुद्धिमान एजेंट सिस्टम बनाने के लिए एक शक्तिशाली और लचीला प्लेटफॉर्म प्रदान करता है। इसकी स्पष्ट आर्किटेक्चर और समृद्ध उदाहरणों के माध्यम से, डेवलपर्स जल्दी से शुरू कर सकते हैं और जटिल एजेंट-से-एजेंट संचार अनुप्रयोग बना सकते हैं।
Related Articles
Explore more content related to this topic
A2UI Introduction - Declarative UI Protocol for Agent-Driven Interfaces
Discover A2UI, the declarative UI protocol that enables AI agents to generate rich, interactive user interfaces. Learn how A2UI works, who it's for, how to use it, and see real-world examples from Google Opal, Gemini Enterprise, and Flutter GenUI SDK.
Agent Gateway Protocol (AGP): Practical Tutorial and Specification
Learn the Agent Gateway Protocol (AGP): what it is, problems it solves, core spec (capability announcements, intent payloads, routing and error codes), routing algorithm, and how to run a working simulation.
Integrating A2A Protocol - Intelligent Agent Communication Solution for BeeAI Framework
Using A2A protocol instead of ACP is a better choice for BeeAI, reducing protocol fragmentation and improving ecosystem integration.
A2A vs ACP Protocol Comparison Analysis Report
A2A (Agent2Agent Protocol) and ACP (Agent Communication Protocol) represent two mainstream technical approaches in AI multi-agent system communication: 'cross-platform interoperability' and 'local/edge autonomy' respectively. A2A, with its powerful cross-vendor interconnection capabilities and rich task collaboration mechanisms, has become the preferred choice for cloud-based and distributed multi-agent scenarios; while ACP, with its low-latency, local-first, cloud-independent characteristics, is suitable for privacy-sensitive, bandwidth-constrained, or edge computing environments. Both protocols have their own focus in protocol design, ecosystem construction, and standardization governance, and are expected to further converge in openness in the future. Developers are advised to choose the most suitable protocol stack based on actual business needs.
Building an A2A Currency Agent with LangGraph
This guide provides a detailed explanation of how to build an A2A-compliant agent using LangGraph and the Google Gemini model. We'll walk through the Currency Agent example from the A2A Python SDK, explaining each component, the flow of data, and how the A2A protocol facilitates agent interactions.