73-LangGraph多Agent状态机-Agent握手交接-并行汇聚与故障恢复
文章目录【73.PythonAI】用LangGraph实现多Agent状态机Agent间的握手、交接与故障恢复导入语1 ~ 多Agent状态机总览1.1 三大工程难题2 ~ State设计多Agent共享的交接单2.1 字段按Agent归属分区2.2 Agent节点只负责自己的一亩三分地3 ~ 并行执行与汇聚3.1 fan-out / fan-in 的实现3.2 并行vs串行的收益4 ~ 故障恢复机制4.1 三级降级策略4.2 用条件边做降级路由4.3 故障恢复决策表5 ~ 多Agent状态机的调试思考 总结结尾【73.PythonAI】用LangGraph实现多Agent状态机Agent间的握手、交接与故障恢复文章简介本文讲解如何用LangGraph构建生产级的多Agent状态机。在第62篇单Agent状态图的基础上本文聚焦多Agent场景特有的三个工程难题Agent间的状态传递一个Agent的产物如何干净地交给下一个、并行执行与汇聚多个Agent同时干活再合并结果、以及故障恢复机制某个Agent执行失败后如何重试/降级/人工接管。通过一个调研写作翻译三Agent并行协作的完整实现配上Mermaid有向图展示状态流转与汇聚节点设计适合已经用过LangGraph单Agent流程、需要向多Agent编排进阶的开发者。 个人主页源码骑士❄专栏传送门《Android开发基础》《python基础课程》⭐️热衷从源码视角拆解技术底层原理将复杂架构讲得通俗易懂 源码骑士的简介5年Android Framework系统开发经验曾主导多项系统级性能优化专项技术栈覆盖Android系统全链路Binder/Handler/AMS/WMS/启动流程及Java后端全家桶Spring MyBatis Redis Oracle累计产出原创技术文章100篇文章以流程图为特色被读者评价为看一篇胜过啃一周源码导入语用LangGraph跑通一个单Agent审批流之后你自然会想能不能让两个Agent并行干活比如一个Agent在调研资料的同时另一个Agent在写报告框架最后第三个Agent把两者合并想法很美好实操全是坑并行的结果怎么合并一个Agent挂了整个流程怎么办状态在Agent之间传来传去怎么保证不丢字段这篇文章就用一个完整的案例把多Agent状态机的三大难题一次解决。1 ~ 多Agent状态机总览失败重试成功重试失败开始任务分发节点调研Agent写作Agent汇聚节点等待两个分支完成翻译Agent结束重试/降级降级路径跳过调研直接写1.1 三大工程难题难题本质问题本文方案状态传递下游Agent需要上游的哪些字段显式State schema 增量更新并行汇聚并行分支的结果怎么合并LangGraph的fan-out/fan-in故障恢复单点失败拖垮整个流程try-except包装 条件边降级2 ~ State设计多Agent共享的交接单2.1 字段按Agent归属分区fromtypingimportTypedDict,OptionalclassTeamState(TypedDict):# 公共输入topic:str# 调研Agent的产物research_notes:Optional[str]research_status:str# pending/done/failed# 写作Agent的产物draft:Optional[str]draft_status:str# 翻译Agent的产物translated:Optional[str]# 全局控制error:Optional[str]设计要点每个Agent只写自己的字段读别人的字段。这比所有Agent共用一个result字段清晰得多——出了问题一眼就能看出是哪个Agent的产物缺失。2.2 Agent节点只负责自己的一亩三分地defresearcher_node(state:TeamState)-dict:调研Agent只更新自己的字段try:notessearch_and_summarize(state[topic])return{research_notes:notes,research_status:done}exceptExceptionase:return{research_status:failed,error:str(e)}defwriter_node(state:TeamState)-dict:写作Agent可以先写框架不强依赖调研draftllm.invoke(f为主题{state[topic]}写一份报告初稿).contentreturn{draft:draft,draft_status:done}defmerge_node(state:TeamState)-dict:汇聚节点把调研结果融入初稿ifstate[research_status]done:finalllm.invoke(f初稿{state[draft]}\n调研资料{state[research_notes]}\nf请用调研资料充实初稿).contentelse:# 调研失败的降级直接用初稿finalstate[draft]return{draft:final}3 ~ 并行执行与汇聚3.1 fan-out / fan-in 的实现LangGraph中多条出边指向不同节点就是并行分发多条入边汇入同一节点就是汇聚fromlanggraph.graphimportStateGraph,END workflowStateGraph(TeamState)workflow.add_node(dispatch,lambdas:{})# 分发节点workflow.add_node(researcher,researcher_node)workflow.add_node(writer,writer_node)workflow.add_node(merge,merge_node)workflow.add_node(translator,translator_node)workflow.set_entry_point(dispatch)# fan-outdispatch同时触发两个并行分支workflow.add_edge(dispatch,researcher)workflow.add_edge(dispatch,writer)# fan-in两个分支都完成后才进入mergeworkflow.add_edge(researcher,merge)workflow.add_edge(writer,merge)workflow.add_edge(merge,translator)workflow.add_edge(translator,END)appworkflow.compile()关键认知LangGraph的汇聚是自动的——merge节点会等所有指向它的上游分支都完成才执行。你不需要自己写计数器或锁。3.2 并行vs串行的收益串行调研(8s)→ 写作(6s)→ 翻译(4s)18秒 并行max(调研8s, 写作6s)→ 汇聚(2s)→ 翻译(4s)14秒 ↓ 节省22%任务越独立、单个任务越耗时并行收益越大。4 ~ 故障恢复机制4.1 三级降级策略defresilient_researcher(state:TeamState,max_retry2)-dict:forattemptinrange(max_retry1):try:notessearch_and_summarize(state[topic])return{research_notes:notes,research_status:done}exceptRateLimitError:ifattemptmax_retry:time.sleep(2**attempt)# 指数退避continuereturn{research_status:failed,error:API限流重试耗尽}exceptExceptionase:return{research_status:failed,error:str(e)}4.2 用条件边做降级路由defroute_after_research(state:TeamState)-str:调研后决定走哪条路returnmerge# 无论成败都进merge由merge内部决定降级策略# 更激进的方案失败直接走fallback节点workflow.add_conditional_edges(researcher,lambdas:mergeifs[research_status]doneelsefallback)4.3 故障恢复决策表故障类型策略实现API限流/超时重试指数退避最多2~3次工具不可用降级跳过该Agent下游用默认输入LLM输出格式错误重试兜底重新生成仍失败则返回占位文本状态字段缺失校验merge节点检查上游status字段5 ~ 多Agent状态机的调试# 开启流式输出观察每个节点的执行foreventinapp.stream({topic:异步框架对比,research_status:pending,draft_status:pending}):fornode_name,outputinevent.items():print(f[{node_name}] 输出字段:{list(output.keys())})多Agent流程的调试口诀盯状态字段不盯打印日志。每个节点只更新自己负责的字段任何字段异常都能直接定位到责任Agent。思考 总结多Agent状态机的核心是分区状态设计每个Agent一个专属字段区读公共区、写私有区——职责边界清晰了协作才不会乱。LangGraph的fan-in是自动汇聚多条入边的节点天然等待所有上游完成这是它比手写asyncio编排优雅的地方。故障恢复要分层节点内重试抗抖动→ 条件边降级抗单点失败→ merge内兜底保证最终有输出三层缺一不可。并行的前提是任务独立如果写作Agent必须等调研结果才能动笔强行并行只会得到两个互相等待的节点。从单Agent流程到多Agent状态机本质是从程序设计走向系统设计——你考虑的不再只是逻辑对不对而是分工、容错和协作效率。结尾各位小伙伴本文的内容到这里就全部结束了源码骑士在这里再次感谢您的阅读源码骑士 — Android Framework 全栈开发关注跟博主一起从源码视角深耕底层原理见证每一次成长❤️点赞让优质内容被更多人看见让知识传递更有力量⭐收藏把核心知识点存好在需要时随时查、随时用评论分享你的经验或疑问评论区一起交流避坑一键四连不要忘记给博主一键四连哦️寄语技术之路难免有困惑但同行的人会让前进更有方向结语多Agent协作不是把Agent数量堆上去而是把分工、交接、容错这三件事设计明白。画好状态图再写代码你的多Agent系统就成功了一半。不要忘记给博主一键四连哦

