要实现多Agent系统,目前最推荐的方式是使用LangGraph,它比LangChain的旧版AgentExecutor更加灵活可控。
以下是两种主流的架构模式及其实战示例:
方案一:Supervisor 架构
适用场景:有明显的任务分工,需要一个“主管”Agent 负责任务分发,多个“员工”Agent 各司其职。
1. 环境准备
首先需要安装核心库:
pip install langgraph langchain-openai langgraph-supervisor
注:langgraph-supervisor 简化了创建主管的流程。
2. 完整代码示例
假设要构建一个系统,让“主管”来决定用户的问题是应该由数学专家还是搜索专家来回答。
运行逻辑:用户提问后,Supervisor 会判断该调用哪个子Agent,然后将任务传递给它,子Agent执行完成后将结果返回给Supervisor,Supervisor再最终回复用户。
方案二:Swarm 架构
适用场景:没有明显的中央管控,Agent之间是平级关系,谁有能力处理后续问题,就将对话“移交”给谁,类似蜂群协作。
1. 环境准备
pip install langgraph-swarm
2. 完整代码示例
假设有两位客服:Alice(擅长数学)和 Bob(擅长闲聊/特定风格)。
from langchain_openai import ChatOpenAI from langgraph.checkpoint.memory import InMemorySaver from langchain.agents import create_agent from langgraph_swarm import create_handoff_tool, create_swarm # 1. 初始化模型 model = ChatOpenAI(model="gpt-4o") def add(a: int, b: int) -> int: """加法""" return a + b # 2. 定义 Agent 以及它们的“移交”工具 # Alice 不仅能做加法,还可以把问题移交给 Bob alice = create_agent( model, tools=[ add, create_handoff_tool( agent_name="Bob", # 允许对话移交 Bob description="将任务移交给 Bob,Bob 风格独特" ), ], system_prompt="你是 Alice,数学专家。如果你无法处理或用户想找 Bob,请移交。", name="Alice", ) # Bob 也可以把对话交回给 Alice bob = create_agent( model, tools=[ create_handoff_tool( agent_name="Alice", description="交给数学专家 Alice", ), ], system_prompt="你是 Bob,擅长开玩笑和海盗口吻。", name="Bob", ) # 3. 创建 Swarm 系统 checkpointer = InMemorySaver() # 必须保存状态,否则 Agent 会“失忆” [citation:4] workflow = create_swarm( [alice, bob], default_active_agent="Alice" # 起始 Agent ) app = workflow.compile(checkpointer=checkpointer) config = {"configurable": {"thread_id": "1"}} # 用户要求先找 Bob turn_1 = app.invoke( {"messages": [{"role": "user", "content": "我想和 Bob 聊几句"}]}, config, ) print("Turn 1:", turn_1["messages"][-1].content) # 紧接着问 5+7,系统会记得当前激活的是 Bob,但 Bob 判断自己不会,于是触发移交工具,将任务转给 Alice turn_2 = app.invoke( {"messages": [{"role": "user", "content": "那 5 + 7 等于几?"}]}, config, ) print("Turn 2:", turn_2["messages"][-1].content)
关键点:这种架构中,Agent通过工具调用(Handoff Tool)来决定谁接着处理,对话上下文会在Agent间传递。
⚖️ 两种架构对比
| 特性 | Supervisor 架构 (中心化) | Swarm 架构 (去中心化) |
|---|---|---|
| 控制权 | 由一个主管 Agent 集中控制 | 由当前激活的 Agent 动态移交流转 |
| 路由逻辑 | 中心裁决 | Agent自主协商(通过 Handoff Tool) |
| 优点 | 流程清晰,易于管控长流程任务 | 灵活度极高,减轻中央节点的压力 |
| 缺点 | 主管容易成为性能或逻辑瓶颈 | 逻辑较分散,可能增加调试难度 |
| 推荐工具 | langgraph-supervisor |
langgraph-swarm |
💡 关键注意事项
-
短时记忆(Memory):在多轮对话中,如果不配置
checkpointer(如InMemorySaver),Agent将会忘记之前是谁在处理问题。这在 Swarm 架构中尤其重要,因为它决定了“当前激活的Agent是谁”。 -
消息管理(Output Mode):在 Supervisor 架构中,可以通过
output_mode参数控制子 Agent 的历史记录是否回流到主对话中,以此防止上下文过于冗长。
如果你是刚入门,建议先从Supervisor 架构开始尝试,它的逻辑更符合“主管分配任务给员工”的直觉,更易于理解和调试。
非特殊说明,本博所有文章均为博主原创。