多智能体协作库langgraph-swarm-py
https://github.com/langchain-ai/langgraph-swarm-py多智能体协作库一、这玩意是干啥的想象你有一个客服团队Alice 是数学专家Bob 是个说话像海盗的逗比。用户来了先跟 Bob 聊天然后问57 等于几Bob 不会算就说这事儿得找 Alice然后把用户转给 Alice。Alice 算完答案对话结束。这个库就是帮你实现智能体之间自动转接的。GitHublangchain-ai/langgraph-swarm-py二、三个核心概念1. Swarm蜂群— 一群智能体的管理者就像蜂群里的蜂王它知道现在谁在干活active_agent该把活儿派给谁路由逻辑怎么让智能体们互相交接handoff 机制为什么需要它如果没有这个管理者你每次跟 AI 对话它都不知道上次是谁在回答你每次都从头开始像个金鱼记忆。2. Handoff交接— 智能体之间的传话筒每个智能体手里有个转接电话的工具。比如 Bob 会说我有个 transfer_to_alice 按钮按一下就把用户转给 Alice。交接的时候做了三件事发一条消息已成功转接给 Alice让用户知道发生了什么告诉系统下一个找 Alice 干活更新 active_agent把之前的聊天记录打包带过去这样 Alice 知道前面聊了啥为什么需要它就像医院分诊你不能让一个心脏科医生去拔牙。每个智能体有自己擅长的活遇到不擅长的就转给对的人。3. Active Agent活跃智能体— 记住上次是谁系统里有个小本本记着现在该谁干活。新消息来了先看小本本找到那个人让他继续处理。为什么需要它保证对话的连续性。你问57 等于几系统知道上次是 Alice 在干活就直接找 Alice不会又去问 Bob你要不要算一下三、代码怎么组织的langgraph_swarm/ ├── swarm.py ← 蜂群管理者怎么组队、怎么调度 ├── handoff.py ← 交接工具怎么转接、转给谁 └── __init__.py ← 对外暴露的接口三个模块各司其职模块核心功能关键函数swarm.py多智能体编排引擎create_swarm()、add_active_agent_router()handoff.py智能体间交接机制create_handoff_tool()、get_handoff_destinations()__init__.py公共 API 导出暴露 4 个符号四、一个完整的例子# 1. 创建两个智能体 alice 创建智能体(模型, 工具[加法器, 转接给Bob], 角色我是数学专家) bob 创建智能体(模型, 工具[转接给Alice], 角色我是海盗) # 2. 组建成蜂群 swarm create_swarm([alice, bob], 默认启动Alice) # 3. 用户第一句话我想跟 Bob 说话 # → 系统启动 AliceAlice 看到用户想找 Bob按转接按钮 # → 系统切到 BobBob 开始用海盗口吻聊天 # 4. 用户第二句话57 等于几 # → 系统记得上次是 Bob直接找 Bob # → Bob 不会算按转接按钮找 Alice # → Alice 算出 12返回答案五、为什么这个设计好特性说明不用手动写调度代码你只需要告诉每个智能体你能转给谁库自动处理所有路由有记忆通过 checkpointer 保存对话关了重开还能继续聊可扩展想加第三个智能体一行代码create_swarm([alice, bob, charlie])⚙️可定制不满意默认的转接方式自己写个 handoff 工具想传什么数据都行六、频繁交接问题会不会转错Q1很多智能体互相转换要维护复杂的 handoff 工具吗不需要。库自动搞定。create_swarm在添加每个智能体时会调用get_handoff_destinations()自动扫描这个智能体身上有哪些 handoff 工具自动识别路由目标。关键机制在get_handoff_destinations钻进智能体内部的图结构找到 tools 节点里的所有工具检查每个工具的 metadata 里有没有__handoff_destination标记把标记里的目标名字全部收集起来Q2会不会交接给错误的智能体有可能但责任在 LLM不在库。交接的决策者是 LLM库只负责执行。库做的防护工具描述create_handoff_tool的description参数告诉 LLM 这个工具是干啥的system_prompt 引导可以给每个智能体写清楚角色定位没有强制路由库不会替 LLM 做决定怎么降低风险给每个 handoff 工具写清晰的 description描述越具体LLM 越不容易选错。七、为什么要路由到上次干活的 Agent核心代码就一句话def route_to_active_agent(state: dict) - str: return state.get(active_agent, default_active_agent)每次新消息进来先看 state 里记的active_agent是谁就找谁。这个设计的巧妙之处特点说明保证对话连续性没有记忆的话每次都要重新判断该找谁对话会断⚡避免反复路由的性能浪费有记忆 直接跳过去省一次 LLM 调用符合人类对话直觉你跟一个人聊天不会每句话都重新自我介绍和 handoff 工具形成闭环handoff 更新 active_agent路由读取 active_agent写和读分离️支持默认值降级第一次对话时 active_agent 是空的走 default_active_agent一句话总结这个设计把谁在处理当前对话这个状态从每次都重新计算变成了记住就行。就像你在餐厅点了菜服务员不需要每上一道菜都问这桌是谁的因为订单上写着桌号。active_agent 就是那个桌号。八、从交接看执行全过程基于测试用例场景还原Turn 1用户说我想跟 Bob 说话步骤动作①系统启动active_agent 为空 → 走默认值 Alice②路由到 AliceAlice 调用 transfer_to_bob 工具③handoff 执行goto → Bob 节点update → 把 active_agent 改成 Bob④Bob 收到消息 完整历史开始用海盗口吻回复结束active_agent BobTurn 2用户说57 等于几步骤动作①路由函数读 state.get(active_agent) → Bob②直接路由到 BobBob 调用 transfer_to_alice③handoff 执行active_agent 被改成 Alice④Alice 调用 add(5, 7)返回 12结束active_agent Alice三个关键问题的答案问题答案Alice 交接给 Bob 后当前活跃的是谁Bob。handoff 在第 91 行立刻把 active_agent 改成了 Bob下次对话进来路由到谁Bob。路由函数读的是state.get(active_agent)上次结束时的值是 BobBob 知道前面聊了啥吗全知道。所有历史消息都打包传给了 Bob关键洞察active_agent 不是谁在处理而是处理完之后的最后一个人是谁。就像接力赛最后一棒是谁active_agent 就记谁。下次发令枪响直接找最后一棒的人。消息是全量传递的不是只传当前智能体的消息。所有智能体共享一个 messages 列表所以 Bob 能看到 Alice 说过什么Alice 也能看到 Bob 说过什么。九、每个智能体都充当路由器角色关键机制handoff 工具就是一个普通的 toolcreate_handoff_tool创建的本质上就是一个普通的 LangChain Tool跟add(a, b)这种计算工具没区别。它被塞进智能体的 tools 列表里LLM 看到它自己决定要不要调用。完整流程拆解场景用户说帮我算 57步骤动作①路由到 Bobactive_agent Bob②Bob 的 LLM 看到工具列表中有 transfer_to_alice③LLM 决定调用 transfer_to_alice④系统跳到 Alice 节点⑤Alice 的 LLM 看到工具列表中有 add(a, b)⑥LLM 调用 add(5, 7) → 返回 12⑦LLM 生成回复结果是 12三个关键点路由判断 LLM 的工具选择— 不是库写了 if 规则而是 LLM 自己推理每个智能体只需要知道我能转给谁— 不需要知道对方的能力没有中心调度器— 系统是去中心化的每个智能体自己决定要不要转、转给谁每个智能体都需要充当判断路由的作用——这个判断不是代码逻辑是 LLM 的工具调用决策。库只负责发按钮 → 按按钮后跳转 → 记住最后谁在干活。十、消息归属问题不是模糊记录每条 AI 消息都有name字段明确标记是谁说的。messages列表不是所有消息混在一起而是每条都有角色归属messages [ {role: user, content: 我想跟 Bob 说话}, # 用户说的 AIMessage(nameAlice, tool_calls[transfer_to_bob]), # Alice 说的 ToolMessage(content已转接给 Bob), # 系统说的handoff 工具生成 AIMessage(nameBob, contentAhoy, matey! ...), # Bob 说的 {role: user, content: 57 等于几}, # 用户说的 AIMessage(nameBob, tool_calls[transfer_to_alice]), # Bob 转接的 ToolMessage(contentadd(5,7)12), # 系统说的add 工具结果 AIMessage(nameAlice, content结果是12), # Alice 回答的 ]附代码模块详解swarm.py — 多智能体编排引擎组件说明SwarmState继承自 MessagesState核心字段是 active_agent记录当前活跃的智能体create_swarm()工厂函数接收多个智能体列表自动构建 StateGraph。验证非空、自动转换类型、添加节点、推断路由add_active_agent_router()底层路由函数在 START 处添加条件边根据 active_agent 状态字段决定路由handoff.py — 智能体间交接机制组件说明create_handoff_tool()创建标准交接工具工具名自动生成内部生成 ToolMessage 返回 Command(goto...)get_handoff_destinations()从已编译的智能体图中提取所有 handoff 目标公共 API__init__.py暴露 4 个公共符号SwarmState、add_active_agent_router、create_handoff_tool、create_swarm

相关新闻

Box64:突破性ARM架构x86_64模拟器深度解析

Box64:突破性ARM架构x86_64模拟器深度解析

Box64:突破性ARM架构x86_64模拟器深度解析 【免费下载链接】box64 Box64 - Linux Userspace x86_64 Emulator with a twist, targeted at ARM64, RV64 and LoongArch Linux devices 项目地址: https://gitcode.com/gh_mirrors/bo/box64 还在为ARM设备无法运行…

2026/10/5 7:15:00 阅读更多 →
计算机毕业设计之宠物商场APP的设计与实现

计算机毕业设计之宠物商场APP的设计与实现

由于移动应用技术的持续性的快速发展,现实生活中人们大多数都是通过移动手机、电脑等智能设备来完成生活中的事务。因此,许多的人工传统行业也开始与互联网结合,不再一味的依靠人工手动,努力打造半自动数字化甚至是全自动数字化模…

2026/9/30 16:38:03 阅读更多 →
深入解析Tkinter pack布局:从核心算法到复杂界面实战

深入解析Tkinter pack布局:从核心算法到复杂界面实战

1. 为什么说pack是Tkinter布局的“懒人神器”?如果你刚开始用Python的Tkinter做图形界面,面对一堆按钮、标签、文本框,第一个头疼的问题肯定是:怎么把它们摆到窗口里?Tkinter给了你三个选择:pack、grid和pl…

