09-13 Agent常用架构:Multi Agent
✅Agent常用架构:Multi Agent

多智能体(Multi-Agent)是指由多个Agent组成的系统,这些智能体能够感知环境、做出决策、与其他智能体交互,并协同或竞争以完成特定任务。
前面我们介绍了很多种智能体架构,但是都是单智能体架构,这些单智能体基本能够帮我们解决一些复杂的问题了。但是在实践过程中,仍然会有一些局限:
1、随着任务的复杂度的增加,单智能体会面临上下文窗口不够的问题,会存在经典的”注意力发散”问题,导致效果和性能下降。
注意力发散:在生成长文本或处理复杂输入时,大模型的注意力机制逐渐“偏离”核心主题或关键信息,导致输出内容变得不连贯、重复、无关甚至荒谬。
2、某些场景下,我们需要通过使用不同的模型来解决不同的单一子问题
3、复杂的任务,单智能体运行的效率太慢。
4、因为一个单智能体需要做的事情太多,会存在具体任务不够聚焦,尤其是一些特定专业场景,得到的结果不够好。
5、单个智能体拥有太多工具了,经常会选错工具或者不会用工具
以上这些问题,于是有了多智能体的方案,多智能体通过动态任务分解、专业化分工和协作来解决一个复杂的问题。这样的多智能体方案可以做专业化分工、高效的解决复杂问题。
其实,我们了解过了很多单智能体的方案之后,多智能体其实就在在单智能体的基础上做了任务的分工以及协作。(我们熟知的Manus 就是采用的 Multiple Agent 架构)
常见的协作模式
关于多智能体的常见的协作模式,网上有很多说法,不同的AI相关的公司都在尝试着定义概念。这个问题大家可以试着去google搜索下,或者通过AI问一下,你会发现得到的答案只会让你更懵逼。
为了把这个讲清楚,一方面结合我们做过的一些经验,另外我也几乎翻遍了主流的智能体框架的官方文档,总结出了几个我觉得我看了之后比较认可的一些模式吧。
SubAgents(最常见)
这个模式叫做子智能体模式,他也有不同的叫法:
LangChain:Subagents
LlamaIndex:Orchestrator agent
Spring AI Alibaba:Tool Calling
Pydantic AI:Agent delegation
总之核心思想就是,一个主Agent将其他子Agent视为工具(Tool),在需要时调用。控制器管理编排,而作为工具的子Agent执行特定任务并返回结果。

主Agent负责决定调用哪个子Agent,提供什么输入,以及如何组合结果。子Agent是无状态的——它们直接和用户交互,所有的对话和记忆都由主代理维护。这提供了上下文隔离:每个子代理的调用都在一个干净的上下文窗口中工作,防止主对话中的上下文膨胀。
因为在LangChain、LlamaIndex以及spring ai alibaba中都定义了这种模式,所以他们都提供了实现的方案。
如LangChain中实现的简单流程如下(官方示例):
1 | from langchain.tools import tool |
在Spring AI Alibaba中,可用以下方式实现(官方示例):
1 | import com.alibaba.cloud.ai.graph.agent.ReactAgent; |
HandOff
HandOff翻译成接管/交接,这种模式在很多框架中也有定义,比如Langchain、Spring AI Alibaba、Pydantic AI、OpenAI、Autogen等。几乎都叫做Hand off,最多有的加个前缀,有的在后面加个s啥的。(有的也叫swarm,但是比较少)
其核心思想是:一个“当前”智能体在处理用户请求时,如果发现自己无法或不适合继续处理,它会主动将任务“交接”(hand off)给另一个更专业的智能体,并将控制权转移过去。
这个概念最初由 OpenAI 在其 Swarm 项目中提出和推广,现在已成为构建复杂、模块化 AI 应用的关键模式之一。

不同的框架提供了不同的实现思路,
AutoGen: 使用事件驱动和发布-订阅(Pub/Sub)模型。每个智能体订阅一个特定的“主题”(Topic)。当一个智能体调用“交接工具”时,它会向目标智能体的主题发布一个包含完整上下文的新消息(
UserTask),从而激活目标智能体。(https://microsoft.github.io/autogen/stable//user-guide/core-user-guide/design-patterns/handoffs.html )LangChain/LangGraph: 将交接视为图(Graph)。交接工具会返回一个
Command对象,该对象可以:更新状态(
update):改变current_step变量,让同一个智能体在下一轮使用不同的提示词和工具(单智能体动态配置)。跳转节点(
goto):直接指定下一个要执行的智能体节点(多智能体子图)。(https://docs.langchain.com/oss/python/langchain/multi-agent/handoffs )Spring AI Alibaba:底层是参考了LangGraph的。
LlamaIndex:LlamaIndex内置了一个AgentWorkflow,它本质上是一个预设了理解智能体、状态和工具调用的工作流。实现了自动化的智能体 Handoff。开发者只需定义多个专业化智能体并指定入口,框架即可在它们之间动态转移控制权,形成端到端的多智能体协作流水线。(https://developers.llamaindex.ai/python/framework/understanding/agent/multi\_agent/#pattern-1--agentworkflow-ie-linear-swarm-pattern )
LlamaIndex中的简单实现(官网示例)
1 | from llama_index.core.agent.workflow import AgentWorkflow, FunctionAgent |
在多个智能体的流转上,不一定非要串行执行,也可以支持并行、路由等方案。


Chat Group
上面的hand off这种模式中,是由当前agent主动移交给下一个agent的,那还有一种可以引入一个组织者的方案。
这种模式比较典型的就是autogen中的chat group(群聊)模式。
群聊模式是指:一组具有不同专业角色的智能体(Agents)
所有参与者都订阅同一个“话题”(Topic),形成一个共享的消息通道。
智能体按顺序轮流发言,同一时间只有一个智能体在工作(sequential execution)。
整个流程由一个特殊的 “群聊管理器”(Group Chat Manager) 控制,负责决定下一个该谁发言。
这种模式特别适合将复杂任务动态分解为多个子任务,并交由最合适的专家智能体处理。
✅使用AutoGen 构建一个代码生成器
AutoGen 是由微软(Microsoft)开发的一个开源框架,一般用来简化构建多智能体(Multi-Agent)系统和复杂 LLM(大语言模型)工作流的过程。它通过提供可组合、可对话的智能体(Agent)抽象,使得开发者能够轻松地创建能
LLMentor
自定义工作流
除了上面的一些模式外,其实还有很多其他的模式,不同的框架都会定义一些自己的模式。就不一一介绍了。
不过,任何一种模式都不可能满足所有场景,所以,还有一种万能模式,那就是自定义,通过自定义workflow也算是一个比较典型的模式,其实就是哦我们在工作流章节介绍的agentic workflow。
