当前位置: 首页 > article >正文

第 3 篇:让 Agent 学会分工,LangGraph 构建多 Agent系统

系列简介从零搭建一个多 Agent AI 助手覆盖原理、实现、部署全链路。不讲空话每篇都有可运行的代码。项目地址https://github.com/CodeMomentYY/LangGraph-Agent本篇目标用 LangGraph 搭建一个多 Agent 协作系统支持意图识别、动态路由、串行/并行执行。前言大家好我是一名前端工程师。都说前端“已死”那与其担心被 AI 替代不如打入敌人内部于是我开始折腾 Agent 开发。折腾下来发现Agent 的核心不是算法而是“工程能力”怎么设计架构、怎么串联服务、怎么把 LLM 的能力落地成产品。这些恰好是我们擅长的事。这个系列记录我从零搭建多 Agent 系统的完整过程。只聊技术知识和设计思路代码交给 AI 写。如果你也想从应用层切入 AI希望这个系列对你有帮助。读完本篇你将学到为什么需要多 Agent单 Agent 的瓶颈在哪LangGraph 是什么为什么选它多 Agent 架构设计Dispatcher 专业 Agent串行和并行两种执行模式的实现背景与动机上两篇我们用 30 行代码实现了单 Agent也了解了三种范式。但当你想让 Agent 同时具备“查天气”、“写文章”、“闲聊”这些能力时那么问题来了全塞到一个 Agent 里Prompt 会越来越臃肿。你得在一个 System Prompt 里描述所有工具、所有规则、所有场景。LLM 看到一大坨指令容易搞混该调工具的时候不调不该调的时候乱调。这就像一个人同时当厨师、服务员、收银员——忙得过来但质量堪忧。解决方案很自然分工。让不同的 Agent 各管一摊再加一个“调度员”决定把任务交给谁。但分工带来了新问题多个 Agent 之间怎么传递数据执行顺序怎么控制什么条件走哪条路如果还用前两篇的原生写法手写 for 循环 if-else代码会迅速变成一团意大利面。这就是为什么我们需要一个框架来管理流程——不是因为原生写法不行而是当节点多了、路由复杂了框架能帮你把“流程控制”这件事做得更清晰。核心概念单 Agent vs 多 Agent我们看一下两者对比单 Agent多 AgentPrompt一个巨大的 System Prompt每个 Agent 一个精简 Prompt职责什么都干各司其职调试出错不知道哪个环节的问题哪个 Agent 出错一目了然扩展加功能就改 Prompt越改越乱加功能就加一个新 Agent速度还行多了 Dispatcher 的开销设计多 Agent 架构架构图三个专业 Agenttools 路径需要调工具的任务查天气、获取网页、查语雀文档内部是 ReAct 循环writer 路径写作类任务邮件、文案、翻译纯 LLM 生成temperature 调高一点增加创造力chat 路径闲聊和知识问答纯 LLM 对话会从知识库检索相关内容RAG使用 LangGraph 来构建为什么选 LangGraph 而不是 LangChain很多人分不清 LangChain 和 LangGraph 的关系。简单来说LangChain工具箱。提供了调 LLM、解析输出、连接向量库等基础能力像是一堆零件。LangGraph施工图。在 LangChain 的零件基础上定义了谁先执行、谁后执行、什么条件走哪条路的流程控制。感兴趣的可以看看这篇文章https://www.datacamp.com/tutorial/langchain-vs-langgraph-vs-langsmith-vs-langflowLangChain 本身也能做 AgentAgentExecutor但它的问题是流程是黑盒的。你把工具和 Prompt 丢进去它内部自己循环你很难控制“什么时候该停”、“中间结果怎么传递”、“多个 Agent 怎么协作”。LangGraph 把流程显式化了——你画一张图节点是什么、边怎么连、条件是什么一目了然。对于多 Agent 协作这种需要精确控制流程的场景LangGraph 比 LangChain 的 AgentExecutor 好用得多。LangChain AgentExecutorLangGraph流程控制黑盒框架内部循环白盒你画图定义多 Agent不原生支持天然支持多节点条件路由难实现一行代码状态管理手动传递自动维护调试难看不到中间过程易逐节点 stream适合场景简单单 Agent复杂多 Agent 协作其实在项目里LangChain 的东西还是在用的消息格式、工具定义、OpenAI SDK只是不用它的 AgentExecutor改用 LangGraph 来编排流程。动手实现LangGraph 基础用法很多小伙伴不熟悉 LangGraph所以在搭建多 Agent 之前先看一个最简单的 LangGraph 示例理解它的三个核心概念State状态、Node节点、Edge边。其实就是把代码调度更具体化了像是在画“流程图”。fromlanggraph.graphimportStateGraph,ENDfromtyping_extensionsimportTypedDict# 1. 定义状态所有节点共享的数据classMyState(TypedDict):message:strcount:int# 2. 定义节点就是普通函数接收 state返回要更新的字段defsay_hello(state):return{message:f你好你已经来了{state[count]}次}defadd_count(state):return{count:state[count]1}# 3. 构建图注册节点 连接边graphStateGraph(MyState)graph.add_node(counter,add_count)graph.add_node(greeter,say_hello)graph.set_entry_point(counter)# 入口graph.add_edge(counter,greeter)# counter → greetergraph.add_edge(greeter,END)# greeter → 结束appgraph.compile()# 4. 运行resultapp.invoke({message:,count:0})print(result)# {message: 你好你已经来了 1 次, count: 1}就这么简单定义状态 → 写几个函数 → 用边连起来 → Compile → Invoke调用。LangGraph 真正强大的地方在于条件边——根据状态动态决定下一步走哪# 条件边根据 count 决定走哪条路defshould_continue(state):ifstate[count]3:returndonereturnagaingraph.add_conditional_edges(greeter,should_continue,{again:counter,# count 3 → 回到 counter循环done:END,# count 3 → 结束})有了条件边就能实现循环、分支、路由——这正是多 Agent 系统需要的能力。Step 1定义状态LangGraph 的核心是 State——所有节点共享的数据结构。每个节点读取 state、处理、写回 state。fromtypingimportAnnotated,Sequencefromtyping_extensionsimportTypedDictfromlangchain_core.messagesimportBaseMessageimportoperatorclassAgentState(TypedDict):所有节点共享的状态# 对话历史自动追加messages:Annotated[Sequence[BaseMessage],operator.add]# 意图列表dispatcher 填写intents:list[str]# 执行模式sequential 或 parallelmode:str# 当前执行到第几个意图current_step:int关键设计messages用operator.add标注意味着每个节点返回的消息会追加到列表里而不是覆盖这样对话历史自动累积。Step 2实现 Dispatcher意图分类Dispatcher 是整个系统的入口负责判断用户想干什么DISPATCHER_PROMPT你是一个意图分类器。 分类规则 - tools需要调用工具的请求查天气、获取网页、查文档 - writer写作类写邮件、文案、翻译 - chat其他闲聊、知识问答 如果需要多个步骤按顺序列出。 回复格式意图1,意图2|模式sequential 或 parallel 示例 - 上海天气 → tools|sequential - 查天气然后写文案 → tools,writer|sequential - 翻译hello顺便查天气 → tools,writer|parallel defdispatcher_node(state):last_user_msg...# 取最后一条用户消息responseinvoke_llm([SystemMessage(DISPATCHER_PROMPT),...])# 解析intents modeintents,modeparse_response(response)return{intents:intents,mode:mode,current_step:0}Dispatcher 的输出决定了后续走哪条路。注意它支持多意图。比如“查天气然后写文案”会被拆成[tools, writer]串行执行。Step 3构建 LangGraph 图这是最关键的部分——把所有节点和路由规则组装成一张图我们先看流程设计最终代码实现fromlanggraph.graphimportStateGraph,ENDdefbuild_graph():graphStateGraph(AgentState)# 注册节点graph.add_node(dispatcher,dispatcher_node)graph.add_node(mode_router,lambdastate:{})# 路由跳板graph.add_node(step_router,lambdastate:{})# 串行步骤跳板graph.add_node(router,router_node)# 工具决策graph.add_node(tool_executor,tool_executor_node)graph.add_node(writer_agent,writer_agent_node)graph.add_node(chat_agent,chat_agent_node)graph.add_node(advance_step,advance_step)# 推进到下一步graph.add_node(parallel_executor,parallel_executor_node)# 入口graph.set_entry_point(dispatcher)# dispatcher → mode_routergraph.add_edge(dispatcher,mode_router)# 根据 mode 分流graph.add_conditional_edges(mode_router,route_mode,{sequential:step_router,parallel:parallel_executor,})# 串行根据当前 intent 路由graph.add_conditional_edges(step_router,route_current_step,{tools:router,writer:writer_agent,chat:chat_agent,done:END,})# tools 路径ReAct 循环graph.add_conditional_edges(router,should_use_tools,{tools:tool_executor,next:advance_step,})graph.add_edge(tool_executor,router)# writer/chat 完成后推进graph.add_edge(writer_agent,advance_step)graph.add_edge(chat_agent,advance_step)# 检查是否还有下一步graph.add_conditional_edges(advance_step,has_next_step,{continue:step_router,done:END,})# 并行路径graph.add_edge(parallel_executor,END)returngraph.compile()Step 4串行 vs 并行串行有依赖关系的任务。“查天气然后写文案”——writer 需要天气结果才能写。并行互不依赖的任务。“翻译hello world顺便查天气”——两个任务没关系。并行模式用ThreadPoolExecutor同时执行多个 Agent最后让 LLM 把结果整合成一个连贯的回答。Step 5验证效果# 单意图curl-XPOST /api/chat-d{message: 你好}# → dispatcher: chat → chat_agent → 你好有什么可以帮你的# 单意图 工具curl-XPOST /api/chat-d{message: 上海天气}# → dispatcher: tools → router → get_weather → router → 上海晴天24°C# 多意图串行curl-XPOST /api/chat-d{message: 查上海天气写个朋友圈文案}# → dispatcher: [tools, writer] sequential# → tools查天气→ writer基于天气写文案→ 最终回复# 多意图并行curl-XPOST /api/chat-d{message: 翻译hello world顺便查北京天气}# → dispatcher: [tools, writer] parallel# → 并发执行 → 整合回复刨根问底序号问题1️⃣QDispatcher 的意图分类准确吗模糊场景怎么办A不一定准。帮我写个出行计划到底是 tools 还是 writer靠 Prompt 里的规则和示例来约束。模糊时兜底到 chat最安全的路径。后续可以加 few-shot 示例提升准确率。2️⃣Q并行模式怎么整合多个 Agent 的结果A用 LLM 整合。把多个 Agent 的输出拼在一起让 LLM 生成一个连贯的最终回答。类似于你有两段信息请合并成一段自然的回复。3️⃣QLangGraph 和直接写 Python 函数调用有什么区别A小项目没区别。但当图变复杂10 节点、多种条件路由、需要流式输出时LangGraph 的状态管理和条件边比手写 if-else 清晰得多。而且它内置了 stream 模式后面做 SSE 推送时直接用。本篇小结多 Agent 的核心是分工——Dispatcher 做路由专业 Agent 各管一摊LangGraph 用图来描述 Agent 的执行流程节点是函数边是条件支持串行有依赖和并行无依赖两种多意图执行模式dispatcher 的意图分类质量决定了整个系统的上限写在最后多 Agent 架构看起来复杂但核心思想很朴素把大问题拆成小问题让专业的人做专业的事。这和微服务架构的理念一模一样——单体应用拆成多个服务每个服务职责单一通过 API 协作。如果你做过前端的组件化拆分多 Agent 的设计思路你一定不陌生。下一篇预告核心服务架构搭好了接下来让它真正能完整跑起来——Web 界面 SSE 流式输出把 Agent 从命令行变成一个能用的产品。