相关新闻

AI音乐生成在咖啡店的应用与实战技巧

AI音乐生成在咖啡店的应用与实战技巧

1. 项目背景与核心价值朋友小李是家咖啡店的店长,最近发现年轻顾客对店铺背景音乐特别挑剔。传统歌单已经无法满足Z世代对"氛围感"的极致追求。某天深夜打烊后,他突发奇想用AI音乐生成工具做了首实验性BGM,第二天播放时竟有顾客主动…

2026/10/13 2:06:41 阅读更多 →
用C++实现Brainfuck解释器:从极简指令到图灵完备运行时

用C++实现Brainfuck解释器:从极简指令到图灵完备运行时

1. 项目概述:从“Hello, World!”到“Hello, Brainf..k!”如果你已经能用C写出像样的“Hello, World!”,并且对指针、内存操作这些概念不再感到陌生,甚至有点跃跃欲试,那么这个项目——用C实现一个Brainf..k解释器——绝对是你巩固…

2026/10/2 11:56:43 阅读更多 →
llama.cpp本地部署大模型:硬件兼容与量化优化指南

llama.cpp本地部署大模型:硬件兼容与量化优化指南

1. 为什么选择llama.cpp部署私有大模型 在本地部署大语言模型时,我们通常会面临几个关键选择:GPU加速方案、纯CPU方案以及各种推理框架。llama.cpp之所以成为众多开发者的首选,主要基于以下几个核心优势: 硬件兼容性极佳 &#…

