初探分布式Agent系统架构,及全新AutoGen框架下的分布式Agent Demo体验

AI Agent(智能体)系统发展迅猛,且关注点已经不再局限在Agent的规划推理等基本能力,智能体系统在扩展性、互操作、安全性等工程化方面的挑战也越来越引起重视,比如最近的MCP和A2A。上一篇我们介绍了A2A,今天接着再聊聊分布式Agent系统的话题。

  • Agent系统如何扩展?

  • 分布式Agent系统的挑战

  • 几种分布式Agent方案

  • 体验Autogen分布式Agent系统

Agent系统如何扩展?

相对于在单个进程空间运行的Agent系统,分布式****智能体系统则是将这些智能体分布运行在不同的进程、主机甚至不同的平台上,它们需要通过网络通信协同工作,共同完成复杂任务。

分布式的需求来自于Agent能力扩展的需要,本质上有两个维度:

  • *横向扩展*:单个 Agent 实例部署在多台服务器上,从而提高其处理性能和吞吐能力,这类似于传统 Web 服务的水平扩展。例如:当某个 Agent 需要维护大量长连接会话、处理大规模并发请求,或执行耗时的任务时,可以通过负载均衡将请求分散到多个实例,实现更高的容量和可靠性。

img

  • 纵向扩展:多个不同职责的 Agent,将它们部署在不同服务器上协同工作,形成一个多 Agent 系统,类似于将单一智能体的功能按模块解耦为多个服务。例如:可以用一个 Agent 专门负责数据检索,另一个负责推理决策,再另一个负责执行操作,通过彼此通信来完成一个综合任务。这种方式提升了系统的模块化和灵活性,使各Agent各司其职,协同解决复杂问题。

img

所以:

  • 横向扩展关注同质的扩容(更多实例),以解决并发与吞吐的问题;

  • 纵向扩展关注异质的协作(更多类型),解决合作与协同的问题;

分布式Agent系统的挑战

对于横向的水平扩展,其面临的最主要挑战是,由于Agent任务的特点,简单的无状态服务形式对其是不够的(长时间任务、多轮对话、流输出等);但有状态的服务又会带来扩展能力的下降,面临新的挑战:

  • 任务状态一致性:如何保证Agent任务状态和上下文在多个实例间的一致性是难题。可能需要借助会话粘连(保证同一会话总是由同一实例处理)或状态持久化等手段,来实现状态同步。这对分布式会话管理有较高要求。

  • 任务调度与容错:需要有效的负载均衡和任务调度策略来优化资源利用,是简单的轮询还是根据实例响应时间或资源使用的动态分配等。此外,还需要考虑实例故障的容错,通常需要借助成熟的负载均衡与容器编排策略。

而对于更复杂的多Agent系统跨网络的协作,还会面临更多问题:

  • *Agent 协同协议*

    如果每对Agent都用各自私有接口对话,随着Agent数量增加,连接关系将变得错综复杂,维护成本高且易出错,会导致极高的耦合度。

  • *消息传递效率*

    Agent 间需要频繁交换消息,如果通信机制低效,多 Agent 协作的整体速度将受限。特别在涉及长时间任务时,如何让Agent间异步并行工作、及时通知任务状态变化,避免因为轮询等机制浪费资源,都是需要考虑的问题。

  • *上下文共享*

    多个 Agent 合作时,每个 Agent 只掌握局部信息,如何在它们之间共享上下文尤为关键。需要机制让Agent能够方便地共享知识和中间结果(例如通过公共内存、黑板系统甚至数据库)。

  • *能力复用*

    当不同Agent具备互补的技能时,应该允许互相调用对方的能力,而不是各自重复实现同样的功能。这要求在 Agent 之间建立服务发现与调用机制。

几种分布式Agent协作方案

我们重点探讨分布式环境下,多Agent之间的协作与互操作的方案。

【方案一:AutoGen 框架的分布式运行时】

AutoGen在最新0.4版本后引入了实验性的分布式 Agent Runtime。其架构包含一个中央的主机服务(Host Service)和若干工作节点(Worker Runtime):

