自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

谷歌 A2A (Agent2Agent)架構(gòu)設(shè)計(jì)深度剖析 原創(chuàng)

發(fā)布于 2025-4-23 06:48
瀏覽
0收藏

谷歌 A2A (Agent2Agent)架構(gòu)設(shè)計(jì)深度剖析-AI.x社區(qū)

2025年4月9日,Google正式推出Agent2Agent Protocol(以下簡稱“A2A”)。這一協(xié)議為各類 AI Agent 之間的高效溝通與協(xié)作搭建了橋梁,無論是獨(dú)立 Agent 與獨(dú)立 Agent、獨(dú)立 Agent與企業(yè) Agent,還是企業(yè) Agent與企業(yè) Agent,都可以通過該協(xié)議實(shí)現(xiàn)通信交互和事務(wù)協(xié)作。

谷歌 A2A (Agent2Agent)架構(gòu)設(shè)計(jì)深度剖析-AI.x社區(qū)

下文詳細(xì)剖析之。

1、A2A 介紹

A2A 是一個(gè)開放協(xié)議,它為 AI Agent 之間提供了一種標(biāo)準(zhǔn)方式,無論底層開發(fā)框架或供應(yīng)商如何,都可以進(jìn)行協(xié)作,A2A 充分考慮了 Agent 在與用戶和企業(yè)交互過程中所面臨的挑戰(zhàn),具備以下四大核心功能特性:


谷歌 A2A (Agent2Agent)架構(gòu)設(shè)計(jì)深度剖析-AI.x社區(qū)

第一、能力發(fā)現(xiàn):所有實(shí)現(xiàn) A2A 的 AI Agent 都通過“Agent Card”公開其能力目錄。這有助于其他 AI Agent 發(fā)現(xiàn)給定 AI Agent 實(shí)現(xiàn)的潛在有用功能。谷歌建議使用統(tǒng)一的位置來存儲組織的“Agent Card”。

比如:

https://<DOMAIN>/<agreed-path>/agent.json

第二、任務(wù)管理:通信協(xié)議,時(shí)代短期和長期任務(wù)變得更容易。它幫助通信中的 AI Agent 保持同步,直到請求的任務(wù)完成并返回答案。這很重要,因?yàn)橛行?AI Agent 可能需要很長時(shí)間來執(zhí)行工作,而且目前沒有統(tǒng)一標(biāo)準(zhǔn)如何等待這種情況發(fā)生。

第三、協(xié)作:AI Agent 可以相互發(fā)送消息以傳達(dá)上下文、回復(fù)、工件或用戶指令。

第四、用戶體驗(yàn)協(xié)商:這是一個(gè)很有趣的功能。它允許協(xié)商數(shù)據(jù)返回的格式,以符合用戶界面的期望(比如:圖像、視頻、文本等)。

通過 A2A 公開的 AI Agent 的發(fā)現(xiàn)是一個(gè)重要話題。谷歌建議使用統(tǒng)一的位置來存儲組織的“Agent Card”。

另外,A2A 并沒有重新發(fā)明輪子,建立在現(xiàn)有標(biāo)準(zhǔn)之上:

    1.該協(xié)議建立在現(xiàn)有、流行的標(biāo)準(zhǔn)之上,包括:HTTP、SSE、JSON-RPC,這意味著它更容易與企業(yè)日常使用的現(xiàn)有 IT 堆棧集成。

    2.默認(rèn)安全 - A2A 旨在支持企業(yè)級身份驗(yàn)證和授權(quán),與 OpenAPI 的身份驗(yàn)證方案相當(dāng)。

2、A2A 架構(gòu)設(shè)計(jì)剖析

1)、A2A 架構(gòu)設(shè)計(jì)剖析

在 A2A 協(xié)議中,涉及三個(gè)核心角色:

  • User:用戶是協(xié)議中的關(guān)鍵主體,主要負(fù)責(zé)進(jìn)行認(rèn)證和授權(quán)操作,確保交互的安全性和合法性。
  • Client Agent:客戶端 Agent 是任務(wù)的發(fā)起者,它代表用戶提出需求或請求。
  • Server Agent:服務(wù)端 Agent 是任務(wù)的執(zhí)行者,它接收來自客戶端 Agent 的請求,并執(zhí)行相應(yīng)的操作。

客戶端 Client 與服務(wù)端 Client 之間的通信,本質(zhì)上是基于任務(wù)的請求與響應(yīng)機(jī)制。每個(gè)請求都對應(yīng)一個(gè)具體任務(wù),服務(wù)端 Agent 處理任務(wù)后返回結(jié)果。值得注意的是,一個(gè) Agent 既可以作為客戶端 Agent 發(fā)起任務(wù),也可以作為服務(wù)端 Agent 執(zhí)行任務(wù),具有雙重角色的靈活性。

