百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

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

ccwgpt 2025-06-09 20:39 19 浏览 0 评论

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

  • Agent系统如何扩展?
  • 分布式Agent系统的挑战
  • 几种分布式Agent方案
  • 体验Autogen分布式Agent系统


Agent系统如何扩展?

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

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

  • 横向扩展:单个 Agent 实例部署在多台服务器上,从而提高其处理性能和吞吐能力,这类似于传统 Web 服务的水平扩展。例如:当某个 Agent 需要维护大量长连接会话、处理大规模并发请求,或执行耗时的任务时,可以通过负载均衡将请求分散到多个实例,实现更高的容量和可靠性。
  • 纵向扩展:多个不同职责的 Agent,将它们部署在不同服务器上协同工作,形成一个多 Agent 系统,类似于将单一智能体的功能按模块解耦为多个服务。例如:可以用一个 Agent 专门负责数据检索,另一个负责推理决策,再另一个负责执行操作,通过彼此通信来完成一个综合任务。这种方式提升了系统的模块化和灵活性,使各Agent各司其职,协同解决复杂问题。

所以:

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


分布式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):

  • 主机服务通过 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 可以像调用远程服务那样请求其执行某项任务并获取结果。

经典 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 之间建立统一的通信语言,让它们能够直接对话、交换信息并协同行动 。

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方法则是沿用微服务思想的直观做法,依赖成熟技术栈,但对开发者要求较高,需要自行处理大量协作细节。

实际应用中,这三种方法并非互斥:例如我们可以在一个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);

最后进入模拟交互:

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

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


更多免费AI功能 云片AI:https://y-p.cc/?f=tt

本文完,记得随手点个赞、收藏和转发三连,大家感兴趣的可以关注下,后续我再研究点新东西分享给大家~

关注私信发送DeepSeek即可领取完整版资料

相关推荐

自己动手写Android数据库框架_android开发数据库搭建

http://blog.csdn.net/feiduclear_up/article/details/50557590推荐理由关于Android数据库操作,由于每次都要自己写数据库操作,每次还得去...

谷歌开源大模型评测工具LMEval,打通谷歌、OpenAI、Anthropic

智东西编译|金碧辉编辑|程茜智东西5月28日消息,据科技媒体TheDecoder5月26日报道,当天,谷歌正式发布开源大模型评测框架LMEval,支持对GPT-4o、Claude3.7...

工信部:着力推动大模型算法、框架等基础性原创性的技术突破

工信部新闻发言人今日在发布会上表示,下一步,我们将坚持突出重点领域,大力推动制造业数字化转型,推动人工智能创新应用。主要从以下四个方面着力。一是夯实人工智能技术底座。通过科技创新重大项目,着力推动大模...

乒乓反复纠结“框架不稳定”的三个小误区

很多球友由于对框架的认知不清晰,往往会把“框架不稳定”当成一种心理负担,从而影响学球进度,其典型状态就是训练中有模有样,一旦进入实战,就像被捆住了手脚。通过训练和学习,结合“基本功打卡群”球友们交流发...

前AMD、英特尔显卡架构师Raja再战GPU,号称要全面重构堆栈

IT之家8月5日消息,知名GPU架构师拉贾科杜里(RajaKoduri)此前曾先后在AMD和英特尔的显卡部门担任要职。而在今日,由Raja创立的GPU软件与IP初创企...

三种必须掌握的嵌入式开发程序架构

前言在嵌入式软件开发,包括单片机开发中,软件架构对于开发人员是一个必须认真考虑的问题。软件架构对于系统整体的稳定性和可靠性是非常重要的,一个合适的软件架构不仅结构清晰,并且便于开发。我相...

怪不得别人3秒就知道软考案例怎么做能50+

软考高级统一合格标准必须三科都达到45分,案例分析也一直是考生头疼的一门,但是掌握到得分点,案例能不能50+还不是你们说了算吗?今天就结合架构案例考点,分享实用的备考攻略~一、吃透考点,搭建知识框架从...

UML统一建模常用图有哪些,各自的作用是什么?一篇文章彻底讲透

10万+爆款解析:9大UML图实战案例,小白也能秒懂!为什么需要UML?UML(统一建模语言)是软件开发的“蓝图”,用图形化语言描述系统结构、行为和交互,让复杂需求一目了然。它能:降低沟通成本避...

勒索软件转向云原生架构,直指备份基础设施

勒索软件组织和其他网络犯罪分子正越来越多地将目标对准基于云的备份系统,对久已确立的灾难恢复方法构成了挑战。谷歌安全研究人员在一份关于云安全威胁演变的报告中警告称,随着攻击者不断改进数据窃取、身份泄露和...

ConceptDraw DIAGRAM:释放创意,绘就高效办公新未来

在当今数字化时代,可视化工具已成为提升工作效率和激发创意的关键。ConceptDrawDIAGRAM,作为一款世界顶级的商业绘图软件,凭借其强大的功能和用户友好的界面,正逐渐成为众多专业人士的首选绘...

APP 制作界面设计教程:一步到位_app界面设计模板一套

想让APP界面设计高效落地,无需繁琐流程,掌握“框架搭建—细节填充—体验优化”三步法,即可一步到位完成专业级设计。黄金框架搭建是基础。采用“三三制布局”:将屏幕横向三等分,纵向保留三...

MCP 的工作原理:关键组件_mcp部件

以下是MCP架构的关键组件:MCP主机:像ClaudeDesktop、GitHubCopilot或旅行助手这样的AI智能体,它们希望通过MCP协议访问工具、资源等。MCP主机会...

软件架构_软件架构师工资一般多少

软件架构师自身需要是程序员,并且必须一直坚持做一线程序员。软件架构应该是能力最强的一群程序员,他们通常会在自身承接编程任务的同时,逐渐引导整个团队向一个能够最大化生产力的系统设计方向前进。软件系统的架...

不知不觉将手机字体调大!老花眼是因为“老了吗”?

现在不管是联系、交友,还是购物,都离不开手机。中老年人使用手机的时间也在逐渐加长,刷抖音、看短视频、发朋友圈……看手机的同时,人们也不得不面对“视力危机”——老花眼,习惯眯眼看、凑近看、瞪眼看,不少人...

8000通用汉字学习系列讲座(第046讲)

[表声母字]加(续)[从声汉字]伽茄泇迦枷痂袈笳嘉驾架咖贺瘸(计14字)嘉[正音]标准音读jiā。[辨形]上下结构,十四画。会意形声字,从壴从加,加也表声。注:从壴,字义与鼓乐有关;从加,字义与...

取消回复欢迎 发表评论: