程序员必备!大模型智能体交接技术:LangGraph框架实战,小白也能秒会的AI协作秘籍!

一、基于 LangGraph 理解 LLM 智能体如何相互转移控制权

大语言模型(LLM)的推理能力结合记忆、规划和工具使用功能后,形成了所谓的智能体(Agent),这大幅扩展了 LLM 能够完成的任务范围。

然而,单个智能体也存在明显的局限性。当一个智能体配备了过多工具或处理过大的上下文时,往往会导致决策质量下降、响应效果不佳。

正因如此,多智能体系统开始流行起来,因为这类系统能够应对日益复杂的应用场景。

多智能体系统将众多专业化的智能体连接在一起协同工作,每个智能体专注于特定任务,系统则负责将查询路由到合适的专家那里。

客户支持场景下的多智能体系统示例

可以把这种架构想象成一个专家团队在协作,每个成员通过"分而治之"的方式贡献自己的专业技能。

本文将深入探讨多智能体系统中的一个核心概念:智能体之间如何转移控制权。

1. LangGraph 框架简介

这个之前写过相关基础教程的文章,不熟悉这个框架的小伙伴可以翻一番之前的内容

LangGraph 是一个开源的编排框架,用于构建有状态的、基于 LLM 的智能体系统,能够可靠地处理复杂任务。

该框架允许开发者将工作流设计为图结构,其中每个图由节点(代表任务或 LLM 调用)和边(代表控制流)组成。

LangGraph 成为构建智能体系统的首选框架,主要有以下几个优势:

  • 底层可控性强:提供对转换、状态和每个智能体执行过程的精确控制
  • 基于图的工作流透明直观:让复杂逻辑易于理解、设置和追踪
  • 灵活的非对话工作流:支持对话式智能体之外的编排方式(例如相比 AutoGen 等框架)

下图展示了一个用于检索增强生成(RAG)的图工作流设计:

用于检索增强生成的 LangGraph 图示例

2. 智能体交接的定义

首先需要理解什么是"交接"(handoff)。

智能体交接是指一个智能体在完成工作后,直接且动态地将控制权传递给另一个智能体的时刻。

这一机制至关重要,因为系统需要将任务路由到最适合提供上下文相关响应的智能体。

从技术角度看,交接发生在一个智能体将控制权、责任或对话上下文转移给另一个智能体,以确保交互的连续性和相关性。

下图展示了基于监督者模式的三智能体架构,其中中央智能体协调专业的工作智能体(研究智能体和文档编写智能体)。

在这种架构中,监督者与每个工作智能体之间可以双向交接。每个工作智能体通过集成特定工具集和定制化提示词来获得专业能力。

假设用户查询是"研究社交媒体使用如何影响青少年心理健康"。

监督者智能体在了解用户查询的性质以及可用的工作智能体后,会将任务交接给研究智能体来执行下一轮操作。

整个流程如下:

  1. 监督者智能体分析用户意图,判断需要研究智能体的协助
  2. 监督者将控制权(和状态*)传递给研究智能体
  3. 研究智能体执行任务,并决定是交接回监督者还是结束对话

*状态(State)是多智能体系统的短期记忆,捕获最近的对话和关键信息,使每个智能体能够基于先前的上下文和信息采取适当行动。

3. 示例场景

接下来通过一个具体示例来演示整个流程。

这里将构建一个能够回答新加坡房产相关查询的房地产助手,采用流行的监督者(supervisor)模式设计成三智能体系统。

在这个场景中,有一个房地产经理(监督者)可以调用两个专业工作智能体:

  • 房产信息智能体:处理房产详细信息相关的查询
  • 交易历史智能体:处理房产交易和市场趋势相关的查询

为简化演示,这里的路由是单向的,即工作智能体完成任务后对话即结束。

三智能体监督者架构的图示

为使协调机制正常工作,监督者智能体必须了解自己的角色、整体工作流程以及可调用的智能体。通过如下提示词实现:

SUPERVISOR_PROMPT = """你是新加坡的房地产监督者,负责将查询路由到专家或直接处理。可用的专家:- transaction_history_agent - 处理销售历史、市场趋势、过往交易- property_profile_agent - 处理房产详情、特征、位置信息你的任务:1. 确定应路由到哪个智能体(如果应该直接处理则选"none")2. 提取提到的任何房产名称(如"38 Oxley Road"、"One Oxley Rise")3. 如果无需路由,提供对话式响应对于销售/市场数据查询,路由到 transaction_history_agent。对于房产详情查询,路由到 property_profile_agent。对于问候、非房地产话题或不明确的查询,使用"none"(提供礼貌回应)。根据对话历史做出决策并提取房产名称。"""

注意提示词中明确定义了交接条件的指令。

监督者节点的条件路由代码如下:

defsupervisor_conditional_node(state: SupervisorState) -> dict: messages = state["messages"]# 用完整对话历史调用监督者 response = supervisor_llm.invoke([SystemMessage(content=SUPERVISOR_PROMPT)] + messages)return {"messages": [AIMessage(content=response.content, name="supervisor")]}

虽然多智能体系统可以遵循不同的设计模式并扩展到更多节点,但这个简单示例能让读者专注于智能体交接的核心概念。

下面的截图展示了房地产多智能体系统对用户查询的输出结果:

由于重点是智能体交接,这里不会详述完整的 LangGraph 设置代码(如提示词、节点、LLM 调用等)。完整实现代码可在 GitHub 仓库中查看。

4. LangGraph 中的交接机制

LangGraph 中有两种智能体交接机制:

  • Conditional Edges条件边
  • Command 对象

4.1 条件边(基于静态路由的交接)

条件边是传统的图路由方法,用于在智能体之间交接控制权。

在图中,节点执行工作,边决定下一步做什么。

边是决定路由逻辑(即下一个执行哪个节点)的函数。这种路由可以是直接的固定转换,也可以基于特定条件(即条件边)。

简单来说,条件边的流程如下:

  1. 节点生成输出
  2. 输出作为输入传递给条件边
  3. 条件边中的函数评估输出并选择下一个要运行的节点

房地产助手示例场景中的条件边

在 LangGraph 中,通过在 StateGraph 实例上调用add_conditional_edges来定义条件边:

graph.add_conditional_edges(source="start_node", path=routing_function)
  • source参数指定起始节点,表示该节点完成后条件路由开始生效
  • path参数接收条件函数,其返回值控制图接下来移动到哪个节点

先来看房地产示例中的路由函数should_continue

defshould_continue( state: SupervisorState,) -> Literal["transaction_history_agent", "property_profile_agent", "end"]:"""从监督者消息中提取路由决策。 在监督者的最新消息中查找智能体名称以确定路由。 如果监督者提供直接响应(无需路由)则返回"end"。 """# 查找最新的监督者消息for msg inreversed(state["messages"]):if (isinstance(msg, AIMessage)andhasattr(msg, "name")and msg.name == "supervisor" ): content = msg.content.strip().lower()# 检查内容中是否有智能体名称if"transaction_history_agent"in content:return"transaction_history_agent"elif"property_profile_agent"in content:return"property_profile_agent"return"end"# 未找到智能体名称 - 监督者直接处理return"end"

路由函数的工作流程:

  1. 读取监督者的最新响应并决定下一步操作
  2. 检查监督者是否明确要求将任务交接给两个工作智能体之一
  3. 当监督者指定某个工作智能体时,函数返回该智能体的名称字符串,触发向该智能体的交接
  4. 如果监督者未请求任何工作智能体,函数返回 “end”,表示监督者已完成响应,工作流结束

设置好路由函数后,接下来定义条件边:

graph.add_conditional_edges( source="supervisor", path=should_continue, path_map={"transaction_history_agent": "transaction_history_agent","property_profile_agent": "property_profile_agent","end": END, },)
  • supervisor节点作为流程的源入口点,首先接收并分析用户查询
  • 监督者完成处理后,路由函数should_continue开始工作,检查监督者的响应以确定交接决策
  • path_map字典将路由函数的返回值转换为图目标。这是必需的,因为should_continue可能返回 “end”,path_map会将其转换为END(LangGraph 的停止信号)

以上内容展示了智能体交接的工作原理:监督者输出特定字符串,条件函数使用这些字符串来路由到下一个智能体或终止流程。

4.2 Command 对象(动态交接)

条件边适用于简单、可预测的流程,但一旦逻辑变得复杂,组合多个条件边会变得繁琐且不直观。

为了让多智能体工作流更灵活、更易于设计,引入了 Command 类型来结合状态更新和控制流。

Command 简化了操作方式,允许节点返回一个 Command 对象,该对象既能更新图状态,又能指定下一个要执行的节点。

节点不再依赖预定义的边,而是可以在运行时根据自身逻辑直接动态确定下一步。

这使得"无边图"成为可能,路由逻辑存在于智能体内部而非混乱的条件规则中,从而以更清晰、更灵活的方式编排交接。

以下是在路由节点中使用 Command 的最小代码示例:

defrouter(state):# 从当前图状态读取用户意图 user_intent = state.get("intent")# 基于简单逻辑决定下一个调用哪个智能体# 这展示了如何选择目标节点if user_intent == "search":return Command( update={"task": "run_search"}, # 更新部分状态 goto="search_agent"# 显式路由到此节点 )else:return Command( update={"task": "create_summary"}, goto="summary_agent" )

在上述代码中,路由智能体节点读取状态、决定接下来应该运行什么,并返回一个 Command 对象来更新图状态并指向下一个节点。

由于节点通过goto参数选择下一步,因此无需使用add_conditional_edges定义条件边。

Command 让交接逻辑存在于节点而非边中。因此,监督者节点的代码会更长:

defsupervisor_command_node( state: SupervisorState,) -> Command[Literal["transaction_history_agent", "property_profile_agent"]]:"""使用 Command 进行路由 + 状态更新的监督者节点。 使用结构化输出来: 1. 确定路由到哪个智能体 2. 从查询中提取 property_name 3. 通过 Command.update 更新状态 这展示了 Command 的强大之处:在一个函数中完成路由 + 状态更新。 """ messages = state["messages"]# 从监督者 LLM 获取结构化决策 llm_with_structure = supervisor_llm.with_structured_output(SupervisorDecision) decision: SupervisorDecision = llm_with_structure.invoke( [SystemMessage(content=SUPERVISOR_PROMPT)] + messages )# 如果无需路由,监督者直接处理if decision.next_agent == "none":return Command[str]( goto="__end__", update={"messages": [AIMessage(content=decision.response, name="supervisor")]}, )# 构建包含提取上下文的状态更新字典 update_dict = {"messages": [AIMessage(content=f"Routing to {decision.next_agent}", name="supervisor")]}if decision.property_name: update_dict["property_name"] = decision.property_namereturn Command(goto=decision.next_agent, update=update_dict)