相关文章:

第 3 篇:让 Agent 学会分工,LangGraph 构建多 Agent系统

系列简介:从零搭建一个多 Agent AI 助手,覆盖原理、实现、部署全链路。不讲空话,每篇都有可运行的代码。 项目地址:https://github.com/CodeMomentYY/LangGraph-Agent 本篇目标:用 LangGraph 搭建一个多 Agent 协作系统…...

2026年外贸管理软件怎么选?B2B与跨境B2C实用选型指南

在外贸行业数字化升级过程中,企业挑选管理软件,首要理清自身业务赛道。目前行业主流分为传统外贸B2B、跨境电商B2C两大模式。结合企业实际经营需求,传统B2B可划分为获客拓客类工具、内部业务管理类系统;跨境B2C可划分为前端店铺运…...

岩土工程渗流问题之有限单元法--坝基渗流、围堰、土石坝自由面、黏土垫层防渗、污染土固化后渗控

第一天 有限元编程基础知识1.有限单元法基础简介(离散化、存储策略及方程解法、边界条件的处理)2.编程语言Fortran及编译工具Intel Visual Fortran(IVF)简介3.Fortran/Matlab/Julia等开源代码及程序库(geomlib/femlib)简介4.水工…...

OBS直播教程:OBS多路推流在哪里设置?如何安装?OBS多路推流教程