Client Agent 和 Server Agent 交互的過程中,會涉及到一些 Entity:AgentCard、Task 、Artifact 、Message、Part,下面做個(gè)介紹。

第一、AgentCard 是 Server Agent 的“名片”,它詳細(xì)描述了 Server Agent 的能力、認(rèn)證機(jī)制等關(guān)鍵信息。通過獲取不同 Server Agent 的 AgentCard,Client Agent 能夠全面了解各個(gè) Server Agent 的功能特點(diǎn),從而精準(zhǔn)地選擇最適合執(zhí)行具體任務(wù)的 Server Agent。

以下是 AgentCard 的內(nèi)容示例:

#AgentCard 內(nèi)容示例


interface AgentCard {
  name: string;
  description: string;
  url: string;
  provider?: {
    organization: string;
    url: string;
  };
  version: string;
  documentationUrl?: string;
  capabilities: {
    streaming?: boolean; 
    pushNotifications?: boolean;
    stateTransitionHistory?: boolean;
  };
  authentication: {
    schemes: string[]; 
    credentials?: string;
  };
  defaultInputModes: string[];
  defaultOutputModes: string[];
  skills: {
    id: string; 
    name: string;
    description: string;
    tags: string[];
    examples?: string[]; 
    inputModes?: string[];
    outputModes?: string[];
  }[];
}

第二、Task 是一個(gè)具有明確狀態(tài)的實(shí)體,由 Client Agent 創(chuàng)建并發(fā)起,其狀態(tài)由 Server Agent 負(fù)責(zé)維護(hù)和更新。每個(gè) Task 都旨在實(shí)現(xiàn)一個(gè)特定的目標(biāo)或結(jié)果。在 Task 的執(zhí)行過程中,Client Agent 和 Server Agent 通過交換 Message 進(jìn)行通信,而 Server Agent 執(zhí)行任務(wù)后生成的輸出結(jié)果被稱為 Artifact。

此外,每個(gè) Task 都擁有一個(gè)唯一的 sessionId。多個(gè) Task 可以共享同一個(gè) sessionId,這表明這些 Task 屬于同一個(gè)會話(Session)的一部分,便于管理和跟蹤相關(guān)任務(wù)的執(zhí)行流程。

以下是 Task 的示例:

interface Task {
  id: string;
  sessionId: string;
  status: TaskStatus;
  history?: Message[];
  artifacts?: Artifact[]; 
  metadata?: Record<string, any>; 
}
interface TaskStatus {
  state: TaskState;
  message?: Message;
  timestamp?: string; 
}
interface TaskStatusUpdateEvent {
  id: string;
  status: TaskStatus;
  final: boolean; //indicates the end of the event stream
  metadata?: Record<string, any>;
}
interface TaskArtifactUpdateEvent {
  id: string;
  artifact: Artifact;
  metadata?: Record<string, any>;
}
interface TaskSendParams {
  id: string;
  sessionId?: string; 
  message: Message;
  historyLength?: number; 
  pushNotification?: PushNotificationConfig;
  metadata?: Record<string, any>; // extension metadata
}
type TaskState =
  | "submitted"
  | "working"
  | "input-required"
  | "completed"
  | "canceled"
  | "failed"
  | "unknown";

第三、Artifact 是 Server Agent 在執(zhí)行任務(wù)后生成的目標(biāo)結(jié)果。一個(gè) Task 可能產(chǎn)生一個(gè)或多個(gè) Artifact。

Artifact 具有以下特性:

  • 不可變性:一旦生成,其內(nèi)容不可更改,保證了結(jié)果的穩(wěn)定性和可靠性。
  • 可命名:可以為其指定名稱,便于識別和引用。
  • 多部分結(jié)構(gòu):一個(gè)Artifact可以包含多個(gè)部分,以支持復(fù)雜的結(jié)果結(jié)構(gòu)。
  • 流式響應(yīng)支持:對于需要分批次處理的任務(wù),可以將結(jié)果逐步附加到已有的Artifact上,實(shí)現(xiàn)流式響應(yīng)。

這些特性使得 Artifact 成為任務(wù)執(zhí)行結(jié)果的有效載體,既保證了數(shù)據(jù)的完整性,又提供了靈活性。

以下是 Artifact 的示例:

interface Artifact {
  name?: string;
  description?: string;
  parts: Part[];
  metadata?: Record<string, any>;
  index: number;
  append?: boolean;
  lastChunk?: boolean;
}

