支持两种类型的运行时环境:独立式和分布式
独立代理运行时
独立运行时适用于单进程应用程序,其中所有代理均使用同一种编程语言实现并在同一进程中运行。在 Python API 中,独立运行时的一个示例是SingleThreadedAgentRuntime。
在这里,代理通过运行时通过消息进行通信,并且运行时管理代理的生命周期。
开发者可以使用提供的组件快速构建代理,这些组件包括 路由代理、AI 模型客户端、AI 模型工具、代码执行沙箱、模型上下文存储等。他们也可以从头开始实现自己的代理,或使用其他库
分布式代理运行
分布式运行时适用于多进程应用程序,其中代理可以用不同的编程语言实现并在不同的机器上运行。
如上图所示,分布式运行时由一个主机服务器和多个工作进程组成。主机服务器负责跨工作进程的代理之间的通信,并维护连接状态。工作进程运行代理,并通过网关与主机服务器通信。它们向主机服务器通告它们运行的代理,并管理代理的生命周期。
代理的工作方式与独立运行时相同,因此开发人员可以在两种运行时类型之间切换,而无需改变其代理实现
应用程序堆栈
多代理系统架构的层级结构,分为两个主要部分:
-
Your Multi-Agent Application(你的多代理应用):
Application Logic(应用逻辑)
:这是应用的核心功能层,定义了多代理系统的业务逻辑。
Behavior Contract (Message Protocol)(行为契约(消息协议))
:指定了代理之间的通信规则和协议,确保一致的行为。
Message Types(消息类型)
:定义了代理之间交换的不同消息类型,支持通信的多样性。 -
Agent Communication Stack(代理通信堆栈):
Message Routing(消息路由)
:负责管理消息在代理之间的传递和路由。
Protobuf + gRPC
:使用 Protocol Buffers(Protobuf)和 gRPC 作为底层通信技术,支持高效的数据序列化和远程过程调用。 -
总体来说,该图描述了多代理系统如何通过分层设计(应用逻辑、通信协议和底层技术)实现功能和通信,Multi-Agent Patterns(多代理模式)贯穿整个架构,指导其设计和实现
堆栈底部是基础的消息传递和路由功能,用于使代理能够相互通信。这些功能由代理运行时管理,对于大多数应用程序而言,开发者只需与运行时提供的高级 API 进行交互(请参阅代理和代理运行时)
在堆栈的顶层,开发人员需要定义代理交换的消息类型。这组消息类型构成了代理必须遵守的行为契约,而契约的实现决定了代理如何处理消息。行为契约有时也称为消息协议。开发人员负责实现行为契约。多代理模式源于这些行为契约(参见多代理设计模式)
三、代理生命周期
代理运行时管理代理的身份和生命周期。
应用程序不会直接创建代理,而是使用代理实例的工厂函数注册代理类型。
在本节中,我们将解释运行时如何识别和创建代理。
当运行时根据其 ID
向代理实例传递消息时,它会获取该实例,如果实例不存在则创建它
例如:一个运行时已将代理类型注册code_reviewer
到一个工厂函数中,该工厂函数会生成执行代码审查的代理实例。每个代码审查请求都有一个唯一的 ID,review_request_id
用于标记一个专用会话。在这种情况下,每个请求都可以由一个具有代理 ID 的新实例来处理。(“code_reviewer”, review_request_id)