[Go to site: main page, start]

Skip to content

A2A 简介

何时使用 A2A vs. 本地子智能体

  • 本地子智能体:这些智能体与你的主智能体在同一个应用程序进程中运行。它们就像内部模块或库,用于将你的代码组织成逻辑的、可重用的组件。主智能体与其本地子智能体之间的通信非常快,因为它直接在内存中发生,没有网络开销。

  • 远程智能体(A2A):这些是作为独立服务运行的智能体,通过网络进行通信。A2A 定义了这种通信的标准协议。

考虑在以下情况使用 A2A

何时使用 A2A:具体示例

何时不使用 A2A:具体示例(首选本地子智能体)

ADK 中的 A2A 工作流:简化视图

  1. 使智能体可访问(暴露):你从一个现有的 ADK 智能体开始,你希望其他智能体能够与之交互。ADK 提供了一种简单的方法来"暴露"这个智能体,将其转换为 A2AServer。这个服务器充当公共接口,允许其他智能体 通过网络向你的智能体发送请求。将其想象为为你的智能体设置一个网络服务器。

从你作为开发者的角度来看,一旦你设置好了这种连接,与远程智能体的交互就像与本地工具或函数交互一样。ADK 抽象了网络层,使分布式智能体系统与本地系统一样易于使用。

A2A 支持的能力

ADK 的 A2A 集成为复杂的智能体系统提供了三个核心能力:

  • 推理:当消息通过 A2A 在智能体之间传递时,保留模型的推理/思考痕迹。
  • 长时间运行的工具:跟踪运行时间超过标准响应的工具调用,这样长时间运行的操作不会超时。
  • 制品:通过 A2A 在智能体之间传递文件制品(如生成的文件)。

可视化 A2A 工作流

暴露智能体

暴露前: 你的智能体代码作为独立组件运行,但在这种情况下,你想要暴露它,以便其他远程智能体可以与你的智能体交互。

+-------------------+
|   你的智能体代码   |
|    (独立运行)    |
+-------------------+

暴露后: 你的智能体代码与 A2AServer(ADK 组件)集成,使其可以通过网络被其他远程智能体访问。

+-----------------+
|   A2A 服务器     |
| (ADK 组件)     |<--------+
+-----------------+         |
        |                   |
        v                   |
+-------------------+       |
|   你的智能体代码   |       |
|  (现在可访问)    |       |
+-------------------+       |
                            |
                            | (网络通信)
                            v
+-----------------------------+
|       远程智能体             |
|    (现在可以通信了)        |
+-----------------------------+

消费智能体

消费前: 你的智能体(在此上下文中称为"根智能体")是你正在开发的应用程序,需要与远程智能体交互。在消费之前,它缺乏这样做的直接机制。

+----------------------+         +-------------------------------------------------------------+
|       根智能体        |         |                        远程智能体                           |
| (你现有的代码)      |         | (你希望根智能体与之通信的外部服务)                          |
+----------------------+         +-------------------------------------------------------------+

消费后: 你的根智能体使用 RemoteA2aAgent(一个充当远程智能体客户端代理的 ADK 组件)与远程智能体建立通信。

+----------------------+         +-----------------------------------+
|       根智能体        |         |         RemoteA2aAgent            |
| (你现有的代码)      |<------->|       (ADK 客户端代理)           |
+----------------------+         |                                   |
                                 |  +-----------------------------+  |
                                 |  |         远程智能体           |  |
                                 |  |       (外部服务)            |  |
                                 |  +-----------------------------+  |
                                 +-----------------------------------+
      (现在通过 RemoteA2aAgent 与远程智能体通信)

最终系统(组合视图)

此图显示了消费和暴露部分如何连接以形成完整的 A2A 系统。

消费侧:
+----------------------+         +-----------------------------------+
|       根智能体        |         |         RemoteA2aAgent            |
| (你现有的代码)      |<------->|       (ADK 客户端代理)           |
+----------------------+         |                                   |
                                 |  +-----------------------------+  |
                                 |  |         远程智能体           |  |
                                 |  |       (外部服务)            |  |
                                 |  +-----------------------------+  |
                                 +-----------------------------------+
                                                 |
                                                 | (网络通信)
                                                 v
暴露侧:
                                               +-----------------+
                                               |   A2A 服务器     |
                                               | (ADK 组件)     |
                                               +-----------------+
                                                       |
                                                       v
                                               +-------------------+
                                               |   你的智能体代码   |
                                               |  (暴露的服务)    |
                                               +-------------------+

具体用例:客户服务和产品目录智能体

让我们考虑一个实际示例:一个客户服务智能体需要从单独的产品目录智能体检索产品信息。

A2A 之前

最初,你的客户服务智能体可能没有直接、标准化的方式来查询产品目录智能体,特别是如果它是一个单独的服务或由不同的团队管理的情况下。

+-------------------------+         +--------------------------+
|     客户服务智能体       |         |     产品目录智能体        |
|  (需要产品信息)        |         |  (包含产品数据)         |
+-------------------------+         +--------------------------+
      (没有直接、标准化的通信)

A2A 之后

通过使用 A2A 协议,产品目录智能体可以将其功能暴露为 A2A 服务。你的客户服务智能体然后可以使用 ADK 的 RemoteA2aAgent 轻松消费此服务。

+-------------------------+         +-----------------------------------+
|     客户服务智能体       |         |         RemoteA2aAgent            |
|  (你的根智能体)        |<------->|       (ADK 客户端代理)           |
+-------------------------+         |                                   |
                                    |  +-----------------------------+  |
                                    |  |      产品目录智能体          |  |
                                    |  |       (外部服务)            |  |
                                    |  +-----------------------------+  |
                                    +-----------------------------------+
                                                 |
                                                 | (网络通信)
                                                 v
                                               +-----------------+
                                               |   A2A 服务器     |
                                               | (ADK 组件)     |
                                               +-----------------+
                                                       |
                                                       v
                                               +------------------------+
                                               |    产品目录智能体       |
                                               |    (暴露的服务)       |
                                               +------------------------+

在此设置中,首先,产品目录智能体需要通过 A2A 服务器暴露。然后,客户服务智能体可以简单地调用 RemoteA2aAgent 上的方法,就像它是一个工具一样,ADK 处理与产品目录智能体的所有底层通信。这允许清晰的关注点分离和专门智能体的轻松集成。

下一步

现在你了解了 A2A 的"为什么",让我们深入探讨"如何"。

  • 继续下一个指南: 快速入门:暴露你的智能体:PythonGoJava