第四、Message 在 Task 執(zhí)行過程中,Server Agent 和 Client Agent 通過 Message 進(jìn)行交互,但不涉及 Artifact。Message 可以包含以下內(nèi)容:

  • Agent 的思考過程
  • 用戶上下文信息
  • 執(zhí)行指令
  • 錯(cuò)誤信息
  • 任務(wù)狀態(tài)
  • 元數(shù)據(jù)等

每個(gè) Message 可以由多個(gè) Part 組成,每個(gè) Part 攜帶不同類型的內(nèi)容,以支持豐富多樣的交互需求。

以下是 Message 的示例:

interface Message {
  role: "user" | "agent";
  parts: Part[];
  metadata?: Record<string, any>;
}

第五、Part 是 Message 和 Artifact 的基本構(gòu)成單元,承載著它們的核心內(nèi)容。每個(gè) Part 都明確標(biāo)識了其內(nèi)容類型以及具體內(nèi)容本身。

以下是 Part 的示例:

interface TextPart {
  type: "text";
  text: string;
}
interface FilePart {
  type: "file";
  file: {
    name?: string;
    mimeType?: string;
    // oneof {
    bytes?: string; //base64 encoded content
    uri?: string;
    //}
  };
}
interface DataPart {
  type: "data";
  data: Record<string, any>;
}
type Part = (TextPart | FilePart | DataPart) & {
  metadata: Record<string, any>;
};

2)、A2A 架構(gòu)設(shè)計(jì)核心流程

ClientAgent 和 ServerAgent 之間通過 HTTP協(xié)議 進(jìn)行通信,采用經(jīng)典的 C/S(客戶端/服務(wù)器)模式。通信支持 SSE(Server-Sent Events)流式數(shù)據(jù)傳輸,并且數(shù)據(jù)格式遵循 JSON-RPC 2.0 標(biāo)準(zhǔn)。

在身份驗(yàn)證方面,A2A 遵循 Open API 規(guī)范。值得注意的是,A2A 協(xié)議本身并不直接交換身份信息。相反,身份驗(yàn)證所需的材料(比如:令牌)是在協(xié)議之外(帶外)獲取的,并通過 HTTP 頭部 進(jìn)行傳輸。

Client Agent 和 Server Agent 之間的協(xié)同工作流程主要包括以下6個(gè)關(guān)鍵步驟:

第一、Server Agent 在指定站點(diǎn)上托管自己的 AgentCard,公開其能力和服務(wù)信息。

第二、Client Agent 主動發(fā)現(xiàn)并獲取 Server Agent 的 AgentCard,了解其功能和認(rèn)證要求。

第三、Client Agent 根據(jù)需求發(fā)起一個(gè) Task,明確任務(wù)目標(biāo)和要求。

第四、Client Agent 設(shè)置任務(wù)通知監(jiān)聽,以便及時(shí)接收任務(wù)執(zhí)行狀態(tài)和結(jié)果。

第五、Server Agent 接收任務(wù)后執(zhí)行,并生成 Artifact 作為任務(wù)結(jié)果返回。

第六、Client Agent 獲取 Artifact,完成任務(wù)的最終交付和處理。

2.1、AgentCard 托管與發(fā)現(xiàn)

官方建議將 AgentCard 找在以下路徑:??https://${host}/.well-known/agent.json??

這種方式被稱為 Open Discovery。除此之外,還有另外兩種發(fā)現(xiàn)方式:Curated Discovery 和 Private Discovery

Agent Client 可以通過向 ??https://${host}/.well-known/agent.json?? 發(fā)起請求,獲取指定的 AgentCard,并將其集成到自己的提示詞或工具集中。

//agent card 示例
{
  "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",
        "create turn by turn directions from Sunnyvale to Mountain View"
      ],
      // can return a video of the route
      "outputModes": ["application/html", "video/mp4"]
    },
    {
      "id": "custom-map",
      "name": "My Map",
      "description": "Manage a custom map with your own saved places",
      "tags": ["custom-map", "saved-places"],
      "examples": [
        "show me my favorite restaurants on the map",
        "create a visual of all places I've visited in the past year"
      ],
      "outputModes": ["application/html"]
    }
  ]
}

2.2、Client Agent 發(fā)起 Task

Client Agent 可以向 Server Agent 發(fā)送內(nèi)容,用于啟動新任務(wù)、恢復(fù)中斷的任務(wù)或重新打開已完成的任務(wù)。

{
  "jsonrpc": "2.0",
  "id": 1,
  "method":"tasks/send",
  "params": {
    "id": "de38c76d-d54c-436c-8b9f-4c2703648d64",
    "message": {
      "role":"user",
      "data": [{
        "type":"text",
        "text": "tell me a joke"
      }]
    },
    "metadata": {}
  }
}

