编程模型#
理解你的工作流程并将其映射到代理是在 AutoGen 中构建代理系统的关键。
编程模型基本上是发布-订阅模式。代理订阅它们关心的事件,同时也可以发布其他代理可能关心的事件。代理还可能具有其他资产,如内存、提示、数据源和技能(外部 API)。
以 CloudEvents 形式传递的事件#
系统中的每个事件都使用 CloudEvents 规范 定义。这允许在不同系统和语言之间使用通用的事件格式。在 CloudEvents 中,每个事件都有上下文属性,必须包含唯一的 id(例如 UUID)、source(唯一的 urn 或路径)、type(事件的命名空间 - 以反向 DNS 名称为前缀。前缀域名表示定义此事件类型语义的组织:例如 com.github.pull_request.opened 或 com.example.object.deleted.v2),以及可选的描述数据模式/内容类型或扩展的字段。
事件处理器#
每个代理都有一组事件处理器,它们与特定的 CloudEvents type 匹配。事件处理器可以匹配精确的类型,或匹配类型层次结构中特定级别的事件模式(例如:com.Microsoft.AutoGen.Agents.System.* 用于匹配 System 命名空间中的所有事件)。每个事件处理器都是一个可以改变状态、调用模型、访问内存、调用外部工具、发出其他事件以及与其他系统进行数据流转的函数。每个事件处理器可以是一个简单的函数,也可以是使用状态机或其他控制逻辑的更复杂函数。
编排代理#
构建一个只对外部事件做出反应的功能性和可扩展的代理系统是可能的。然而,在许多情况下,你会希望编排代理以实现特定目标或遵循预定的工作流程。在这种情况下,你需要构建一个编排代理来管理代理之间的事件流。
内置事件类型#
AutoGen 系统带有一组用于管理系统的内置事件类型。这些包括:
系统事件 - 用于管理系统本身的事件。这包括启动和停止代理、向所有代理发送消息以及其他系统级事件。
? 在此插入其他类型 ?
代理合约#
你可能想要利用更具规范性的代理行为合约,AutoGen 还包括实现不同代理行为方法的基础代理,包括在事件驱动模型之上构建请求/响应模式。有关这方面的示例,请参见 Python 示例中的 ChatAgents。在这种情况下,你的代理将有一组已知的必须实现的事件,以及这些事件的预期特定行为。