多代理(Multi-Agent)系统正成为构建复杂 AI 应用的重要范式。本文将深入剖析两种热门的多代理架构模式——Supervisor(主管模式)与 Swarm(群智模式),揭示它们的执行流程、适用场景及实现细节,并分享在实际落地中的经验与避坑指南。本篇文章是基于LangGraph 当中的多代理demo进行撰写

一、多代理系统的核心价值

为什么需要多代理系统?单一代理往往难以处理复杂任务,就像一个人难以同时精通投资研究、交易执行和风险控制。多代理系统通过分工协作,让专业的人做专业的事,大大提升了复杂任务的处理能力和质量。

LangGraph 提供了两种截然不同的多代理协作模式,满足不同场景的需求。

二、Supervisor 架构:集中式指挥的艺术

架构概览

Supervisor 模式采用经典的"管理者-工作者"结构:一个主管代理(Supervisor)作为决策中枢,多个专业代理(Worker Agents)负责具体任务执行。

python

# 简化代码示例
flight_agent = create_react_agent(name="flight_assistant",tools=[book_flight],prompt="你是机票预订专家"
)hotel_agent = create_react_agent(name="hotel_assistant", tools=[book_hotel],prompt="你是酒店预订专家"
)supervisor = create_supervisor(agents=[flight_agent, hotel_agent],model=llm,prompt="你是旅行规划主管,负责协调机票和酒店预订"
)graph = supervisor.compile()

执行流程详解

  1. 请求接入:用户输入"我需要预订从北京到上海的机票和万豪酒店"

  2. 主管决策:主管分析请求,识别出包含机票和酒店两个子任务

  3. 任务分配:主管决定先处理机票预订,调用 flight_assistant

  4. 子代理执行:机票代理查询航班、调用预订工具、返回结果

  5. 结果收集:主管接收机票预订结果,判断下一步需要酒店预订

  6. 继续调度:主管将更新后的上下文交给 hotel_assistant

  7. 最终输出:主管收集所有结果,组织成最终响应

优势与适用场景

Supervisor 模式特别适合:

  • 需要强控制的场景:如金融交易、医疗诊断等合规要求高的领域

  • 全局约束管理:预算控制、优先级调度、合规检查

  • 审计追踪:所有决策和操作经过中心节点,便于日志记录和复盘

三、Swarm 架构:去中心化协作的智慧

架构概览

Swarm 模式采用去中心化设计,各个专业代理自主决定何时以及如何移交任务控制权,形成自然的协作流水线。

python

# 创建具有移交能力的代理
flight_agent = create_react_agent(name="flight_assistant",tools=[book_flight, transfer_to_hotel],prompt="你是机票预订专家,完成后可移交酒店预订"
)hotel_agent = create_react_agent(name="hotel_assistant",tools=[book_hotel, transfer_to_flight], prompt="你是酒店预订专家"
)swarm = create_swarm(agents=[flight_agent, hotel_agent],default_active_agent="flight_assistant"
)graph = swarm.compile()

执行流程详解

  1. 初始激活:用户请求进入,默认由 flight_assistant 首先处理

  2. 自主执行:机票代理完成航班查询和预订

  3. 主动移交:机票代理判断需要酒店服务,调用 transfer_to_hotel 工具

  4. 控制权转移:Swarm 容器将活跃代理切换为 hotel_assistant

  5. 继续处理:酒店代理接收完整上下文,执行酒店预订

  6. 自然结束:当没有进一步移交时,流程终止

移交机制核心技术

Handoff 工具是 Swarm 架构的核心,其实现原理如下:

def create_handoff_tool(agent_name: str, description: str):def handoff_tool(state: Annotated[MessagesState, InjectedState],tool_call_id: Annotated[str, InjectedToolCallId]):# 构造工具消息tool_message = {"type": "tool_message","tool_call_id": tool_call_id,"content": f"移交控制权给 {agent_name}"}# 返回跳转指令return Command(goto=agent_name,update={"messages": state["messages"] + [tool_message]},graph=Command.PARENT)return handoff_tool

优势与适用场景

Swarm 模式特别适合:

  • 专业接力场景:如研究-交易-风控的投研流水线

  • 灵活探索任务:需求不明确需要多方探索的情况

  • 降低中心瓶颈:避免单一主管成为性能和可靠性的瓶颈

四、实战对比与选型指南

维度SupervisorSwarm
决策方式中枢统一决策代理自主移交
控制力度强(全局约束、优先级)弱(代理自主决定)
可观测性优秀(集中记录)良好(需要额外追踪)
扩展性新增代理需更新路由策略新增代理需更新移交工具
故障处理主管统一处理需要代理自行处理
适用场景合规流程、复杂编排专家协作、灵活任务

选型建议

  • 选择 Supervisor 当:需要强控制、全局约束、完整审计链的场景

  • 选择 Swarm 当:任务天然分段、专家自治更重要、需要避免单点瓶颈

五、落地实践:避坑指南与最佳实践