OBS直播教程:OBS多路推流在哪里设置?如何安装?OBS多路推流教程 具体如何下载?如何安装?如何使用?我写了一个保姆级教程,请往下看,步骤很详细的,你一定看得懂 第一步&…...

Gemini3.1Pro:自回归与扩散模型的路线之争

扩散语言模型与传统自回归:Gemini 3.1 Pro 的路线选择怎么理解?过去很长一段时间,大模型主流架构基本都围绕“传统自回归(Autoregressive)”展开:一次生成一个 token,靠注意力把上下文信息逐步融…...

log4j2(CVE-2021-44228)漏洞原理与漏洞复现(基于vulhub)

声明:部分内容来源于网络,如若侵权请联系删除 什么是log4j2? Log for Java,Apache的开源日志记录组件,是一个Java的日志记录工具。在log4j框架的基础上进行了改进,并引入了丰富的特性,可以控制日志信息输送…...

如何构建现代自托管音乐播放器:音乐爱好者的完整使用指南

如何构建现代自托管音乐播放器:音乐爱好者的完整使用指南 【免费下载链接】feishin A modern self-hosted music player. 项目地址: https://gitcode.com/gh_mirrors/fe/feishin 在数字音乐时代,音乐爱好者面临着数据隐私、平台依赖和个性化体验的…...

