langgraph-swarm 去中心化架构:Agent 之间互相传递任务
Supervisor 模式有一个中心调度器。但很多场景下,没有调度器反而更好。
就像蜂群——没有蜂王指挥每只蜜蜂做什么。每只蜜蜂根据局部信息自主决策,整个蜂群却高效协作。
langgraph-swarm 实现了这个模式。Agent 之间"手递手"传递任务,每个 Agent 完成后主动把结果交给下一个最合适的 Agent,没有中央调度器。

代码实现:
import os
import warnings
from dotenv import load_dotenv
from langgraph_swarm import create_swarm, create_handoff_tool
from langgraph.prebuilt import create_react_agent
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage
# 屏蔽LangGraph版本弃用警告
warnings.filterwarnings("ignore", category=UserWarning)
warnings.filterwarnings("ignore", category=DeprecationWarning)
load_dotenv()
api_key="sk-xxxxxxxxxxxxxxxxxxxxxxxxxx"
# DeepSeek LLM 初始化
def get_deepseek_llm(model_name: str = "deepseek-chat") -> ChatOpenAI:
return ChatOpenAI(
model=model_name,
api_key=api_key,
base_url="https://api.deepseek.com/v1",
temperature=0.1
)
# 1. 定义所有交接工具(每个agent可调用其他agent)
transfer_to_tech = create_handoff_tool(agent_name="tech_agent")
transfer_to_finance = create_handoff_tool(agent_name="finance_agent")
transfer_to_summary = create_handoff_tool(agent_name="summary_agent")
transfer_to_intake = create_handoff_tool(agent_name="intake_agent")
# 1. 接单分流Agent(name必须指定,用于swarm识别)
intake_agent = create_react_agent(
model=get_deepseek_llm(),
tools=[transfer_to_tech, transfer_to_finance],
name="intake_agent", # 关键:给agent命名,生成.name属性
prompt="""你是客服接单员。先判断用户问题类型:
1. 账号登录、系统报错等技术问题 → 调用transfer_to_tech转交tech_agent
2. 发票、报销、扣费等财务问题 → 调用transfer_to_finance转交finance_agent
禁止直接回答,必须调用对应工具转交对应专员处理。"""
)
# 2. 技术专员Agent
tech_agent = create_react_agent(
model=get_deepseek_llm(),
tools=[transfer_to_summary],
name="tech_agent",
prompt="""你是技术专员,负责解决账号登录、系统故障类问题。
完成问题处理后,调用transfer_to_summary工具转交summary_agent生成友好总结回复。"""
)
# 3. 财务专员Agent
finance_agent = create_react_agent(
model=get_deepseek_llm(),
tools=[transfer_to_summary],
name="finance_agent",
prompt="""你是财务专员,处理发票、报销、扣费相关咨询。
处理完成后调用transfer_to_summary工具转交summary_agent整理最终回答。"""
)
# 4. 总结输出Agent
summary_agent = create_react_agent(
model=get_deepseek_llm(),
tools=[],
name="summary_agent",
prompt="""你是总结专员,整合前面所有Agent的处理内容,输出简洁友好、面向用户的完整答复,流程到此结束,无需转交其他Agent。"""
)
# 创建swarm:agents直接放agent对象,default_active_agent传name字符串
swarm = create_swarm(
agents=[intake_agent, tech_agent, finance_agent, summary_agent],
model=get_deepseek_llm("deepseek-v3"),
default_active_agent="intake_agent" # 和上面name="intake_agent"严格一致
)
app = swarm.compile()
if __name__ == "__main__":
# 测试技术问题
input_msg = {"messages": [HumanMessage(content="我的账号无法登录,应该怎么解决?")]}
result = app.invoke(input_msg)
print("===== 完整对话流转输出 =====")
for idx, msg in enumerate(result["messages"]):
print(f"\n[{idx}] 角色:{msg.type}")
print(f"内容:\n{msg.content}\n")
输出结果:
F:\pythonProject\AgetStudyProject\.venv\Scripts\python.exe F:\pythonProject\AgetStudyProject\agent07.py
===== 完整对话流转输出 =====
[0] 角色:human
内容:
我的账号无法登录,应该怎么解决?
[1] 角色:ai
内容:
您遇到了账号登录问题,这属于技术问题,我马上为您转接技术专员处理。
[2] 角色:tool
内容:
Successfully transferred to tech_agent
[3] 角色:ai
内容:
您好!我是技术专员,很高兴为您服务。关于账号无法登录的问题,我来帮您排查一下。
首先,请问您遇到了哪种情况呢?
1. **忘记密码** - 无法输入正确密码
2. **账号被锁定** - 多次输入错误密码后被锁定
3. **提示账号不存在** - 输入账号后显示未注册
4. **验证码收不到** - 手机或邮箱收不到验证码
5. **其他错误提示** - 请描述具体提示内容
另外,请提供以下信息以便我更快帮您解决:
- 您的账号是什么?(用户名/手机号/邮箱)
- 登录时出现了什么具体的错误提示?
- 您最近一次成功登录是什么时候?
Process finished with exit code 0
pip install langgraph langgraph-swarm langchain langchain-openai python-dotenv
Swarm 模式适合流程可变的场景——Agent 之间自主协商谁处理下一环节,系统更加灵活。
学AI大模型的正确顺序,千万不要搞错了
🤔2026年AI风口已来!各行各业的AI渗透肉眼可见,超多公司要么转型做AI相关产品,要么高薪挖AI技术人才,机遇直接摆在眼前!
有往AI方向发展,或者本身有后端编程基础的朋友,直接冲AI大模型应用开发转岗超合适!
就算暂时不打算转岗,了解大模型、RAG、Prompt、Agent这些热门概念,能上手做简单项目,也绝对是求职加分王🔋

📝给大家整理了超全最新的AI大模型应用开发学习清单和资料,手把手帮你快速入门!👇👇
学习路线:
✅大模型基础认知—大模型核心原理、发展历程、主流模型(GPT、文心一言等)特点解析
✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑
✅开发基础能力—Python进阶、API接口调用、大模型开发框架(LangChain等)实操
✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用
✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代
✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经
以上6大模块,看似清晰好上手,实则每个部分都有扎实的核心内容需要吃透!
我把大模型的学习全流程已经整理📚好了!抓住AI时代风口,轻松解锁职业新可能,希望大家都能把握机遇,实现薪资/职业跃迁~
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

更多推荐


所有评论(0)