2026/10/13 10:29:47 阅读更多 →

最新新闻

质量工程师职业转型路径与核心能力迁移指南

质量工程师职业转型路径与核心能力迁移指南

1. 质量工程师的职业转型背景分析在制造业摸爬滚打五年的质量工程师们,常常会面临职业发展的十字路口。每天处理着SPC控制图、8D报告和ISO文件,不知不觉中已经积累了丰富的体系管理经验和问题解决能力。但当我们开始思考"未来五年还能做什么"时…

2026/10/13 13:38:19 阅读更多 →
中国台风shp数据处理解析:坐标系转换与路径可视化

中国台风shp数据处理解析:坐标系转换与路径可视化

简介:这份1950-2018年中国沿海台风历史数据集以Shapefile矢量格式封装,包含点、线两个图层,面向气象科研人员、GIS分析者及灾害风险管理从业者,用于系统回溯台风活动轨迹与空间分布规律。压缩包共10个文件,由shp几何数…

2026/10/13 13:38:19 阅读更多 →
Hikvision安防平台密码重置三阶实战指南

Hikvision安防平台密码重置三阶实战指南

简介:本资源是面向安防系统运维人员、集成商工程师及IT管理员的Hikvision综合安防管理平台专用密码重置工具,解决因遗忘管理员密码导致无法登录平台、中断视频监控、门禁或报警等核心业务管理的紧急问题。压缩包为ZIP格式,大小14.18MB&#x…

2026/10/13 13:38:19 阅读更多 →
风电紧固件技术解析:从材料选择到安装工艺

风电紧固件技术解析:从材料选择到安装工艺

1. 风电紧固件技术需求全景解析在风力发电机组这个庞然大物里,螺栓螺母这些看似不起眼的紧固件,实则是维系整个系统安全运转的"关节"。主机舱、齿轮箱、偏航系统这三大核心部件对紧固件的要求各有侧重,但都指向同一个目标——在极端…

2026/10/13 13:38:19 阅读更多 →
高校科研管理系统:Python+Flask+Vue全栈开发实践

高校科研管理系统:Python+Flask+Vue全栈开发实践

1. 项目背景与核心价值高校科研管理一直是学术机构运营中的关键环节,特别是纵向项目的全生命周期管理。传统Excel邮件的工作模式存在数据分散、流程不透明、统计困难等痛点。这个基于PythonFlaskVue技术栈的科研管理系统,正是为解决这些问题而生。我在实…

2026/10/13 13:38:19 阅读更多 →
UE5 C++ JSON读写:FJsonObject与FJsonValue完全解析

UE5 C++ JSON读写:FJsonObject与FJsonValue完全解析

最近在某个项目的存档模块里折腾 JSON 读写,UE5 的 C 侧 API 绕来绕去,最后发现核心就两个类:FJsonObject和FJsonValue。如果你也在跟教程学 UE5 C 的 JSON 部分,到了第 61-3 节这里刚好进入最绕的一段——类继承链、各种 Value 子…

2026/10/13 13:37:18 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 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/12 21:05:09 阅读更多 →
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/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练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/12 18:11:17 阅读更多 →