中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

多Agent協作入門:基于A2A協議的Agent通(tong)信(上)

大家好,我是Edison。

之前我們學習了Semantic Kernel中的一些常見的編排模式,相信你已經了解了一些。在(zai)Agent時(shi)代,有(you)兩個協(xie)議(yi)目前(qian)非常火熱(re),一個是MCP 模型上下(xia)文協(xie)議(yi)(之前(qian)我(wo)們已經學過了(le)),另一個是A2A (Agent-to-Agent),今天(tian)我(wo)們就來開始(shi)了(le)解下(xia)A2A。

A2A協議簡介

A2A 即 Agent-to-Agent,翻譯(yi)過(guo)來就是“智能代理之間的協議”,我們可以理解為它就是一個(ge)大模(mo)型Agent們用來“聊天”的“通用語(yu)言”。

image

Agent 和 Agent 之間的交互,和人類之間的溝通有些類似:不同的人有不同的能力,每個人都擅長做自己最擅長的領域。為了一起完成一個任務,必須不斷地交換信息 和 協同合作。在Agent時代也如此,Agent也需要分工明確和相互協作。但是,不同的企業不同的團隊可能會開發出各種各樣的Agent,而這些Agent可能都只會說自己的“方言”,如何讓它們能夠順暢溝通,就是A2A協議產生的背景。
簡而言之,A2A定義了一套清晰、標準的溝通方式,讓Agent們可以順暢地交流,讓不同平臺和框架下的Agent都能夠說“同一種話”,實現無障礙的信息交換和協作。
例如,下面有三個Agent,它(ta)們(men)分別(bie)用于不同的任務,通(tong)過(guo)A2A協議(yi)可(ke)以(yi)讓它(ta)們(men)之(zhi)間(jian)可(ke)以(yi)順暢地通(tong)信,最終一起為用戶提供完整的方案(an)。

image

可以看到,各個Agent按(an)統一消息格(ge)式響應各自的(de)信息,最終由旅游(you)規(gui)劃Agent將結(jie)果進行(xing)整合(he)并生(sheng)成最終結(jie)果輸出(chu)給用戶(hu)。

技術上(shang)來說,A2A 通(tong)(tong)(tong)過標(biao)準化(hua)的組件(jian)(如 Agent Cards)為 Agent 間的“相互發(fa)現與握(wo)手”提供了通(tong)(tong)(tong)用語言。它在 JSON-RPC、HTTP/SSE 等底層傳輸(shu)之(zhi)上(shang),定義(yi)(yi)了能(neng)力發(fa)現(通(tong)(tong)(tong)過 Agent 卡片以及標(biao)準化(hua)的能(neng)力定義(yi)(yi))、會話管理、任務生命周期管理、消息(xi)與內容(rong)單(dan)元(Part)、權(quan)限認證、流式與事件(jian)等語義(yi)(yi),使多(duo)智(zhi)能(neng)體系(xi)統(tong)能(neng)夠靈活拼接、異步協作,并(bing)具備企業(ye)級安全(quan)與可擴展(zhan)性。

A2A和MCP的關系

A2A 和 MCP 看起(qi)來很(hen)相似,但其實(shi)它們是互(hu)補的(de)(de)關系(xi),一(yi)起(qi)形成完整的(de)(de)AI時代的(de)(de)通(tong)信協議方案。

image

MCP提供了統一的上下文管理和工具調用接口,整合大模型驅動的概率計算與傳統工具驅動的結構化計算。A2A則為多Agent協同注入了開放標準。二者的(de)結合,將單(dan)一AI應用推向分布式、模塊(kuai)化的(de)智能生態。

總結(jie)一下:

  • MCP提(ti)供垂直集成,將Agent連接到工具和資源。
  • A2A提供水平通信,將(jiang)Agent連接到(dao)其他(ta)Agent。

Hello A2A

這里我們(men)來實現一個A2A的Hello World示例,當然是(shi)用我們(men)最(zui)熟悉的.NET啦。

A2A .NET SDK 是一個(ge)實(shi)現 A2A 協議(yi) v0.2.1 的(de)(de) .NET 庫,用(yong)于(yu)在 .NET 應用(yong)程序(xu)中(zhong)啟用(yong)代(dai)理之(zhi)間的(de)(de)通信。該 SDK 設計用(yong)于(yu)與 ASP.NET Core 應用(yong)程序(xu)配(pei)合使用(yong),提供(gong)了一種簡單的(de)(de)方(fang)式為 Agent 添加 A2A 支持。

GitHub: 