通用挑战与解决方案

  1. 状态膨胀问题

    • 问题:多次移交导致上下文过长,成本增加

    • 解决方案:使用摘要机制、外部存储引用、上下文窗口管理

  2. 移交健壮性

    • 问题:错误移交、循环移交

    • 解决方案:白名单校验、循环检测、结构化状态传递

Supervisor 特有挑战

  • 单点瓶颈:通过缓存、异步处理、水平扩展缓解

  • 策略更新:使用能力注册表而非硬编码,降低维护成本

Swarm 特有挑战

  • 任务漂移:明确成功准则、移交条件,使用结构化状态描述

  • 收尾困难:引入终审代理,明确定义完成标准

六、实现 checklist

为确保成功落地,有以下关键点可以参考:

  • 架构选择:明确 Supervisor/Swarm/混合架构

  • 拓扑设计:定义代理间允许的移交关系

  • 状态管理:设计上下文摘要和外部存储策略

  • 工具安全:实现幂等性、权限控制、操作网关

  • 观测体系:建立日志、追踪、指标三位一体观测

  • 合规保障:确保审计链完整、风险控制到位

  • 性能优化:设置适当的超时、重试、缓存策略

  • 测试验证:建立回归测试集和上线验证流程

结语

多代理系统为我们构建复杂AI应用提供了强大基础。Supervisor 模式带来集中控制的可预测性,Swarm 模式提供去中心协作的灵活性。在实际应用中,往往需要根据具体场景选择合适的架构,甚至混合使用两种模式。

无论选择哪种架构,良好的状态管理、健壮的错误处理、完善的观测体系都是成功的关键。希望本文能为你在LangGraph多代理系统的实践中提供有价值的指引。

作者碎碎念

多Agent的架构是以后的大势所趋,但是如何将这种多代理架构融合到自己的业务场景其实是一个非常值得探讨的话题。真正再实践落地的时候,多代理的架构通常会需要和各种业务场景融合起来,真正使用的工具也不在是一些简单的查查天气、web检索等,会涉及到更多真正业务场景的独特工具。同时虽然多代理架构、MCP协议等等出来了,但是真正了解并懂得使用的人其实很少,什么情况下你可以把你得东西包装成一个Agent,这个Agent可大可小,怎么样划分其实非常考验各端实际情况,达到一个平衡状态。MCP协议同样,概念吵的火热,但是真正落地场景时,什么工具使用MCP协议会更好,什么样的工具其实按照公司内部的协议会更好,其实都是值得思考的问题。这当中同样涉及了跟后台交互,什么样的交互可以满足实现最终效果等等诸如此类的问题,都使得我们再多Agent的落地中困难重重。但是,关关难过关关过,前路漫漫亦灿灿。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/97307.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/97307.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/97307.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【深度学习】思维链(Chain of Thought, CoT):提升大模型推理能力的关键技术

思维链(Chain of Thought, CoT):提升大模型推理能力的关键技术 文章目录思维链(Chain of Thought, CoT):提升大模型推理能力的关键技术1 什么是思维链(Chain of Thought, CoT)&#…

GitHub 宕机自救指南:打造韧性开发体系

一、引言1.1 GitHub 宕机事件回顾与影响剖析在软件开发的广袤版图中,GitHub 宛如一座熠熠生辉的灯塔,为全球超 1 亿开发者照亮前行之路,其重要性不言而喻。它集代码托管、版本控制、协作开发以及项目管理等核心功能于一身,是无数开…

移动端网页调试实战,iOS WebKit Debug Proxy 的应用与替代方案

在移动端开发中,iOS WebView 的调试一直是个难题。不同于 Android 可以依赖 Chrome DevTools 和 ADB,iOS 的 WKWebView 只能通过 Safari 开发者工具调试,而这需要 Mac 环境和设备直连。为了弥补限制,社区出现了一个常用工具 —— …

焕新升级,Sermant 2.0.0 release版本重磅发布!

Sermant社区在6月底正式发布了2.0.0 release版本,这次更新中,Sermant进行了项目所属组织调整并新增了基于xDS协议的服务发现能力、预过滤启动加速机制、Sermant Backend的配置管理能力。所属组织调整使得Sermant淡化厂商属性,以全新的姿态更好…

sqli-labs通关笔记-第28a关GET字符注入(多重关键字过滤绕过 脚本法)

目录 一、sqlmap之tamper脚本 二、源码分析 1、代码审计 2、SQL安全性分析 三、渗透实战 1、进入靶场 2、tamper脚本 3、sqlmap渗透 SQLI-LABS 是一个专门为学习和练习 SQL 注入技术而设计的开源靶场环境,本小节对第28a关Less 28a基于GET字符型的SQL注入关卡…

联想打印机2268w安装

联想打印机2268w是支持无线打印的。在某度搜索,掀起盖子长按开机键,成功初始化。之后按说明应该能用手机搜索到打印机的热点,反复搜索都没有出现。最后没办法,之后好用我自己的方法安装。找了个笔记本,开机连接到wifi,…

【LeetCode】动态规划——72.编辑距离、10.正则表达式匹配

