<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
        My Github

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

      大家好,我是Edison。

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

      A2A協議簡介

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

      image

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

      image

      可以看到,各個Agent按統一消息格式響應各自的信息,最終由旅游規劃Agent將結果進行整合并生成最終結果輸出給用戶。

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

      A2A和MCP的關系

      A2A 和 MCP 看起來很相似,但其實它們是互補的關系,一起形成完整的AI時代的通信協議方案。

      image

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

      總結一下:

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

      Hello A2A

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

      A2A .NET SDK 是一個實現 A2A 協議 v0.2.1 的 .NET 庫,用于在 .NET 應用程序中啟用代理之間的通信。該 SDK 設計用于與 ASP.NET Core 應用程序配合使用,提供了一種簡單的方式為 Agent 添加 A2A 支持。

      GitHub: https://github.com/a2aproject/a2a-dotnet

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

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

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

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

      A2A.AspNetCore 0.1.0-preview.2

      然后,創建一個EchoAgent類用于定義該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這個擴展方法來實現:

      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有了,現在我們創建一個控制臺項目作為A2A Client來調用Server。

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

      A2A 0.1.0-preview.2

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

      // Discover agent and create client
      var cardResolver = new A2ACardResolver(new Uri("https://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();

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

      image

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

      小結

      本文介紹了A2A的基本概念以及和MCP的關系,然后通過一個Hello World案例介紹了如何快速開始一個A2A Demo,相信我們可以有一個快速的感性認識。

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

      參考資料

      黃佳:《MCP & A2A前沿實戰

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

       

      posted @ 2025-10-07 16:32  EdisonZhou  閱讀(207)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 激情综合色综合啪啪开心| 91久久精品国产性色也| 亚洲人妻系列中文字幕| 国产中文字幕在线精品| 色综合 图片区 小说区| 男人的天堂av一二三区| 女同AV在线播放| 91精品久久一区二区三区| 亚洲色成人网站www永久四虎| 亚洲精品区二区三区蜜桃| 午夜精品福利亚洲国产| 自拍偷拍一区二区三区四| 日韩av一区二区精品不卡| 国产三级国产精品久久成人| 亚洲色成人一区二区三区 | 国精无码欧精品亚洲一区| 色综合天天色综合久久网| 岛国最新亚洲伦理成人| 久久一区二区中文字幕| 大尺度国产一区二区视频| 亚洲人成网线在线播放VA | 国产福利片无码区在线观看| 久久久久亚洲av成人网址| 国产免费久久精品44| 成年女人免费碰碰视频| 国产蜜臀一区二区在线播放| 精品国产午夜福利在线观看| 啦啦啦视频在线日韩精品| 国产一区二区日韩在线| 亚洲av本道一区二区| 狠狠色丁香婷婷综合尤物| 国产精品一区二区av片| 国产揄拍国产精品| 一边吃奶一边摸做爽视频| 成人午夜福利精品一区二区| 澳门| 午夜精品区| 欧美亚洲人成网站在线观看| 亚洲精品国产一二三区| 天堂V亚洲国产V第一次| 国产肉丝袜在线观看|