這里(li)我們先不(bu)管(guan)A2A的一(yi)些核心對象,直接來寫(xie)一(yi)個(ge)Hello World來有個(ge)感性認(ren)識即可。根據官網示(shi)例,我們寫(xie)一(yi)個(ge)A2A Agent Server和一(yi)個(ge)A2A Client。

(1)EchoAgentServer:負責將用戶輸入的信息進行加工(gong)返回;

(2)A2A Client:負(fu)責將用(yong)戶輸入的信息傳遞給(gei)EchoAgentServer處(chu)理(li),返回EchoAgentServer的處(chu)理(li)結果(guo);

首(shou)先,我(wo)們創(chuang)建一個ASP.NET Web (Empty) 項目取(qu)名為(wei)EchoAgentServer,然后安裝以下包(bao):

A2A.AspNetCore 0.1.0-preview.2

然后,創建(jian)一個EchoAgent類用(yong)于定義該Agent的實現:

public class EchoAgent
{
    public void Attach(ITaskManager taskManager)
    {
        taskManager.OnMessageReceived = ProcessMessageAsync;
        taskManager.OnAgentCardQuery = GetAgentCardAsync;
    }
    private Task<Message> ProcessMessageAsync(MessageSendParams messageSendParams, CancellationToken cancellationToken)
    {
        var text = messageSendParams.Message.Parts.OfType<TextPart>().First().Text;
        return Task.FromResult(new Message
        {
            Role = MessageRole.Agent,
            MessageId = Guid.NewGuid().ToString(),
            ContextId = messageSendParams.Message.ContextId,
            Parts = [new TextPart { Text = $"Echo: {text}" }]
        });
    }
    private Task<AgentCard> GetAgentCardAsync(string agentUrl, CancellationToken cancellationToken)
    {
        return Task.FromResult(new AgentCard
        {
            Name = "Echo Agent",
            Description = "Echoes messages back to the user",
            Url = agentUrl,
            Version = "1.0.0",
            DefaultInputModes = ["text"],
            DefaultOutputModes = ["text"],
            Capabilities = new AgentCapabilities { Streaming = true }
        });
    }
}

最后,在Program.cs中注冊該Agent并使用A2A AspNetCore SDK進行端點的映射,主要就是使用MapA2A這個擴(kuo)展(zhan)方法來實(shi)現(xian):

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
// Create and register your agent
var taskManager = new TaskManager();
var agent = new EchoAgent();
agent.Attach(taskManager);
app.MapA2A(taskManager, "/echo");
app.Run();

好啦,Server有(you)了,現在(zai)我們創建一(yi)個控制臺項目作為A2A Client來調(diao)用(yong)Server。

同(tong)樣,你需要安裝(zhuang)一下(xia)A2A Package(這里就不再是A2A.AspNetCore了哈(ha)):

A2A 0.1.0-preview.2

然后(hou),通(tong)過下面的(de)(de)示例代(dai)碼一步步完成Agent的(de)(de)服務發現、卡(ka)片解析 以(yi)及 發送消息通(tong)信。

// Discover agent and create client
var cardResolver = new A2ACardResolver(new Uri("//localhost:7243/"));
var agentCard = await cardResolver.GetAgentCardAsync();
var client = new A2AClient(new Uri(agentCard.Url));
// Send message
var userMessage = new Message
{
    Role = MessageRole.User,
    Parts = [new TextPart { Text = "Hello!" }]
};
Console.WriteLine($"User Message: {((TextPart)userMessage.Parts[0]).Text}");
var agentResponse = (Message)await client.SendMessageAsync(new MessageSendParams
{
    Message = userMessage
});
Console.WriteLine($"Agent Response: {((TextPart)agentResponse.Parts[0]).Text}");
Console.ReadKey();

這里我們(men)將Server 和 Client 都啟動(dong)起(qi)來,查看控制臺輸出結果:

image

可以看(kan)到,Agent Response是從(cong)Agent Server處理后返回(hui)的結果,正確!

小(xiao)結

本文介(jie)紹了(le)A2A的基本概念以及(ji)和MCP的關系,然(ran)后(hou)通過(guo)一個(ge)Hello World案例介(jie)紹了(le)如何快速開始(shi)一個(ge)A2A Demo,相信我們(men)可(ke)以有一個(ge)快速的感性認(ren)識。

下一篇,我們將學習對A2A的核(he)心對象如Agent Card, Task, Artifact, Message等,典型(xing)工作(zuo)流程(cheng),以及在A2A .NET SDK中集(ji)成大模型(xing)實現一個稍微復雜點(dian)的案例。

參考資料

黃佳:《》

圣杰:.NET+AI | Semantic Kernel入門到精通

 

posted @ 2025-10-07 16:32  EdisonZhou  閱讀(237)  評論(0)    收藏  舉報