2026/10/4 9:41:30 阅读更多 →

最新新闻

夜间行人检测数据集:VOC/COCO/YOLO标签解析与YOLO11训练实战

夜间行人检测数据集:VOC/COCO/YOLO标签解析与YOLO11训练实战

简介:面向夜间行人检测实战场景,这份资源提供5000张夜id低光街景与道路行人图像,涵盖常规、遮挡及严重遮挡样本,并配套VOC/COCO/YOLO三种常见标签格式,可直接用于监控场景行人检测项目,亦可作为通用行人数据…

2026/10/5 7:14:36 阅读更多 →
python不是内部或外部命令?彻底搞定PATH环境变量配置

python不是内部或外部命令?彻底搞定PATH环境变量配置

“python 不是内部或外部命令”这句话,每年都能拦下一大批刚入门的同学。你明明照着教程把安装包下载好、双击运行、一路点 Next,可窗口一关,打开命令行敲一个python,系统却像不认识它一样。问题多半不在安装过程,而在…

2026/10/5 7:14:36 阅读更多 →
前后端分离下后端单元测试实战:接口契约、边界用例与CI质量门禁

前后端分离下后端单元测试实战:接口契约、边界用例与CI质量门禁

聊个挺实际的问题。前后端分离开发做了这么多轮,框架从 Spring Boot 换到 FastAPI,脚手架从自己拼到若依这类现成工程,但很多团队对后端质量的把控,反而比单体时代更松了。原因不复杂:分离之后,后端不直接决…

2026/10/5 7:14:35 阅读更多 →
YOLOv11移动端部署实战:剪枝、量化与推理优化全解析

YOLOv11移动端部署实战:剪枝、量化与推理优化全解析

简介:这是一套面向YOLOv11目标检测开发者的移动端部署与轻量化实战文档,适合希望在手机、嵌入式开发板上高效运行模型的算法工程师与学习者。文档从深度学习模型轻量化背景切入,系统讲解模型剪枝、量化、知识蒸馏与轻量化网络结构设计&#x…

2026/10/5 7:14:35 阅读更多 →
低成本玩转OpenClaw:无Mac也能跑本地模型,旧笔记本轻松挂机AI助理

低成本玩转OpenClaw:无Mac也能跑本地模型,旧笔记本轻松挂机AI助理

从“OpenClaw”这名字刷到我时间线那天起,我就知道迟早得替大家把“没有 Mac 怎么玩转它”这条路先踩一遍。先说结论:OpenClaw 压根不是 Mac 专属,Windows 旧笔记本、低功耗迷你主机、甚至一台吃灰的安卓手机都能让它跑起来,核心不…

2026/10/5 7:14:34 阅读更多 →
从7.7万Skills到高效工作流:Claude Code筛选、安装与切换指南

从7.7万Skills到高效工作流:Claude Code筛选、安装与切换指南

先说个有意思的现象。Claude Code 火了大半年,我身边不少人卡在同一个阶段:装好了,跑通了,然后不知道让它干什么。模型再强,你不好好描述任务,它也就是个漂亮的聊天框。直到有人甩给我一个聚合站&#xff0…

2026/10/5 7:13:34 阅读更多 →

日新闻

马斯克杀回智能体战场,Grok 4.5万亿参数撑腰,Cursor接手数字白领项目:用TaoToken统一Key跑通多模型Agent工作流

马斯克杀回智能体战场,Grok 4.5万亿参数撑腰,Cursor接手数字白领项目:用TaoToken统一Key跑通多模型Agent工作流

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 0:00:22 阅读更多 →
AI编程工具插件机制详解:plugin.json配置与加载失败排查指南

AI编程工具插件机制详解:plugin.json配置与加载失败排查指南

1. 从“plugins”这个词说起:它到底在解决什么问题如果你最近在折腾 AI 编程工具,尤其是 Cursor、Codex CLI、Claude Code 这类带 CLI 的编辑器或命令行助手,那你大概率绕不开一个词——plugins。这个词本身不新鲜,从浏览器到 IDE…

2026/10/5 0:00:23 阅读更多 →
第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 TaoToken 的排查清单

第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 TaoToken 的排查清单

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 0:00:23 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 5:06:42 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 1:10:22 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 3:06:17 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 11:40:45 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 9:43:54 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 20:14:29 阅读更多 →