1核1g可以做几个网站宁波企业如何建网站
2026/6/28 10:55:26 网站建设 项目流程
1核1g可以做几个网站,宁波企业如何建网站,设计外网,手机网站后台怎么进项目地址#xff1a;https://github.com/kennethleungty/Handoffs-in-LangGraph-Multi-Agent-Systems基于 LangGraph 理解 LLM 智能体如何相互转移控制权大语言模型#xff08;LLM#xff09;的推理能力结合记忆、规划和工具使用功能后#xff0c;形成了所谓的智能体#…项目地址https://github.com/kennethleungty/Handoffs-in-LangGraph-Multi-Agent-Systems基于 LangGraph 理解 LLM 智能体如何相互转移控制权大语言模型LLM的推理能力结合记忆、规划和工具使用功能后形成了所谓的智能体Agent这大幅扩展了 LLM 能够完成的任务范围。然而单个智能体也存在明显的局限性。当一个智能体配备了过多工具或处理过大的上下文时往往会导致决策质量下降、响应效果不佳。正因如此,多智能体系统开始流行起来,因为这类系统能够应对日益复杂的应用场景。多智能体系统将众多专业化的智能体连接在一起协同工作,每个智能体专注于特定任务,系统则负责将查询路由到合适的专家那里。客户支持场景下的多智能体系统示例可以把这种架构想象成一个专家团队在协作,每个成员通过分而治之的方式贡献自己的专业技能。本文将深入探讨多智能体系统中的一个核心概念智能体之间如何转移控制权。目录LangGraph 框架简介智能体交接的定义示例场景LangGraph 中的交接机制1. LangGraph 框架简介这个之前写过相关基础教程的文章不熟悉这个框架的小伙伴可以翻一番之前的内容LangGraph 是一个开源的编排框架,用于构建有状态的、基于 LLM 的智能体系统,能够可靠地处理复杂任务。该框架允许开发者将工作流设计为图结构,其中每个图由节点代表任务或 LLM 调用和边代表控制流组成。LangGraph 成为构建智能体系统的首选框架,主要有以下几个优势底层可控性强提供对转换、状态和每个智能体执行过程的精确控制基于图的工作流透明直观让复杂逻辑易于理解、设置和追踪灵活的非对话工作流支持对话式智能体之外的编排方式例如相比 AutoGen 等框架下图展示了一个用于检索增强生成RAG的图工作流设计*用于检索增强生成的 LangGraph 图示例 *2. 智能体交接的定义首先需要理解什么是交接handoff。智能体交接是指一个智能体在完成工作后,直接且动态地将控制权传递给另一个智能体的时刻。这一机制至关重要,因为系统需要将任务路由到最适合提供上下文相关响应的智能体。从技术角度看,交接发生在一个智能体将控制权、责任或对话上下文转移给另一个智能体,以确保交互的连续性和相关性。下图展示了基于监督者模式的三智能体架构,其中中央智能体协调专业的工作智能体研究智能体和文档编写智能体。在这种架构中,监督者与每个工作智能体之间可以双向交接。每个工作智能体通过集成特定工具集和定制化提示词来获得专业能力。假设用户查询是研究社交媒体使用如何影响青少年心理健康。监督者智能体在了解用户查询的性质以及可用的工作智能体后,会将任务交接给研究智能体来执行下一轮操作。整个流程如下监督者智能体分析用户意图,判断需要研究智能体的协助监督者将控制权和状态*传递给研究智能体研究智能体执行任务,并决定是交接回监督者还是结束对话*状态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:messagesstate[messages]# 用完整对话历史调用监督者responsesupervisor_llm.invoke([SystemMessage(contentSUPERVISOR_PROMPT)]messages)return{messages:[AIMessage(contentresponse.content,namesupervisor)]}虽然多智能体系统可以遵循不同的设计模式并扩展到更多节点,但这个简单示例能让读者专注于智能体交接的核心概念。下面的截图展示了房地产多智能体系统对用户查询的输出结果由于重点是智能体交接,这里不会详述完整的 LangGraph 设置代码如提示词、节点、LLM 调用等。完整实现代码可在 GitHub 仓库中查看。4. LangGraph 中的交接机制LangGraph 中有两种智能体交接机制Conditional Edges条件边Command 对象4.1 条件边基于静态路由的交接条件边是传统的图路由方法,用于在智能体之间交接控制权。在图中,节点执行工作,边决定下一步做什么。边是决定路由逻辑即下一个执行哪个节点的函数。这种路由可以是直接的固定转换,也可以基于特定条件即条件边。简单来说,条件边的流程如下节点生成输出输出作为输入传递给条件边条件边中的函数评估输出并选择下一个要运行的节点房地产助手示例场景中的条件边在 LangGraph 中,通过在 StateGraph 实例上调用add_conditional_edges来定义条件边graph.add_conditional_edges(sourcestart_node,pathrouting_function)source参数指定起始节点,表示该节点完成后条件路由开始生效path参数接收条件函数,其返回值控制图接下来移动到哪个节点先来看房地产示例中的路由函数should_continuedefshould_continue(state:SupervisorState,)-Literal[transaction_history_agent,property_profile_agent,end]:从监督者消息中提取路由决策。 在监督者的最新消息中查找智能体名称以确定路由。 如果监督者提供直接响应无需路由则返回end。 # 查找最新的监督者消息formsginreversed(state[messages]):if(isinstance(msg,AIMessage)andhasattr(msg,name)andmsg.namesupervisor):contentmsg.content.strip().lower()# 检查内容中是否有智能体名称iftransaction_history_agentincontent:returntransaction_history_agentelifproperty_profile_agentincontent:returnproperty_profile_agentreturnend# 未找到智能体名称 - 监督者直接处理returnend路由函数的工作流程读取监督者的最新响应并决定下一步操作检查监督者是否明确要求将任务交接给两个工作智能体之一当监督者指定某个工作智能体时,函数返回该智能体的名称字符串,触发向该智能体的交接如果监督者未请求任何工作智能体,函数返回 “end”,表示监督者已完成响应,工作流结束设置好路由函数后,接下来定义条件边graph.add_conditional_edges(sourcesupervisor,pathshould_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会将其转换为ENDLangGraph 的停止信号以上内容展示了智能体交接的工作原理监督者输出特定字符串,条件函数使用这些字符串来路由到下一个智能体或终止流程。4.2 Command 对象动态交接条件边适用于简单、可预测的流程,但一旦逻辑变得复杂,组合多个条件边会变得繁琐且不直观。为了让多智能体工作流更灵活、更易于设计,引入了 Command 类型来结合状态更新和控制流。Command 简化了操作方式,允许节点返回一个 Command 对象,该对象既能更新图状态,又能指定下一个要执行的节点。节点不再依赖预定义的边,而是可以在运行时根据自身逻辑直接动态确定下一步。这使得无边图成为可能,路由逻辑存在于智能体内部而非混乱的条件规则中,从而以更清晰、更灵活的方式编排交接。以下是在路由节点中使用 Command 的最小代码示例defrouter(state):# 从当前图状态读取用户意图user_intentstate.get(intent)# 基于简单逻辑决定下一个调用哪个智能体# 这展示了如何选择目标节点ifuser_intentsearch:returnCommand(update{task:run_search},# 更新部分状态gotosearch_agent# 显式路由到此节点)else:returnCommand(update{task:create_summary},gotosummary_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 的强大之处在一个函数中完成路由 状态更新。 messagesstate[messages]# 从监督者 LLM 获取结构化决策llm_with_structuresupervisor_llm.with_structured_output(SupervisorDecision)decision:SupervisorDecisionllm_with_structure.invoke([SystemMessage(contentSUPERVISOR_PROMPT)]messages)# 如果无需路由,监督者直接处理ifdecision.next_agentnone:returnCommand[str](goto__end__,update{messages:[AIMessage(contentdecision.response,namesupervisor)]},)# 构建包含提取上下文的状态更新字典update_dict{messages:[AIMessage(contentfRouting to{decision.next_agent},namesupervisor)]}ifdecision.property_name:update_dict[property_name]decision.property_namereturnCommand(gotodecision.next_agent,updateupdate_dict)工作流程如下监督者节点调用 LLM 返回SupervisorDecision结构化输出对象,包含两个关键信息要交接给哪个智能体,以及相关上下文如从用户消息中提取的房产名称如果不需要工作智能体,监督者直接响应。节点返回一个 Command,用响应更新消息并结束图如果需要交接,节点构建更新字典。包含来自监督者的路由消息和提取的上下文如房产名称到图状态中,以便下一个智能体可以立即使用最后,节点返回一个 Command,使用goto指定下一个智能体,并应用状态更新即更新property_nameLiteral[transaction_history_agent, property_profile_agent]类型提示让系统即使在未显式定义边的情况下也能生成完整的 Mermaid 图。实际的交接流程由goto参数处理。使用Command但仍显示边的房地产多智能体系统使用 Command 后,节点直接决定接下来运行哪个智能体以及传递什么信息。这消除了独立的路由规则,保持交接逻辑的简洁。4.3 何时使用条件边还是 Command在交接场景下选择条件边还是 Command 的指导原则使用条件边的情况只需要基于当前图状态决定运行哪个节点,而不改变状态使用 Command 的情况节点需要同时修改状态并确定下一个节点这在多智能体交接中很有用,因为路由到另一个智能体通常需要传递一些信息给该智能体在实际工作中,作者已经基本转向使用 Command 而非条件边,因为许多多智能体系统需要在路由决策的同时协调图状态更新。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询