img

  • 主机服务通过 gRPC 协议(不同于JSON-RPC)连接所有活跃的 Worker,负责在 Agent 之间路由消息、维护会话状态等 。

  • 每个 Worker 在某台服务器上运行,托管一个或多个具体的 Agent,并向主机注册自己有哪些 Agent 可以处理哪些消息 。

  • 当某 Agent 需要给另一个 Agent 发消息时,主机服务会将消息转发给目标 Agent 的对应 Worker,实现不同机器上 Agent 间的透明通信。

通过 AutoGen 分布式运行时, Agent 系统可以方便地部署在多台服务器上,并实现消息通信与上下文同步,而开发者无需关心底层消息传递细节。

AutoGen 提供的方案侧重于框架层的集成:优势在于开箱即用,但局限是协作的 Agent 需要在同一 AutoGen 框架内,跨不同框架和语言的 Agent 互通需另行考虑。

【方案二:Agent 远程服务化(RPC/MCP)】

这种方法是将每个 Agent 作为独立服务来部署,通过远程调用的方式实现协作。这是一种经典的 RPC方案:每个 Agent 提供一组远程可调用的 API 接口,其他 Agent 可以像调用远程服务那样请求其执行某项任务并获取结果。

img

经典 RPC 方法的优点在于:利用成熟的分布式技术栈。同时,每个 Agent 服务可以独立扩展和部署(当然横向扩展也会面临上面提到的问题),天然具有模块边界清晰、故障隔离好的特点。

然而,纯粹的 RPC 式协作也有明显的局限

  • 需要开发者自行设计请求/响应的数据格式和流程。

  • Agent 之间没有共享的“会话”概念或上下文维护机制。

  • 随着协作Agent数量增加,开发者可能需要处理繁琐的编排逻辑。

  • 很快会陷入会话管理、内存管理和协调同步的复杂细节中 。

不过,你可以利用新近出现的 MCP(Model Context Protocol) 与RPC方法结合。虽然 MCP 更侧重于工具接入和上下文提供,但我们也可以将每个 Agent 看作一个“MCP服务模块”,对外暴露自己的能力,即把Agent转化为工具,在一定程度上缓解了“每对Agent单独定制接口”的问题。

即便如此,这种方法总体上仍需要开发者规划好哪个Agent调用哪个、何时调用,并处理数据格式转换和错误恢复,其适用场景通常是****固定的流程编排工具调用型的Agent协作,即任务流程相对确定,Agent 之间主要是服务调用关系而非自由对话。对于需要灵活对话协商、多轮交互的场景,RPC方式会变得力不从心。

【方案二:Google 的 Agent-to-Agent 协议】

Google A2A 协议的目标是在不同厂商、不同框架的 Agent 之间建立统一的通信语言,让它们能够直接对话、交换信息并协同行动 。

img

A2A 协议定义了一套面向 Agent 协作的通信机制,主要特点包括:

  • 服务发现机制:每个支持 A2A 的 Agent 对外暴露一个Agent Card(JSON 文档),描述该 Agent 的元信息 。解决了异构 Agent 之间如何互相发现和了解彼此功能的问题。

  • 标准化的消息与任务结构:A2A 将 Agent 之间交互抽象为一个个任务(Task)。任务由协议统一定义生命周期,Agent 间通过发送消息来协商和更新任务状态,每条消息都有明确的结构,确保不同实现的Agent都能正确理解彼此发送的内容。

  • 多样的通信模式:考虑到不同任务对交互实时性的要求,A2A 支持多种通信方式 ,支持短周期的请求/响应或者异步通知的任务形式。

  • 安全与跨平台:作为企业级协议,A2A 特别强调了通信的安全性和跨平台兼容

A2A 协议提供的是跨平台、跨不同开发框架的Agent的通信与互操作协议,规定了Agent对外如何描述自己、如何发消息、如何协同完成任务, 有望成为 Agent 协同的统一解决方案,但A2A目前仍在演进与草案阶段。

【方案总结】