排水管网可视化管理平台,免巡检、故障快速定位

城市排水管网线路长、节点多、覆盖范围广,传统人工巡检模式面临诸多痛点:巡检人员需步行逐一排查井盖、泵站、溢流口等关键设施,工作强度大、效率低,且难以保证巡检到位率和覆盖率。此外,人工无法全天候进行监管&#…...

2026实测:宁波初一数学小升初本土品牌深度拆解

在宁波,几乎每一位小升初、中考、高考的家长都绕不开一个共同情绪——焦虑。镇海、海曙、鄞州等教育强区的竞争热度连年不减,优质初中与重点高中的入学门槛水涨船高,而面对纷至沓来的教培选择,家长们却常常陷入两难:全…...

【限时公开】Anthropic内部文档评审Checklist泄露版:92%开发者忽略的8个Claude API语义一致性陷阱

更多请点击: https://codechina.net 第一章:Claude API文档编写的核心原则与语义一致性定义 编写高质量的Claude API文档,首要任务是坚守三大核心原则:可预测性、可验证性与可演进性。可预测性要求所有接口行为严格遵循OpenAPI 3…...

AI-HF_Patch终极指南:3步解锁AI-Shoujo完整游戏体验的秘诀

AI-HF_Patch终极指南:3步解锁AI-Shoujo完整游戏体验的秘诀 【免费下载链接】AI-HF_Patch Automatically translate, uncensor and update AI-Shoujo! 项目地址: https://gitcode.com/gh_mirrors/ai/AI-HF_Patch 还在为AI-Shoujo游戏的语言障碍、模组冲突和功…...