工作流程如下:

  1. 监督者节点调用 LLM 返回SupervisorDecision结构化输出对象,包含两个关键信息:要交接给哪个智能体,以及相关上下文(如从用户消息中提取的房产名称)
  2. 如果不需要工作智能体,监督者直接响应。节点返回一个 Command,用响应更新消息并结束图
  3. 如果需要交接,节点构建更新字典。包含来自监督者的路由消息和提取的上下文(如房产名称)到图状态中,以便下一个智能体可以立即使用
  4. 最后,节点返回一个 Command,使用goto指定下一个智能体,并应用状态更新(即更新property_name

Literal["transaction_history_agent", "property_profile_agent"]类型提示让系统即使在未显式定义边的情况下也能生成完整的 Mermaid 图。实际的交接流程由goto参数处理。

使用Command但仍显示边的房地产多智能体系统

使用 Command 后,节点直接决定接下来运行哪个智能体以及传递什么信息。这消除了独立的路由规则,保持交接逻辑的简洁。

4.3 何时使用条件边还是 Command?

在交接场景下选择条件边还是 Command 的指导原则:

使用条件边的情况:

  • 只需要基于当前图状态决定运行哪个节点,而不改变状态

使用 Command 的情况:

  • 节点需要同时修改状态并确定下一个节点
  • 这在多智能体交接中很有用,因为路由到另一个智能体通常需要传递一些信息给该智能体

在实际工作中,作者已经基本转向使用 Command 而非条件边,因为许多多智能体系统需要在路由决策的同时协调图状态更新。

学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%免费

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1164796.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PERT 图(Program Evaluation and Review Technique)是一种项目管理工具,用于规划、调度和控制复杂项目的任务流程

PERT 图(Program Evaluation and Review Technique)是一种项目管理工具,用于规划、调度和控制复杂项目的任务流程。其核心概念与应用如下:松弛时间(Slack Time):指在不影响整个项目完成时间的前…

免费AI论文神器实操指南:6款工具一键生成初稿,AIGC率低至5%

作为一名研究生,你是否曾在论文写作时遇到这些痛点? 对着空白文档发呆3小时,连大纲都列不出来?导师批注密密麻麻,却不知道从哪改起?查重报告红一片,降重改到怀疑人生?问卷数据处理、…

YOLOv8 融合多尺度扩张注意力机制(MSDA):实现长距离特征捕获性能提升40%的实战指南

文章目录 【毕设级项目】YOLOv8+多尺度扩张注意力(MSDA):长距离特征捕获能力提升40%的实战教程 一、项目核心:什么是MSDA注意力? 二、环境准备:5分钟配置依赖 三、步骤1:编写MSDA注意力模块(dilateformer.py) 四、步骤2:注册MSDA模块(修改tasks.py) 五、步骤3:编写…

H-S FPN优化版YOLOv8 Neck模块(轻量化高精度特征融合方案)

文章目录 研发实战:基于H-S FPN的YOLOv8 Neck模块优化(超轻量高精度特征融合方案) 一、技术背景与方案价值 二、环境搭建与依赖配置 2.1 虚拟环境创建 2.2 数据集准备 三、H-S FPN模块的代码实现 3.1 分层特征选择(H-S)核心组件 3.2 H-S FPN的Neck结构实现 3.3 替换YOLOv8…

【程序员必看】Function Calling+RL+Agent,让大模型从“嘴炮王者“变“实干家“!小白也能肝出超级智能体!

核心概念总览:Agent | Function Calling | RL 核心理念 Agent Function Calling RL 让AI从"会说话"变成"会办事、会学习"的完整体系。 1.1 以前的 AI:只能"聊天" 以前的大模型(比如早期的 ChatGPT&…

COCOMO II 模型和 Putnam 模型是软件项目估算中广泛使用的定量方法,用于预测软件开发的工作量、成本与进度

COCOMO II 模型和 Putnam 模型是软件项目估算中广泛使用的定量方法,用于预测软件开发的工作量、成本与进度。 (1)COCOMO II 模型的阶段划分 COCOMO II 是构造性成本模型(Constructive Cost Model)的改进版本&#xff0…

重新定义测试边界:N5181A信号发生器,何以成为射频领域的性能标杆?

156/2558/3328产品概述:在无线通信、航空航天、国防科研等尖端领域,每一次技术突破的背后,都离不开高精度、高性能测试设备的强力支撑。信号的纯净度、稳定性和调制精度,直接决定着研发的成败与产品的性能天花板。在众多测试仪器中…

基于Slim-Neck的YOLOv8轻量化特征融合方案(超轻量+高精度双突破)

文章目录 研发实战:基于Slim-Neck的YOLOv8轻量化特征融合方案(超轻量+高精度双突破) 一、技术背景与方案价值 二、环境搭建与依赖配置 2.1 虚拟环境创建 2.2 数据集准备 三、Slim-Neck核心模块实现 3.1 分组稀疏卷积(GSCConv) 3.2 轻量化特征融合(BiFPN) 3.3 Slim-Neck整…

十家知名降重平台通过AI智能改写技术优化文本,提供免费试用,显著提升文本质量

排名 工具名称 降重效率 特色功能 适用场景 免费额度 1 aibiye ⭐⭐⭐⭐⭐ AIGC查重降重双功能 学术论文深度优化 首次免费检测 2 aicheck ⭐⭐⭐⭐ 多维度重复率分析 日常作业/论文初稿 每日3000字免费 3 笔启AI ⭐⭐⭐⭐ 长文记忆多语种支持 硕博论文/…

YOLOv8+BiFPN双向特征金字塔:多尺度目标检测精度提升28%的实战教程

文章目录 【研发级项目】YOLOv8+BiFPN双向特征金字塔:多尺度目标检测精度提升28%的实战教程 一、项目核心:什么是BiFPN? 二、环境准备:5分钟配置依赖 三、步骤1:编写BiFPN模块(bifpn.py) 四、步骤2:注册BiFPN模块(修改tasks.py) 五、步骤3:编写YOLOv8+BiFPN的配置文…

*固定交付日期型**:最终交付日期已明确,开发团队必须在既定截止日期前完成所有工作

一、进度安排的两种方式 固定交付日期型:最终交付日期已明确,开发团队必须在既定截止日期前完成所有工作。此类项目通常由外部客户或市场窗口决定时间点,进度安排需倒排工期,强调严格的时间控制与资源调配。弹性交付日期型&#x…

导师严选2026 AI论文软件TOP10:MBA毕业论文写作全攻略

导师严选2026 AI论文软件TOP10:MBA毕业论文写作全攻略 2026年MBA论文写作工具测评:如何选对AI助手提升效率 MBA学员在撰写毕业论文时,常常面临选题方向不明确、文献资料繁杂、逻辑结构不清等问题,而AI论文软件的出现为这一过程提供…

YOLOv8 从入门到精通:模型加载与性能优化全流程实战指南

文章目录 【毕设实战】YOLOv8基础到进阶:从模型加载到性能优化的全流程项目教程 引读:这个项目能帮你解决什么? 一、快速入门:10分钟跑通YOLOv8基础流程 1. 模型加载与预训练权重使用 2. 自定义数据集配置 3. 一键启动训练 二、核心操作:训练后验证与推理 1. 模型验证(获…

C语言 作业3

摘要:本文包含多个C语言编程问题及解法:1) 数组越界导致死循环;2) 汽水兑换问题(20元可换39瓶);3) 打印菱形图案;4) 计算数字序列前5项和(如222222...);5) 递…