**以上三种方案各有侧重:AutoGen 框架提供*一体化的解决方案*,适合于快速构建同构环境下的多Agent协作;A2A 协议致力于成为*异构Agent间的通用语言*,为跨平台、多供应商的Agent互操作提供标准,强调开放生态下的协作;经典RPC/MCP方法则是**沿用微服务思想**的直观做法,依赖成熟技术栈,但对开发者要求较高,需要自行处理大量协作细节。
img实际应用中,这三种方法并非互斥:例如我们可以在一个AutoGen系统内部实现多Agent对话协作,同时通过RPC调用外部的专业服务Agent;或者采用A2A协议连接由不同框架构建的Agent子系统。

体验AutoGen的分布式Agent系统

在前面的文章中我们已经体验过MCP与A2A的Demo演示,这里看一个基于AutoGen框架(0.4+)下分布式Agent系统官方示例:

【场景描述】

一组分布式Agent(比如HR Agent,Finance Agent):假设企业使用这些Agent来管理其人力资源和财务相关业务,这些Agent需要在不同的机器上运行。

一个语义路由器Agent会识别用户的意图(暂时采用基于简单的字符串匹配方法),确定最相关的Agent,然后将用户引导至该Agent。

该Agent会接管与用户的对话,用户将能够以对话的方式与Agent继续交互。

【系统构成】

这个简单的分布式Agent系统构成如下:

  • Runtime Host Servicer:用过来连接与协调多个Worker Runtime

  • **Worker Runtime:**用来注册与运行Agent,并通过Host servicer来实现跨机器的消息通信

  • **多个Agent:**包括一个HR Agent,一个Finance Agent,一个Router Agent,还有一个代表用户的UserProxAgent

【代码:Runtime Host Servicer】

这个过程非常简单,指定host的地址与端口,启动服务即可:

...
async def run_host():
    host = GrpcWorkerAgentRuntimeHost(address="localhost:50051")
    host.start() 
    await host.stop_when_signal()

【代码:Worker Runtime与Agent】

创建WorkerRuntime并启动,注册各种类型的Agent,并给每种Agent订阅指定主题的消息(Agent之间通过订阅/发布进行通信,每个Agent只需要关注自己订阅的消息处理即可,减少了点对点集成的复杂度):

async def run_workers():
    agent_runtime = GrpcWorkerAgentRuntime(host_address="localhost:50051")

    await agent_runtime.start()

    # Create the agents
    await WorkerAgent.register(agent_runtime, "finance", lambda: WorkerAgent("finance_agent"))
    await agent_runtime.add_subscription(DefaultSubscription(topic_type="finance", agent_type="finance"))

    await WorkerAgent.register(agent_runtime, "hr", lambda: WorkerAgent("hr_agent"))
    await agent_runtime.add_subscription(DefaultSubscription(topic_type="hr", agent_type="hr"))

    await UserProxyAgent.register(agent_runtime, "user_proxy", lambda: UserProxyAgent("user_proxy"))
    await agent_runtime.add_subscription(DefaultSubscription(topic_type="user_proxy", agent_type="user_proxy"))

    ......

    await SemanticRouterAgent.register(
        agent_runtime,
        "router",
        lambda: SemanticRouterAgent(name="router", agent_registry=agent_registry, intent_classifier=intent_classifier),
    )

    print("Agents registered, starting conversation")

    message = input("Enter a message: ")
    await agent_runtime.publish_message(
        UserProxyMessage(content=message, source="user"), topic_id=DefaultTopicId(type="default", source="user")
    )

    await agent_runtime.stop_when_signal()

这里的几个Agent内部逻辑比较简单,不做详细展开:RouterAgent负责根据输入将请求转发给WorkerAgent,WorkerAgent做简单回显,然后与用户交互。

【启动与测试】

在单独的控制台窗口首先启动Runtime Host Servicer单独运行;

然后启动Worker Runtime及运行在该Runtime之上的Agent(你也可以在不同的机器上启动不同的Agent);

最后进入模拟交互:

img

img

img

img

在这里你可以看到多个Agent的完整协作与消息的传递过程,注意这个过程是可以跨网络完成的。

以上我们简单探讨了分布式Agent系统的一些可能性。必须要说的是,Agent仍然是一个处于快速发展与不断完善的领域,随着未来更多的技术、标准与框架的成熟,构建大规模分布式Agent系统的门槛将大大降低。

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值