神眸低功耗芯片突破:让摄像头摆脱电线,2045年或迎1000亿只智能视觉终端!推理算力创业机会大

神眸低功耗芯片突破,开启智能视觉终端未来神眸致力于在算力浪潮下游,凭借极致低功耗芯片设计,使摄像头摆脱电线束缚,开启千亿只智能视觉终端的未来。杨作兴带领神眸实现了摄像头功耗降低一个数量级的突破。第一代芯片达到业界三分…...

基于 Git Flow 的团队协作与发布流程实践

在软件开发过程中,随着团队规模扩大、需求频繁迭代以及线上版本持续演进,如何管理代码分支成为影响研发效率的重要问题。上图展示的是一种经典的 Git 分支管理模型 —— Git Flow。 它通过明确的分支职责与合并策略,实现:功能开发…...

Adobe-GenP 3.0:为什么这款免费激活工具能让Adobe全家桶瞬间解锁?

Adobe-GenP 3.0:为什么这款免费激活工具能让Adobe全家桶瞬间解锁? 【免费下载链接】Adobe-GenP Adobe CC 2019/2020/2021/2022/2023 GenP Universal Patch 3.0 项目地址: https://gitcode.com/gh_mirrors/ad/Adobe-GenP 你是否曾经因为Adobe Crea…...

XZ63C,18V输入,CMOS输出电压检测芯片

产品概述这系列芯片是使用 CMOS 技术开发的高精度、低功耗、小封装电压检测芯片。检测电压在小温度漂移的情况下保持极高的精度。输出配置是 CMOS 输出。产品特点● 封装:SOT23-3,TO92● 输出配置:CMOS● 工作电压:1.5V-18V …...

XZ62N,0.7uA静态电流,NMOS输出电压检测芯片

产品概述 这系列芯片是使用 CMOS 技术开发的高精度、低功耗、小封装电压检测芯片。检测电压在小温度漂移的情况下保持极高的精度。输出配置是N-channel open drai 输出。 产品特点 ● 封装:SOT23-3 ● 输出配置:N-channel open drain ● 工作电压&a…...

2026大模型技术全景:从“写代码“到“做工程“

2026大模型技术全景:从"写代码"到"做工程"大模型技术正从"炫酷玩具"迈向"核心生产力工具"。本文从技术进展、关键方向、应用场景到未来趋势,全面梳理2026年大模型技术全景。一、引言 2026年,大模型技…...

2026年B2B制造业GEO优化服务商推荐:工业品牌AI搜索可见度提升实战指南

摘要:B2B制造业的品牌营销与消费品逻辑完全不同——技术参数、行业资质、项目案例才是AI推荐的核心素材。本文从B2B行业理解深度、结构化内容能力、合规安全保障三个维度,对比泓动数据、百分点科技、赛诺贝斯、大树科技、Laver AI五家服务商在工业制造业…...

谁还在用机械音?顶伯接入微软 TTS,让你视频瞬间拥有大片质感!

谁还在用机械音?顶伯接入微软 TTS,让你视频瞬间拥有大片质感!视频配音还在用那种一听就出戏的机械音吗?🚫 顶伯正式接入微软 TTS 引擎,带来媲美真人的语音合成体验。无论你是短视频创作者、课程讲师&#x…...

斯年智驾IGV精准定位 赋能集装箱智慧港口升级

在集装箱港口智能化作业中,IGV运输车的定位精度直接决定码头转运效率、对接精准度与作业安全性。集装箱装卸、堆存、转运环节衔接紧密,毫米级的定位偏差,都可能造成箱体对接错位、装卸卡顿、物流链路停滞等问题,严重影响港口整体作…...