YOLOv8 结合多尺度扩张注意力机制(MSDA):显著提升40%长距离特征捕获能力的实践指南

文章目录 【毕设级项目】YOLOv8+多尺度扩张注意力(MSDA):长距离特征捕获能力提升40%的实战教程 一、项目核心:什么是MSDA注意力? 二、环境准备:5分钟配置依赖 三、步骤1:编写MSDA注意力模块(dilateformer.py) 四、步骤2:注册MSDA模块(修改tasks.py) 五、步骤3:编写…

[Jetson/Ubuntu 22.04] 解决挂载 exFAT 硬盘报错 “unknown filesystem type“ 及只读权限问题的终极指南

1. 问题背景在 NVIDIA Jetson AGX Orin (JetPack 6.1 / Ubuntu 22.04) 环境下,插入 exFAT 格式的移动硬盘时,系统未自动挂载。尝试手动挂载时,主要遇到了以下两个阻碍:驱动报错:使用普通挂载命令时提示文件系统类型未知…

YOLOv8+多尺度扩张注意力(MSDA):长距离特征捕获能力提升40%的实战教程

文章目录 【毕设级项目】YOLOv8+多尺度扩张注意力(MSDA):长距离特征捕获能力提升40%的实战教程 一、项目核心:什么是MSDA注意力? 二、环境准备:5分钟配置依赖 三、步骤1:编写MSDA注意力模块(dilateformer.py) 四、步骤2:注册MSDA模块(修改tasks.py) 五、步骤3:编写…

十大降重平台均配备AI智能改写系统,支持免费试用,实现文本优化效果最大化

排名 工具名称 降重效率 特色功能 适用场景 免费额度 1 aibiye ⭐⭐⭐⭐⭐ AIGC查重降重双功能 学术论文深度优化 首次免费检测 2 aicheck ⭐⭐⭐⭐ 多维度重复率分析 日常作业/论文初稿 每日3000字免费 3 笔启AI ⭐⭐⭐⭐ 长文记忆多语种支持 硕博论文/…

django-flask基于python的成都市小升初推荐平台

目录成都市小升初推荐平台(基于Django/Flask)关于博主开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!成都市小升初推荐平台(基于Django/Flask&#xff09…

django-flask基于python的毕业设计选题分配系统设计与实现

目录摘要关于博主开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!摘要 随着高校教育规模的扩大,毕业设计选题管理成为教学管理中的重要环节。传统的手工分配方式效率低下&#x…