2026/4/18 0:48:24
网站建设
项目流程
南昌哪里做网站比较好,济南 网站建设 域名注册,云开发布道师,电脑版浏览器入口官网本文深入探讨了多智能体系统在大模型中的应用#xff0c;详细分析了单智能体与多智能体架构的适用场景#xff0c;并系统介绍了并行、顺序、循环、路由器等多种多智能体工作模式。文章重点阐述了智能体间的通信机制#xff0c;包括图状态共享、工具调用和消息列表等实现方式…本文深入探讨了多智能体系统在大模型中的应用详细分析了单智能体与多智能体架构的适用场景并系统介绍了并行、顺序、循环、路由器等多种多智能体工作模式。文章重点阐述了智能体间的通信机制包括图状态共享、工具调用和消息列表等实现方式为构建高效协同的多智能体LLM系统提供了全面的技术指导和实践参考。一、引言在 Agent 系统的构建过程中随着系统演进其复杂度往往持续攀升进而显著增加管理与扩展的难度。典型挑战包括工具调用数量激增致使选择机制的错误率显著上升上下文信息高度膨胀单个代理已难以有效处理系统需协同多个专业角色如规划师、研究员、数学专家等以完成任务。针对上述瓶颈一种可行路径是将单一智能体解构为若干轻量级、独立的子代理并通过协同机制构建多智能体架构。这些子代理的复杂度可灵活配置——既可简化为基础的提示词与 LLM 调用亦可延伸至 ReAct 代理级别甚至超越其复杂度。随着智能体框架的持续演进越来越多企业着手构建专属的多智能体系统力图打造一种可通解各类智能体任务的终极方案。早在两年前研究团队便推出了一款名为 ChatDev 的多智能体协作架构。该系统宛如一家全虚拟的软件企业由多个功能各异的智能体协同运转——它们分别担纲首席执行官、首席产品官、美术设计师、程序员、审校员、测试员等职位其组织形态与现实中的软件工程公司如出一辙。这些智能体通过协同运作与持续沟通最终合力打造出一款电子游戏。这一成果促使诸多人坚信任何软件工程任务皆可借助此类多智能体架构实现——每个AI均承担专属职能。然而现实世界的实践验证显示并非所有问题都适配这种架构。在部分场景下更为简洁的系统设计反而能带来更高效率与更低成本的解决方案。1.1 单智能体架构与多智能体架构单智能体方案在初期往往显得切实可行例如单一智能体即可统筹浏览器浏览与文件管理等全部操作。然而当任务复杂度持续攀升、可用工具数量不断膨胀时这种单一架构便逐渐力不从心。二、Multi-agent架构单智能体架构与多智能体架构各具优势与局限。在任务清晰、边界明确且资源充裕的场景下单智能体架构最为适配而在面对复杂多变的用例、亟需专业分工与协同配合或对系统可扩展性与动态适应性提出更高要求时多智能体架构则展现出更强的适用性。2.1 Multi-agent系统中的模式在多智能体系统中连接各个智能体有多种方法2.1.1 并行多个智能体同时处理任务的不同部分。例如 我们希望使用 3 个代理同时对给定文本进行总结 、 翻译和情感分析 。2.1.2 顺序任务按顺序处理一个代理的输出成为下一个代理的输入。例如 多步骤审批。2.1.3 循环智能体以迭代循环的方式运行根据其他智能体的反馈不断改进其输出。例如 评估用例如代码编写和代码测试。2.1.4 路由器中央路由器根据任务或输入确定要调用哪个代理。示例 客户支持工单路由2.1.5 聚合器或合成器收集各个智能体的贡献输出并综合这些输出形成最终结果。例如 社交媒体情感分析聚合器2.1.6 网络或水平智能体之间以多对多的方式直接通信形成去中心化网络。这种架构专为缺乏明确代理层级或固定调用序列的场景而设计。优点依托分布式协作与群体驱动的决策机制即便部分智能体发生失效整体系统仍可维持稳定运行。缺点智能体间通信的协调难度显著提升高频交互易引发效率损耗并可能造成任务冗余与重复执行。2.1.7 交接在多智能体架构中智能体可被建模为图中的节点。每个节点完成自身的任务后自主判断是终止执行还是将控制权转发至其他智能体——包括自身如形成循环流程。其中交接是多智能体系统中典型的交互范式指一个智能体将执行主导权转移给另一个智能体。通过交接可明确配置目标待转向的目标智能体如目标节点的标识有效载荷需传递至目标智能体的上下文数据如状态变更信息。为了在 LangGraph 中实现切换agent节点可以返回 Command 对象该对象允许您将控制流和状态更新结合起来def agent(state) - Command[Literal[agent, another_agent]]: # the condition for routing/halting can be anything, e.g. LLM tool call / structured output, etc. goto get_next_agent(...) # agent / another_agent return Command( # Specify which agent to call next gotogoto, # Update the graph state update{my_state_key: my_state_value} )在更复杂的架构中若每个 agent 节点自身构成一个子图则子图内部的节点可能需跨代理边界进行导航。以 alice 与 bob 为例二者均为父图中的子图节点当 alice 需访问 bob 时可通过在 Command 对象中指定 graphCommand.PARENT 来实现该跨图跳转。如果您需要支持使用 Command(graphCommand.PARENT) 进行通信的子图的可视化则需要将它们包装在带有 Command 注解的节点函数中例如而不是这样交接作为一种工具最常见的agent类型之一是 ReAct 风格的工具调用agent。对于这类agent常见的模式是将交接操作封装在工具调用中例如这是工具更新图状态中的一种特殊情形不仅涉及状态的变更还嵌入了控制流逻辑。若你的工具会返回 Command 对象可选用预构建的 create_react_agent / ToolNode 组件亦可自行构建工具执行节点——该节点负责聚合工具返回的 Command 实例并输出一个包含这些对象的列表例如def call_tools(state): ... commands [tools_by_name[tool_call[name]].invoke(tool_call) for tool_call in tool_calls] return commands现在让我们仔细看看不同的多智能体架构。2.1.8 主管在这个架构中agents 被建模为节点同时引入一个LLM监管节点负责判定下一阶段应激活的agents节点。通过Command机制依据该监管节点的指令将执行流精准路由至目标agents节点。此设计天然支持agents的并行执行亦可高效适配MapReduce模式。from typing import Literal from langchain_openai import ChatOpenAI from langgraph.graph import StateGraph, MessagesState, START, END model ChatOpenAI() def supervisor(state: MessagesState) - Command[Literal[agent_1, agent_2, END]]: # you can pass relevant parts of the state to the LLM (e.g., state[messages]) # to determine which agent to call next. a common pattern is to call the model # with a structured output (e.g. force it to return an output with a next_agent field) response model.invoke(...) # route to one of the agents or exit based on the supervisors decision # if the supervisor returns __end__, the graph will finish execution return Command(gotoresponse[next_agent]) def agent_1(state: MessagesState) - Command[Literal[supervisor]]: # you can pass relevant parts of the state to the LLM (e.g., state[messages]) # and add any additional logic (different models, custom prompts, structured output, etc.) response model.invoke(...) return Command( gotosupervisor, update{messages: [response]}, ) def agent_2(state: MessagesState) - Command[Literal[supervisor]]: response model.invoke(...) return Command( gotosupervisor, update{messages: [response]}, ) builder StateGraph(MessagesState) builder.add_node(supervisor) builder.add_node(agent_1) builder.add_node(agent_2) builder.add_edge(START, supervisor) supervisor builder.compile()2.1.9 主管工具调用在这种监管架构下我们把各个智能体视为工具并在监管节点中部署具备工具调用能力的 LLM。该架构可构建为一个 ReAct 风格的代理由两个核心节点组成一个 LLM 节点即监管节点与一个负责工具调用的执行节点本例中为代理。from typing import Annotated from langchain_openai import ChatOpenAI from langgraph.prebuilt import InjectedState, create_react_agent model ChatOpenAI() # this is the agent function that will be called as tool # notice that you can pass the state to the tool via InjectedState annotation def agent_1(state: Annotated[dict, InjectedState]): # you can pass relevant parts of the state to the LLM (e.g., state[messages]) # and add any additional logic (different models, custom prompts, structured output, etc.) response model.invoke(...) # return the LLM response as a string (expected tool response format) # this will be automatically turned to ToolMessage # by the prebuilt create_react_agent (supervisor) return response.content def agent_2(state: Annotated[dict, InjectedState]): response model.invoke(...) return response.content tools [agent_1, agent_2] # the simplest way to build a supervisor w/ tool-calling is to use prebuilt ReAct agent graph # that consists of a tool-calling LLM node (i.e. supervisor) and a tool-executing node supervisor create_react_agent(model, tools)2.1.10 层级式或垂直式Agents以树状结构组织其中高级代理主管代理管理低级代理。随着系统中智能体数量的增长主管智能体在协调全部智能体时可能面临能力瓶颈。它在决策下一个被调用的智能体时易出现判断偏差同时上下文信息的膨胀使其难以有效追踪整体状态。换言之这正是多智能体架构中固有的管理困境。针对这一挑战可引入层级化系统架构将智能体划分为多个由专属主管负责的、功能专一的代理团队并由一个顶层主管统一协调各团队的运作。from typing import Literal from langchain_openai import ChatOpenAI from langgraph.graph import StateGraph, MessagesState, START, END from langgraph.types import Command model ChatOpenAI() # define team 1 (same as the single supervisor example above) def team_1_supervisor(state: MessagesState) - Command[Literal[team_1_agent_1, team_1_agent_2, END]]: response model.invoke(...) return Command(gotoresponse[next_agent]) def team_1_agent_1(state: MessagesState) - Command[Literal[team_1_supervisor]]: response model.invoke(...) return Command(gototeam_1_supervisor, update{messages: [response]}) def team_1_agent_2(state: MessagesState) - Command[Literal[team_1_supervisor]]: response model.invoke(...) return Command(gototeam_1_supervisor, update{messages: [response]}) team_1_builder StateGraph(Team1State) team_1_builder.add_node(team_1_supervisor) team_1_builder.add_node(team_1_agent_1) team_1_builder.add_node(team_1_agent_2) team_1_builder.add_edge(START, team_1_supervisor) team_1_graph team_1_builder.compile() # define team 2 (same as the single supervisor example above) class Team2State(MessagesState): next: Literal[team_2_agent_1, team_2_agent_2, __end__] def team_2_supervisor(state: Team2State): ... def team_2_agent_1(state: Team2State): ... def team_2_agent_2(state: Team2State): ... team_2_builder StateGraph(Team2State) ... team_2_graph team_2_builder.compile() # define top-level supervisor builder StateGraph(MessagesState) def top_level_supervisor(state: MessagesState) - Command[Literal[team_1_graph, team_2_graph, END]]: # you can pass relevant parts of the state to the LLM (e.g., state[messages]) # to determine which team to call next. a common pattern is to call the model # with a structured output (e.g. force it to return an output with a next_team field) response model.invoke(...) # route to one of the teams or exit based on the supervisors decision # if the supervisor returns __end__, the graph will finish execution return Command(gotoresponse[next_team]) builder StateGraph(MessagesState) builder.add_node(top_level_supervisor) builder.add_node(team_1_graph, team_1_graph) builder.add_node(team_2_graph, team_2_graph) builder.add_edge(START, top_level_supervisor) builder.add_edge(team_1_graph, top_level_supervisor) builder.add_edge(team_2_graph, top_level_supervisor) graph builder.compile()优点各层级 agent 的角色定位与职责边界明确。交互路径简洁通信效率高。天然适配具备标准化决策链路的规模化系统。缺点核心层节点失效易引发系统级崩溃。基层 agent 的自主决策能力受到显著约束。2.1.11 自定义多代理工作流程每个智能体仅与部分其他智能体进行通信其中部分通信路径是预设固定的另一部分则由智能体自主决策后续调用对象。在此架构中各智能体被建模为图中的节点并预先设定其在定制工作流中的执行序列。在 LangGraph 中工作流的定义方式主要有两类显式控制流普通边LangGraph 利用标准图边明确刻画应用程序的控制流向即智能体间的调用次序该模式代表了上述架构中确定性最强的形式——系统在运行前即可精确预知下一被调用的智能体。动态控制流命令LangGraph 支持通过 Command 实现 LLM 对应用部分流程的动态调控其中一种典型情形为监督工具调用架构。在此模式下负责驱动工具调用的 LLM 监督智能体将实时决定后续调用哪些工具即智能体。三、Agent之间通信构建多智能体系统时核心在于明确智能体间的通信机制这主要涵盖以下三个关键点智能体是依赖图状态通信还是通过工具调用来交互当两个智能体的状态模式不一致时系统将如何应对共享邮件列表能否作为有效的跨智能体沟通渠道3.1 图状态与工具调用智能体之间传递的“有效载荷”指什么在多数架构中智能体以图状态为通信媒介。对具备工具调用能力的监管者而言该有效载荷即为工具调用参数。图状态为了实现基于图状态的通信机制需将各智能体建模为图中的节点这些节点既可封装为独立函数也可嵌入为完整的子图结构。在图的每一轮执行过程中智能体节点会接收当前图状态运行其内部逻辑代码并将处理后的新状态传递至下游节点。例如在社交媒体聚合器的实现中图状态被定义为通常情况下智能体节点共享同一个状态模式 。但是您可能希望设计具有不同状态模式的智能体节点。3.2 不同的状态模式在 LangGraph 中若智能体需具备区别于其他智能体的状态模式可采用以下两种策略为子智能体设定专属状态模式当子图与父图之间不存在共享的状态键通道时需显式配置输入/输出转换逻辑以确保父图能正确与子图进行交互为智能体节点函数指定私有输入状态模式该模式独立于全局图状态仅承载执行该节点所必需的最小信息集从而实现状态隔离与职责解耦。两种方式均保留原始术语与技术语义仅通过语序重组与表达精炼实现风格上的自然变体。3.3 共享消息列表智能体间最普遍的通信机制是借助共享状态通道通常体现为一个消息队列。此机制预设状态中必然存在至少一个被多个智能体共同访问的键通道。在采用消息列表实现通信时还需权衡一个关键问题智能体应披露其全部推理路径抑或仅传递最终结论四、结论多智能体 LLM 系统构建了一种高效范式通过并行、顺序、路由器与聚合器工作流等多种架构模式协同应对复杂任务这一点在本博客中已有深入探讨。通过对共享状态、消息列表与工具调用等通信机制的深入剖析智能体间的协同运作已实现高效且无间断的协调。那么如何系统的去学习大模型LLM作为一名从业五年的资深大模型算法工程师我经常会收到一些评论和私信我是小白学习大模型该从哪里入手呢我自学没有方向怎么办这个地方我不会啊。如果你也有类似的经历一定要继续看下去这些问题啊也不是三言两语啊就能讲明白的。所以我综合了大模型的所有知识点给大家带来一套全网最全最细的大模型零基础教程。在做这套教程之前呢我就曾放空大脑以一个大模型小白的角度去重新解析它采用基础知识和实战项目相结合的教学方式历时3个月终于完成了这样的课程让你真正体会到什么是每一秒都在疯狂输出知识点。由于篇幅有限⚡️ 朋友们如果有需要全套 《2025全新制作的大模型全套资料》扫码获取~为什么要学习大模型我国在A大模型领域面临人才短缺,数量与质量均落后于发达国家。2023年人才缺口已超百万凸显培养不足。随着AI技术飞速发展预计到2025年,这一缺口将急剧扩大至400万,严重制约我国AI产业的创新步伐。加强人才培养,优化教育体系,国际合作并进是破解困局、推动AI发展的关键。大模型学习指南路线汇总我们这套大模型资料呢会从基础篇、进阶篇和项目实战篇等三大方面来讲解。①.基础篇基础篇里面包括了Python快速入门、AI开发环境搭建及提示词工程带你学习大模型核心原理、prompt使用技巧、Transformer架构和预训练、SFT、RLHF等一些基础概念用最易懂的方式带你入门大模型。②.进阶篇接下来是进阶篇你将掌握RAG、Agent、Langchain、大模型微调和私有化部署学习如何构建外挂知识库并和自己的企业相结合学习如何使用langchain框架提高开发效率和代码质量、学习如何选择合适的基座模型并进行数据集的收集预处理以及具体的模型微调等等。③.实战篇实战篇会手把手带着大家练习企业级的落地项目已脱敏比如RAG医疗问答系统、Agent智能电商客服系统、数字人项目实战、教育行业智能助教等等从而帮助大家更好的应对大模型时代的挑战。④.福利篇最后呢会给大家一个小福利课程视频中的所有素材有搭建AI开发环境资料包还有学习计划表几十上百G素材、电子书和课件等等只要你能想到的素材我这里几乎都有。我已经全部上传到CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】相信我这套大模型系统教程将会是全网最齐全 最易懂的小白专用课