2.3、Client Agent 設(shè)置回調(diào)監(jiān)聽

Client Agent 可以配置一個(gè)回調(diào)方法并提供給 Server Agent。一旦 Server Agent 修改了 Task 的狀態(tài),它將自動調(diào)用 Client Agent 的回調(diào)方法,從而實(shí)現(xiàn)狀態(tài)的實(shí)時(shí)同步。

//Request
{
  "jsonrpc": "2.0",
  "id": 1,
  "method":"tasks/pushNotification/set",
  "params": {
    "id": "de38c76d-d54c-436c-8b9f-4c2703648d64",
    "pushNotificationConfig": {
      "url": "https://example.com/callback",
      "authentication": {
        "schemes": ["jwt"]
      }
    }
  }
}
//Response
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "id": "de38c76d-d54c-436c-8b9f-4c2703648d64",
    "pushNotificationConfig": {
      "url": "https://example.com/callback",
      "authentication": {
        "schemes": ["jwt"]
      }
    }
  }
}

2.4、執(zhí)行 Task,返回結(jié)果

Server Agent 執(zhí)行任務(wù)后,會將執(zhí)行結(jié)果以 Artifact 的形式返回給 Client Agent。

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "id": "de38c76d-d54c-436c-8b9f-4c2703648d64",
    "sessionId": "c295ea44-7543-4f78-b524-7a38915ad6e4",
    "status": {
      "state": "completed",
    },
    "artifacts": [{
      "name":"joke",
      "parts": [{
          "type":"text",
          "text":"Why did the chicken cross the road? To get to the other side!"
        }]
      }],
    "metadata": {}
  }
}

2.5、獲取 Artifact 結(jié)果數(shù)據(jù)

需要注意的是,Client Agent 需要通過查詢 Task 的方式來獲取對應(yīng)的 Artifact。

//Request
{
  "jsonrpc": "2.0",
  "id": 1,
  "method":"tasks/get",
  "params": {
    "id": "de38c76d-d54c-436c-8b9f-4c2703648d64",
    "historyLength": 10,
    "metadata": {}
  }
}
//Response
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "id": "de38c76d-d54c-436c-8b9f-4c2703648d64",
    "sessionId": "c295ea44-7543-4f78-b524-7a38915ad6e4",
    "status": {
      "state": "completed"
    },
    "artifacts": [{
      "parts": [{
        "type":"text",
        "text":"Why did the chicken cross the road? To get to the other side!"
      }]
    }],
    "history":[
      {
        "role": "user",
        "parts": [
          {
            "type": "text",
            "text": "tell me a joke"
          }
        ]
      }
    ],
    "metadata": {}
  }
}

總之,AI Agent 之間的相互發(fā)現(xiàn)、了解以及交互調(diào)用正逐漸成為一種重要的發(fā)展趨勢,這主要體現(xiàn)在以下兩個(gè)方面:

第一、企業(yè)內(nèi)部領(lǐng)域 Agent 的溝通協(xié)作需求

在企業(yè)內(nèi)部,隨著業(yè)務(wù)的不斷發(fā)展,各種各樣的領(lǐng)域 Agent 正在被探索和建立,以滿足特定業(yè)務(wù)場景的需求。這些領(lǐng)域 Agent 之間需要進(jìn)行高效的溝通與協(xié)作,以實(shí)現(xiàn)業(yè)務(wù)流程的自動化和優(yōu)化。因此,解決內(nèi)部領(lǐng)域 Agent 之間的交互問題,已成為企業(yè)數(shù)字化轉(zhuǎn)型過程中必須面對的關(guān)鍵挑戰(zhàn)之一。

第二、 對外提供 Agent 服務(wù)的發(fā)現(xiàn)性問題

對于那些對外提供 Agent 服務(wù)的供應(yīng)商來說,如何讓其他 Agent 主動發(fā)現(xiàn)并使用自己的服務(wù),類似于搜索引擎優(yōu)化(SEO)吸引流量,也是一個(gè)亟待解決的問題。通過提高 Agent 的可見性和吸引力,可以更好地促進(jìn) Agent 之間的互操作性和生態(tài)系統(tǒng)的健康發(fā)展。


本文轉(zhuǎn)載自公眾號玄姐聊AGI  作者:玄姐

原文鏈接:??https://mp.weixin.qq.com/s/6Ybl7jxUENzxU9WGca5q_g??

?著作權(quán)歸作者所有,如需轉(zhuǎn)載,請注明出處,否則將追究法律責(zé)任
已于2025-4-23 06:48:27修改
收藏
回復(fù)
舉報(bào)
回復(fù)
相關(guān)推薦