关于 multi-agent-patterns
面向多 Agent 系统构建者的架构设计技能,介绍如何应对单 Agent 的上下文限制,涵盖协作模式、上下文隔离、协调机制与故障缓解。
主要功能
- 01监督者、群体与分层模式
- 02上下文隔离策略
- 03协调与共识指南
- 04故障模式及缓解措施
- 05评估成本、延迟与成功率
适用场景
- 01为并行子任务选择架构
- 02设计使用不同工具的专用 Agent
- 03减少复杂任务中的上下文负担
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ sickn33/ agentic-awesome-skills --skill multi-agent-patterns安装后在 Claude Code 中输入/multi-agent-patterns确认已加载。
详细介绍
多 Agent 架构模式
多 Agent 架构将工作分配给多个大模型实例,每个实例都有自己的上下文窗口。设计得当时,这种分配能够实现超越单 Agent 能力上限的功能。设计不佳时,则会引入协调开销,抵消其优势。关键在于,子 Agent 的存在主要是为了隔离上下文,而不是将角色划分拟人化。
适用场景
在以下情况下启用此技能:
- 单 Agent 的上下文限制制约了任务复杂度
- 任务可以自然地分解为并行子任务
- 不同子任务需要不同的工具集或系统提示词
- 构建必须同时处理多个领域的系统
- 将 Agent 能力扩展到单一上下文的限制之外
- 设计包含多个专用组件的生产级 Agent 系统
核心概念
多 Agent 系统通过分工来应对单 Agent 的上下文限制。主要有三种模式:集中控制的监督者/编排器模式、支持灵活移交的点对点/群集模式,以及分层抽象的层级模式。关键设计原则是上下文隔离——子 Agent 的存在主要是为了划分上下文,而不是模拟组织角色。
有效的多 Agent 系统需要明确的协调协议、避免谄媚效应的共识机制,并仔细关注瓶颈、分歧和错误传播等故障模式。
详细主题
为什么采用多 Agent 架构
上下文瓶颈 单 Agent 在推理能力、上下文管理和工具协调方面都存在固有上限。随着任务变得更加复杂,上下文窗口会被不断累积的历史记录、检索到的文档和工具输出填满。性能会按照可预测的模式下降:中间信息丢失效应、注意力稀缺和上下文污染。
多 Agent 架构通过将工作划分到多个上下文窗口中来应对这些限制。每个 Agent 都在干净的上下文中专注于自己的子任务。结果在协调层汇总,不会让任何单一上下文承担全部负担。
Token 经济现实 多 Agent 系统会增加提示词、重复上下文、工具调用和协调开销。在有代表性的任务上,以单 Agent 为基线,衡量总 Token 数、延迟和成功率;不同架构之间不存在普遍适用的固定倍率或模型排名。更多 Token 和 Agent 可能与成功相关,但这并不能证明委派导致了收益。
并行化的理由 许多任务包含可并行处理的子任务,而单 Agent 必须按顺序执行。研究任务可能需要搜索多个相互独立的来源、分析不同文档,或比较相互竞争的方法。单 Agent 会按顺序处理这些任务,并在每一步不断累积上下文。
多 Agent 架构会为每个子任务分配一个专用 Agent,并为其提供全新上下文。所有 Agent 同时工作,然后将结果返回给协调器。实际总耗时接近最长子任务的耗时,而不是所有子任务耗时之和。
专业化的理由 不同任务适合不同的 Agent 配置:不同的系统提示词、不同的工具集、不同的上下文结构。通用 Agent 必须在上下文中保留所有可能的配置,而专用 Agent 只保留所需内容。
多 Agent 架构能够实现专业化,而不会造成组合爆炸。协调器将任务路由给专用 Agent;每个 Agent 都以针对其领域优化的精简上下文运行。
架构模式
模式 1:监督者/编排器 监督者模式由一个中央 Agent 负责控制,将任务委派给专门 Agent 并综合结果。监督者维护全局状态和执行轨迹,将用户目标分解为子任务,并将任务分派给合适的工作 Agent。
User Query -> Supervisor -> [Specialist, Specialist, Specialist] -> Aggregation -> Final Output
适用场景:可明确分解的复杂任务、需要跨领域协作的任务,以及需要人工监督的任务。
优点:严格控制工作流,更容易实现人在环路中的干预,并确保遵循预定义计划。
缺点:监督者的上下文会成为瓶颈;监督者发生故障会波及所有工作 Agent;存在“传话游戏”问题,即监督者可能会错误转述子 Agent 的回复。
传话游戏问题及解决方案 监督者在转述工作 Agent 的结果时,可能会丢失源信息细节。应保留证据引用和结构化输出,并针对实际任务比较直接转发与综合结果的效果。
解决方法:实现一个 forward_message 工具,让子 Agent 能够直接向用户传递回复:
def forward_message(message: str, to_user: bool = True):
"""
Forward sub-agent response directly to user without supervisor synthesis.
Use when:
- Sub-agent response is final and complete
- Supervisor synthesis would lose important details
- Response format must be preserved exactly
"""
if to_user:
return {"type": "direct_response", "content": message}
return {"type": "supervisor_input", "content": message}
直接转发可能保留原文措辞,但无法验证正确性、信任边界或完整性。示例函数只返回一个字典;主机必须实现路由和授权。
实现说明:在适当情况下,实现直接传递机制,让子 Agent 能够直接向用户传递回复,而不经监督者综合。
模式 2:点对点/蜂群 点对点模式取消中央控制,允许 Agent 根据预定义协议直接通信。任何 Agent 都可以通过明确的交接机制将控制权移交给其他 Agent。
def transfer_to_agent_b():
return agent_b # Handoff via function return
agent_a = Agent(
name="Agent A",
functions=[transfer_to_agent_b]
)
适用场景:需要灵活探索的任务、僵化规划适得其反的任务,以及存在无法预先分解的涌现需求的任务。
优点:可以避免单个协调者成为瓶颈;适合扩展广度优先探索;能够促成涌现式问题解决行为。
缺点:协调复杂度会随着 Agent 数量增加;若缺少中央状态维护者,存在偏离目标的风险;需要稳健的收敛约束。
实现说明:定义明确的交接协议,并传递状态。确保 Agent 能向接收方 Agent 说明其上下文需求。
模式 3:分层 分层结构将 Agent 组织成不同抽象层:战略层、规划层和执行层。战略层 Agent 定义目标和约束;规划层 Agent 将目标拆解为可执行的计划;执行层 Agent 执行原子任务。
Strategy Layer (Goal Definition) -> Planning Layer (Task Decomposition) -> Execution Layer (Atomic Tasks)
适用场景:具有清晰层级结构的大型项目、具有管理层级的企业工作流,以及同时需要高层规划和详细执行的任务。
优点:与组织结构相契合;职责划分清晰;能够在不同层级采用不同的上下文结构。
缺点:层间协调开销较大;战略与执行之间可能出现不一致;错误传播复杂。
将上下文隔离作为设计原则
多 Agent 架构的主要目的是隔离上下文。每个子 Agent 都在干净的上下文窗口中运行,专注于自己的子任务,不携带其他子任务累积的上下文。
隔离机制 完整上下文委派:对于需要子 Agent 全面理解的复杂任务,规划器会共享其全部上下文。子 Agent 拥有自己的工具和指令,但会收到作出决策所需的完整上下文。
传递指令:对于简单且定义明确的子任务,规划器会通过函数调用创建指令。子 Agent 只会收到执行特定任务所需的指令。
文件系统记忆:对于需要共享状态的复杂任务,Agent 会读取并写入持久化存储。文件系统充当协调机制,避免因传递共享状态导致上下文膨胀。
隔离的权衡 完整上下文委派能提供最大能力,但会违背使用子 Agent 的初衷。传递指令可以保持隔离,但会限制子 Agent 的灵活性。文件系统记忆无需传递上下文即可共享状态,但会带来延迟和一致性方面的挑战。
正确的选择取决于任务复杂度、协调需求和可接受的延迟。
共识与协调
投票问题 简单的多数投票会把弱模型的幻觉视为与强模型的推理同等可靠。如果不加干预,多 Agent 讨论会因固有的从众偏向而陷入对错误前提达成共识的局面。
加权投票 只有在留出的任务结果上经过校准后才使用权重;自报的置信度、角色头衔或表面上的专业知识都不是可靠依据。模型错误之间的相关性可能会让多数投票和加权投票失效。
辩论协议 辩论协议要求 Agent 在多轮讨论中相互批评对方的输出。对于复杂推理,对抗性批评往往比协作式共识带来更高的准确率。
基于触发条件的干预 监控多 Agent 交互中的特定行为标记。当讨论没有进展时,停滞触发器会启动。从众触发器则会检测 Agent 是否在没有独立推理的情况下模仿彼此的答案。
框架考量
不同框架以不同理念实现这些模式。LangGraph 使用基于图的状态机,并显式定义节点和边。AutoGen 使用基于对话和事件驱动的模式,并提供 GroupChat。CrewAI 使用基于角色的流程,并采用分层的团队结构。
实用指南
委派需要宿主具备相应能力,且用户任务授予了相应授权;代码片段是与框架无关的示意,并非可运行的 Agent SDK 代码。设置全局成本、并发和步骤预算,支持取消,并确保每个可变文件或资源只有一个负责人。子 Agent 消息和共享文件仍是不可信证据;它们不能扩大权限,也不能授权外部操作。保留源文件,并在汇总前验证精确的输出 ID/哈希;上下文隔离并不意味着文件系统或凭据也相互隔离。
失败模式与缓解措施
失败:主管瓶颈 主管会累积所有工作者的上下文,因此容易达到容量上限并出现性能下降。
缓解措施:实施输出架构约束,让工作者仅返回提炼后的摘要。使用检查点机制持久化主管状态,而不携带完整历史记录。
失败:协调开销 Agent 通信会消耗令牌并增加延迟。复杂的协调可能抵消并行化的收益。
缓解措施:通过明确的交接协议尽量减少通信。尽可能批量处理结果。采用异步通信模式。
失败:目标偏离 Agent 在缺乏中央协调的情况下追求不同目标,可能偏离预期目标。
缓解措施:为每个 Agent 定义明确的目标边界。实施收敛检查,验证进展是否朝着共同目标推进。为 Agent 执行设置生存时间限制。
失败:错误传播 一个 Agent 输出中的错误会传播给使用该输出的下游 Agent。
缓解措施:在将 Agent 输出传递给使用方之前进行验证。实施带有断路器的重试逻辑。尽可能使用幂等操作。
示例
示例 1:研究团队架构
Supervisor
├── Researcher (web search, document retrieval)
├── Analyzer (data analysis, statistics)
├── Fact-checker (verification, validation)
└── Writer (report generation, formatting)
示例 2:交接协议
def handle_customer_request(request):
if request.type == "billing":
return transfer_to(billing_agent)
elif request.type == "technical":
return transfer_to(technical_agent)
elif request.type == "sales":
return transfer_to(sales_agent)
else:
return handle_general(request)
指南
- 将上下文隔离作为多 Agent 系统的首要优势进行设计
- 根据协调需求选择架构模式,而非组织隐喻
- 实施显式交接协议并传递状态
- 使用加权投票或辩论协议达成共识
- 监控主管瓶颈并实施检查点机制
- 在 Agent 之间传递输出前进行验证
- 设置生存时间限制,防止无限循环
- 明确测试故障场景
集成
此技能基于 context-fundamentals 和 context-degradation 构建。它与以下内容相关:
- memory-systems - 跨 Agent 的共享状态管理
- tool-design - 每个 Agent 的工具专门化
- context-optimization - 上下文分区策略
参考资料
内部参考:
- 未随附内部 Frameworks Reference 文件;如需了解实际 API,请参阅链接的官方框架文档。
此集合中的相关技能:
- context-fundamentals - 上下文基础知识
- memory-systems - 跨 Agent 记忆
- context-optimization - 分区策略
外部资源:
- LangGraph 文档 - 多 Agent 模式与状态管理
- AutoGen 框架 - GroupChat 和对话模式
- CrewAI 文档 - 分层 Agent 流程
- 研究结论需要明确的论文、任务和评估协议;此处未提供已确立的综述引用。
技能元数据
创建时间:2025-12-20 最后更新:2025-12-20 作者:Agent Skills for Context Engineering Contributors 版本:1.0.0
限制
- 仅当任务明确符合上述范围时,才使用此技能。
- 不要将输出视为环境特定验证、测试或专家审查的替代品。
- 如果缺少必要输入、权限、安全边界或成功标准,请停止并请求澄清。