顶伯 + 微软 TTS 对比 Edge 浏览器自带 TTS,差距有多大?

付费 vs 免费:顶伯 微软 TTS 对比 Edge 浏览器自带 TTS,差距有多大?在文字转语音领域,微软 TTS 技术一直备受好评,但不同平台的实现方式却带来截然不同的体验。顶伯文字转语音工具深度整合了微软 TTS 引擎&#xff0c…...

忆往游戏平台官网:正版怀旧手游官方下载与资讯中心

忆往游戏平台(又称 “忆往怀旧手游”)是安徽游昕网络科技有限公司官方认证的正版怀旧手游聚合平台,专注经典端游 IP 正版复刻与发行,主打 “零魔改、纯复古、散人友好”,为 80、90 后玩家提供安全、纯净、高还原的怀旧…...

拒绝“人肉搬砖”!实测AI Agent如何重塑制造企业供应链自动管理

【摘要】 站在2026年5月的技术交汇点,全球制造业正经历从“自动化”向“智能化”的深度跃迁。面对制造企业供应链管理中长期存在的系统围墙、数据孤岛及信创适配难等沉疴顽疾,传统的RPA工具与API集成方案已显疲态。本期「企服AI产品测评局」深度实测发现…...

无人机地面站软件完全指南:Mission Planner 新手快速上手教程

无人机地面站软件完全指南:Mission Planner 新手快速上手教程 【免费下载链接】MissionPlanner Mission Planner Ground Control Station for ArduPilot (c# .net) 项目地址: https://gitcode.com/gh_mirrors/mi/MissionPlanner Mission Planner 是一款功能强…...

python flash加一个字段

USE product_db; ALTER TABLE products ADD COLUMN remark TEXT COMMENT 商品备注信息,支持长文本 AFTER cost_price;2. 修改数据访问层(product_dao.py)需要在以下函数中添加 remark 字段的处理:修改 get_all_products 函数&…...

UPS电源部分

1.法国最好的ups 施耐德电器 美国最好的ups 伊顿 瑞士最好的ups ABB 日本最好的ups 三菱电器 台湾是 台达电子 对的吗2.施耐德电气 (Schneider Electric):虽然公司总部在法国,但其UPS业务的核心是旗下的APC(美国电力转换公司&…...

让薪酬跟着人才走:国企核心人才激励保留的五个管理命题

当前,国有企业三项制度改革已进入攻坚深化期。劳动合同签订率、岗位说明书覆盖率、绩效考核实施率等量化指标普遍处于高位,制度框架的“四梁八柱”已基本确立。但在改革向纵深推进过程中,核心人才流失问题却时有发生。据调研反映,…...

华南x79-8d 支持 E5-2680 V3 或者 E5-2680 V4吗

不支持。 华南金牌 X79-8D 主板仅支持 E5-2600系列V1和V2版本的处理器,无法兼容您提到的 E5-2680 V3 或 V4。以下是关于该主板CPU支持情况的详细说明:💡 为什么不支持 V3/V4?根本原因在于CPU的接口和主板芯片组不匹配:…...

如何在Windows 10/11上完美使用PS3手柄:DsHidMini虚拟HID驱动终极指南

如何在Windows 10/11上完美使用PS3手柄:DsHidMini虚拟HID驱动终极指南 【免费下载链接】DsHidMini Virtual HID Mini-user-mode-driver for Sony DualShock 3 Controllers 项目地址: https://gitcode.com/gh_mirrors/ds/DsHidMini 你是否还在为Windows系统无…...

多卡训练加速:HCCL 集合通信实战

前言 单卡训练慢,多卡又踩坑——梯度同步怎么配、拓扑怎么选、带宽怎么压满,这些细节决定分布式训练能不能真正提速。 HCCL(Huawei Collective Communication Library)是昇腾的多卡通信库,对标 NVIDIA 的 NCCL。它封装…...