<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。

      上一篇,我們了解了A2A協議的基本概念,還通過A2A組件實現了一個Hello World的Demo,有了一個快速的感性認識。這一篇,我們來了解下A2A協議的三大角色、四大對象 以及 工作流程,有了這些基礎的認知后會對我們全面認識A2A有所幫助。

      A2A協議的三大角色

      A2A 即 Agent-to-Agent,它定義了三個關鍵的角色,它們各司其職+互相配合,支撐多個Agent的運行。

      那么,都是哪幾個角色呢?下面告訴你:

      image

      角色1:用戶(User)

      即終端用戶(可能是人類 或 服務),需要使用Agent來完成某個任務。

      角色2:客戶端(Client)

      一個代表用戶向 遠程Agent 發送請求的實體,它發送的請求是嚴格按照A2A協議的。它的表現形式可以是一個應用程序、服務 或 一個Agent。

      例如,我們在上一篇的Demo中開發的一個控制臺應用程序通過引用A2A包來向遠端的Agent發送請求。

      角色3:遠程Agent(Remote Agent)

      一個執行實際任務的Agent(部署在某個遠端Server上),對于客戶端來說是“黑盒”一樣的存在,僅僅通過Agent Card聲明自己提供的接口或技能,但內部實現細節或工作機制是不透明的,即一個“黑盒”。

      例如,我們在上一篇的Demo中開發的一個WebAPI項目EchoAgent,提供了一個ProcessMessage的技能 以及 聲明了一個AgentCard公開了一些元數據。

      A2A的四大對象

      A2A中定義了一套完整的對象體系,其中最核心的就是下面這四個核心對象:

      第一個對象:Agent Card(又稱Agent名片)

      每個A2A的遠程Agent都需要發布一個JSON格式的名片,被稱為“Agent Card”,用于描述這個Agent具有哪些技能 及其 認證機制,便于Client可以獲得這些信息并選擇合適的Agent來完成任務。

      image

      其實,它就和我們在做后端服務開發中的服務注冊和發現的機制差不多,只不過這個注冊的信息被標準化了,下面我們可以看看一個典型的Agent Card的JSON格式:

      {
        "name": "Google Maps Agent",
        "description": "Plan routes, remember places, and generate directions",
        "url": "https://maps-agent.google.com",
        "provider": {
          "organization": "Google",
          "url": "https://google.com"
        },
        "version": "1.0.0",
        "authentication": {
          "schemes": "OAuth2"
        },
        "defaultInputModes": ["text/plain"],
        "defaultOutputModes": ["text/plain", "application/html"],
        "capabilities": {
          "streaming": true,
          "pushNotifications": false
        },
        "skills": [
          {
            "id": "route-planner",
            "name": "Route planning",
            "description": "Helps plan routing between two locations",
            "tags": ["maps", "routing", "navigation"],
            "examples": [
              "plan my route from Sunnyvale to Mountain View",
              "what's the commute time from Sunnyvale to San Francisco at 9AM"
            ],
            "outputModes": ["application/html", "video/mp4"]
          }
        ]
      }

      這個JSON數據簡要描述了一個名為"Google Maps Agent"的Agent定義。這個Agent的主要功能是規劃路線、記住地點和生成導航指示。這個應用由Google提供,版本號是1.0.0,采用OAuth2身份驗證。它支持文本和HTML格式的輸入和輸出,具有流媒體功能,但不支持推送通知。它的一個核心技能是"route-planner",可以幫助用戶規劃兩個地點之間的路線,并輸出HTML和視頻格式的內容。

      在A2A .NET SDK中,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; }// 默認輸出模式
      }

      在上一篇的Demo中,我們在定義EchoAgent時,就實現了一個GetAgentCard方法,并將其注冊到服務發現中最終被Client探索發現時就會以JSON格式輸出給到Client:

      public class EchoAgent
      {
          public void Attach(ITaskManager taskManager)
          {
              taskManager.OnMessageReceived = ProcessMessageAsync;
              taskManager.OnAgentCardQuery = GetAgentCardAsync;
          }
          private Task<Message> ProcessMessageAsync(MessageSendParams messageSendParams, CancellationToken cancellationToken)
          {
              ......
          }
          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 }
              });
          }
      }

      與此同時,在Client中也可以主動進行服務發現,例如上一篇Demo中的Client示例代碼:

      // 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));

      第二個對象:Task (任務)

      Task 是 Client 和 遠程Agent 之間協作的一個概念,很好理解,一個Task代表一個需要完成的任務,每個Task都有一個唯一的ID號,它通常包含了任務狀態、歷史記錄 和 執行結果 等信息。

      Task的主要具體狀態有:submitted, working, completed, canceled, failed 等,下圖展示了Task的狀態機轉換流。

      image

      在A2A .NET SDK中,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; } // 元數據
      }

      第三個對象:Artifact(工件 或 成果)

      Artifact 和我們在DevOps CI/CD流水線中的Artifact(即工件)的概念類似,它是 遠程Agent執行完某個任務后生成輸出的結果(即遠程Agent返回的結果通過一個Artifact對象輸出給Client),每個任務的結果可能都不一樣。

      一個Artifact可以包含多個部分(parts),每個部分(part)可以是:文本、文檔、圖像 等,涉及純文本、文件 和 結構化數據。

      image

      第四個對象:Message(消息)

      Message 也很好理解,它就是 Client 和 遠程Agent 之間通信的 一個消息對象,它通常包含了 指令 和 狀態更新 等內容。

      同樣的,一個Message對象也可以包含多個parts,用于傳遞如 文本、文件 或 結構化 等不同類型的內容。每個Message都有發送方設置的一個唯一的messageId,且通過一些關鍵詞如"user"(代表Client發送的)或“agent”(代表服務端發送的)來區分角色。

      在A2A .NET SDK中,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; } // 元數據
      }

      A2A協議的工作流程

      這里我們來通過一個簡單的例子看看A2A協議的 請求-響應 工作流程是怎么樣的。

      例如,有這樣一個場景“招聘XX崗位候選人搜尋”:

      Step1,用戶在統一界面下向Client(假設它也是一個Agent)發送一個請求消息“請幫我尋找一個XX崗位的候選人”。

      Step2,Client將用戶的請求消息進行封裝,并根據崗位需求依次調用一些遠程Agent如 簡歷檢索Agent、技能篩選Agent 等等。

      例如,下面的請求示例展示了Client在檢索了5位候選人簡歷之后通過A2A協議向遠端技能篩選Agent發送的任務請求:

      {
        "jsonrpc": "2.0",
        "id": 1,
        "method": "tasks/send",
        "params": {
          "id": "de38c76d-d54c-436c-8b9f-4c2703648d64",
          "message": {
            "role": "user",
            "parts": [
              {
                "type": "text",
                "text": "請分析下面5位候選人是否符合崗位需求,并推薦最佳面試人選。"
              }
            ]
          },
          "metadata": {}
        }
      }

      Step3,各個遠端Agent執行各自的任務,并返回給Client對應的Artifact對象結果(如候選人名單等),然后再由Client進行匯總和展示。

      {
        "jsonrpc": "2.0",
        "id": 1,
        "result": {
          "id": "de38c76d-d54c-436c-8b9f-4c2703648d64",
          "sessionId": "c295ea44-7543-4f78-b524-7a38915ad6e4",
          "status": {
            "state": "completed"
          },
          "artifacts": [
            {
              "name": "result",
              "parts": [
                {
                  "type": "text",
                  "text": "第三位候選人最符合你的需求!建議安排面試。"
                }
              ]
            }
          ],
          "metadata": {}
        }
      }

      Step4,后續Client可以陸續調用其他遠端Agent如 面試安排Agent、背景調查Agent等,完成端到端的自動化招聘流程。

      那么,該場景的整個工作流程便如下圖所示:

      image

      除此之外,實際應用案例中通常是A2A與MCP兩個協議一起使用,形成更廣的應用范圍。

      例如,下圖展示了一個汽車維修店的場景,店長智能體 和 機械師智能體 通過A2A協議完成任務移交(hand-off),店長可以處理常見問題,但機械師可以解決技術難題。機械師智能體再通過MCP協議完成內部工具使用完成具體任務,還可以通過A2A協議和零件供應商Agent完成外部協作

      image

      由此可見,其實在企業客服 或 售后中心 等場景中,A2A協議可以被廣泛應用于多Agent協作。

      小結

      本文介紹了A2A的三個主要角色(User、Client 和 Remote Agent)以及 四個核心對象(Agent Card、Task、Artifact 和 Message),并通過簡單的例子介紹了A2A協議的典型工作流程,相信對于你加深了解A2A協議會有幫助。

      下一篇,我們將以一個旅行規劃的應用場景,結合LLM大模型來實現一個A2A協議的案例,它會涉及一個Client 和 三個Remote Agent,是一個拿來練手的好案例

      參考資料

      sing1ee:《2025年完整指南:A2A協議 - AI智能體協作的新標準

      黃佳:《MCP & A2A前沿實戰

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

       

      posted @ 2025-10-09 08:00  EdisonZhou  閱讀(1092)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产成人午夜福利在线观看| 国产91精品调教在线播放| 精品亚洲无人区一区二区| 自拍偷在线精品自拍偷免费| japanese无码中文字幕| 人妻少妇偷人无码视频| 奇米四色7777中文字幕| 亚洲精品一区二区妖精| 精品无人区卡一卡二卡三乱码| 妺妺窝人体色www看美女| 国产又色又爽又黄的网站免费| 色爱区综合激情五月激情| 日韩av一区二区三区不卡| 无码电影在线观看一区二区三区| 国产三级精品福利久久| 漂亮的保姆hd完整版免费韩国| 日韩欧美在线综合网另类| 国产精品大全中文字幕| 老子午夜精品无码| 日韩精品有码中文字幕| 国产精品亚洲二区在线播放| 欧美亚洲h在线一区二区| 亚洲成色精品一二三区| av无码精品一区二区三区四区| 国产在热线精品视频99公交| 美女自卫慰黄网站| 亚洲日韩av无码一区二区三区人| 亚洲精品无码你懂的| 国产成人亚洲综合| 突泉县| 国产亚洲欧美日韩俺去了| 日韩精品卡1卡2日韩在线| 无码一区二区三区久久精品| 免费黄色大全一区二区三区| 亚洲最大的成人网站| 99在线视频免费观看| 久久精品午夜视频| 九九热免费公开视频在线| 亚洲色成人网站www永久| 国产精品美女一区二三区| 国产免费一区二区不卡|