LeetCode题目链接 https://leetcode.cn/problems/edit-distance/description/ https://leetcode.cn/problems/regular-expression-matching/description/ 题解 72.编辑距离 本题要定义为长度为i、长度为j的字符串的最少编辑次数,每次判断字符的下标为i-1、j-1。dp[i…

[亲测可用]Android studio配置国内镜像源 Kotlin DSL (build.gradle.kts)

一、更改gradle下载镜像Android studio项目需要下载和更新 Gradle 及其依赖。由于网络环境,直接从 Gradle 官网下载可能会遇到速度慢或超时的问题。这里需要更换为使用国内的镜像站点来加速下载。官网地址(较慢):https://services…

《跳出“技术堆砌”陷阱,构建可演进的软件系统》

很多团队陷入了“技术焦虑式开发”—盲目追逐热门框架,将“使用微服务”“引入云原生”“集成AI组件”当作架构先进的标签,却忽视了业务与技术的底层匹配逻辑。某互联网团队为了“彰显技术实力”,在内部协同工具中强行接入机器学习推荐模块&a…

赋能你的应用:英超实时数据接入终极指南(API vs. WebSocket)

在当今数据驱动的时代,为您的应用程序注入实时、准确的英超赛事数据,是提升用户体验、打造差异化竞争力的关键。无论是开发一款球迷必备的比分追踪App,一个深度专业的赛事分析平台,还是一个充满互动性的梦幻足球游戏,首…

计算机网络:(poll、epoll)

一、select的不足1. 最大监听数受限:FD_SETSIZE 默认 1024(Linux)2. 每次调用需重置 fd_set:内核会修改集合,必须每次重新 FD_SET3. 用户态与内核态拷贝开销大4. 返回后仍需遍历所有 fd 才能知道哪个就绪5. 效率随 fd …

网络编程之设置端口复用

首先来说一下为什么要设置端口复用,有些时候在调试服务器代码时势必会经常启动或结束服务器进程,这样就会出现当再次启动服务器时有可能会出现端口绑定失败的情况,造成这个情况的原因是由于你上次关闭服务器时有连接尚未断开等等其他原因&…

stargo缩扩容starrocks集群,实现节点服务器替换

1.背景在企业中可能需要,将starrocks的某一台服务器下架,换上另一台服务器,如何实现这个操作,本篇将进行介绍;节点hadoop101hadoop102hadoop103hadoop104集群原集群节点新节点fe✔✔❌(下线)✔&…

Linux -- 进程间通信【命名管道】

目录 一、命名管道定义 二、命名管道创建 1、指令 2、系统调用 3、删除 三、匿名管道和命名管道的区别 四、命名管道的打开规则 五、代码示例 1、comm.hpp 2、server.cc 3、client.cc 一、命名管道定义 # 匿名管道存在以下核心限制: 仅限亲缘关系进程&a…

LinuxC系统多线程程序设计

一.多线程程序设计1. 线程概述:1.1 什么是线程?线程是进程中的一个实体(组成单元),是系统进程调度的最小单元。一个进程至少具有一个线程,如果进程仅有一个线程,该线程就代表进程本身。把代表进程本身的线程称为主线程,一个进程…

Vue3 + TS + MapboxGL.js 三维地图开发项目

文章目录 1. 安装依赖 2. 新建 Map 组件(components/MapView.vue) 3. 在页面中使用(views/Home.vue) 4. 效果说明 1. 安装依赖 npm install mapbox-gl @types/mapbox-gl --save⚠️ 注意:需要去 Mapbox 官网,申请一个 access token。 package.json {"name":…

【编程语言】Rust 入门

目录 一、Rust 是什么?为什么选择它? 二、环境搭建,迈出第一步 2.1 Windows 系统安装步骤 2.2 macOS 系统安装步骤 2.3 Linux 系统安装步骤 2.4 安装过程中的常见问题及解决方案 三、基础语法,构建知识大厦的基石 3.1 变量…

Python 编码与加密全解析:从字符编码到 RSA 签名验证

在 Python 开发中,字符编码(如 UTF-8、GBK)和 数据加密(如 Base64、MD5、RSA)是处理数据传输、存储安全的核心技术。本文结合实战代码,从基础的字符编解码入手,逐步深入到加密算法的应用&#x…

关于shell命令的扩展

目录 一、逻辑运算符 1. &&(AND) 2. ||(OR) 3. 组合使用:A && B || C 二、输出与重定向 1. echo 输出 2. 标准文件描述符(FD) 3. 重定向操作符 4. 同时重定向 stdout 和…

MySQL EXPLAIN 查看执行计划详解

MySQL 的 EXPLAIN 命令。这是一个分析和优化 SQL 查询性能不可或缺的强大工具。它展示了 MySQL 如何执行一条 SQL 语句,包括如何使用索引、表连接顺序、估计的行数等关键信息。1. 如何使用 EXPLAIN在你要分析的 SELECT 语句前加上 EXPLAIN 或 EXPLAIN FORMATJSON&am…