LangGraph智能体设计模式与多智能体开发(人工智能技术丛书)【行情 报价 价格 评测】-京东
王晓华LangGraph开发入门书《LangGraph智能体设计模式与多智能体开发》全文试读~_langgraph智能体设计模式与多智能体开发 pdf 下载-CSDN博客
目录
Swarm模式的智能体在设计上具有独立性,这种模式可以灵活对智能体进行调度和定义。但是,当单个全能 Agent 在复杂任务面前显露出逻辑臃肿、能力上限不足的瓶颈时,Supervisor 模式作为多智能体协作的核心架构就应运而生了,它深度借鉴软件工程的分工协作思想,通过“主管−下属”的层级设计,将复杂任务拆解为专业化子任务,实现高效协同。
11.1 多智能体的共享空间驱动
相对于Swarm模式,我们采用的Supervisor模式的核心逻辑在于明确角色分工:
- 主管 Agent作为全局统筹者,不直接参与具体执行,而是专注于接收最终目标、拆解任务流程、制定执行计划,并根据下属 Agent的专业领域将子任务精准分发,同时全程把控任务进度、协调跨角色协作中的信息同步。
- 下属 Agent 则作为垂直领域的专家,各自配备专属的提示词、工具集和模型,仅聚焦自身擅长的细分场景。比如研究员 Agent 专注搜索与数据提取,工程师 Agent 专攻代码生成,文案师 Agent聚焦内容创作,通过专业化深耕确保单环节输出质量。
在LangGraph的技术支撑下,Supervisor 模式进一步放大了多智能体系统的优势:每个下属 Agent 都是独立可复用的子图(Subgraph),支持单独开发、测试与优化,大幅降低了系统维护成本,也为功能迭代提供了灵活性;同时,这种架构能够自然模拟真实工作流,无论是软件开发的“产品经理−工程师−测试员”链路,还是内容创作的“策划−研究员−作者−编辑”流程,都能通过主管的任务调度与下属的专业执行精准复刻。
具体来看,支撑这一协作模式有序运转的核心,是结构化的状态管理体系,通过Pydantic 模型明确了各角色的核心数据字段与流转规则:
from pydantic import BaseModel,Field
class ResearchState(BaseModel):
topic: str = Field(default="", description=" 研究员需开展研究的核心主题,明确研究方向与范围,为数据搜集提供靶向指引 ")
research_data: str = Field(default="",description=" 研究员通过搜索、数据提取等工作获取的相关资料,包含事实、数据、案例等,是支撑后续创作的核心依据")
article: str = Field(default="", description=" 写作者基于研究资料完成的完整文章内容,需符合任务主题与输出要求 ")
class WriterState(BaseModel):
research_data: str = Field(default="",description=" 接收自研究员的结构化研究资料,是写作者开展文章创作的核心输入素材 ")
article: str = Field(default="", description=" 写作者基于研究资料完成的完整文章内容,需符合任务主题与输出要求 ")
# 2. 主管 Agent的State
class SupervisorState(bigmodel.BaseAgentState):
topic: str = Field(default="",description=" 多智能体协作任务的核心主题,由主管 Agent 接收并同步至研究员、写作者等下属 Agent,统一任务方向 ")
research_data: str | None = Field(default=None,description="整合后的研究员输出成果,由主管 Agent 管控并流转至写作者 Agent,为创作提供数据支撑,未完成研究时可为空")
article: str | None = Field(default=None,description="写作者 Agent 提交的最终文章成果,由主管 Agent 汇总存档,是整个协作任务的核心产出,任务未完成时可为空")
ResearchState为研究员Agent定义了“研究主题”与“研究数据”的核心产出,WriterState 则聚焦写作者Agent的“输入数据”与“文章成果”,而SupervisorState作为全局状态中枢,整合了“任务主题”“研究数据”“最终文章”等关键信息,既承接初始任务目标,又同步各下属Agent的执行结果,实现数据在协作链路中的精准传递与共享。
11.2 多智能体的共享空间驱动实战
在上一节中,我们学习了多智能体独立角色与状态的空间定义,相对于Swarm设计模式,我们在不同的状态空间定义时使用了具有共享性质的空间参数“article”。
除此之外,每一个角色定义时又有单独独立的状态空间,这就像公司的办公场所,既有“会议室”对内容进行交互,每个人又有独立的办公空间完成独立的任务项目。下面我们将基于此完成基于共享空间的多智能体实战。
11.2.1 基于共享空间驱动的多智能体实战
我们先构建了基于不同角色分工的多智能体协作示例,核心设计思路是在各智能体的状态空间中,统一定义“article”字段作为内容载体。依托这一设计,我们能够实现关键信息在不同职能的智能体之间有序传递,进而推动多智能体协同完成完整任务。下面给出一个流式多智能体示例,我们详细拆解这一全局状态管控机制的实现逻辑:
import bigmodel
from agent_moudles import web_searach_tool
llm = bigmodel.llm
tools = [web_searach_tool.search_web4query]
from pydantic import BaseModel,Field
class ResearchState(BaseModel):
topic: str = Field(default="", description=" 研究员需开展研究的核心主题,明确研究方向与范围,为数据搜集提供靶向指引 ")
research_data: str = Field(default="",description=" 研究员通过搜索、数据提取等工作获取的相关资料,包含事实、数据、案例等,是支撑后续创作的核心依据")
article: str = Field(default="", description=" 写作者基于研究资料完成的完整文章内容,需符合任务主题与输出要求 ")
class WriterState(BaseModel):
research_data: str = Field(default="",description=" 接收自研究员的结构化研究资料,是写作者开展文章创作的核心输入素材 ")
article: str = Field(default="", description=" 写作者基于研究资料完成的完整文章内容,需符合任务主题与输出要求 ")
# 2. 主管 Agent的State
class SupervisorState(bigmodel.BaseAgentState):
topic: str = Field(default="",description=" 多智能体协作任务的核心主题,由主管 Agent 接收并同步至研究员、写作者等下属 Agent,统一任务方向 ")
research_data: str | None = Field(default=None,description="整合后的研究员输出成果,由主管 Agent 管控并流转至写作者 Agent,为创作提供数据支撑,未完成研究时可为空")
article: str | None = Field(default=None,description="写作者 Agent 提交的最终文章成果,由主管 Agent 汇总存档,是整个协作任务的核心产出,任务未完成时可为空")
from langchain.agents import create_agent
research_agent = create_agent(
model=llm,
tools=tools,
system_prompt="你是一个有用的智能体助手.对用户传来的研究内容使用网络搜索后再回答。"
)
def research_node(state: ResearchState):
print("--- [黑盒内部] Researcher 正在执行 ---")
reply = research_agent.invoke({"messages":state.topic})
topic_result = reply["messages"][-1].content
return {"article":topic_result}
writer_agent = create_agent(
model=llm,
system_prompt="你是一个有用的智能体助手.对用户传来的研究资料,撰写一篇关于此主题的简短报告。")
def writer_node(state: WriterState):
print("--- [黑盒内部] Writer 正在执行 ---")
reply = writer_agent.invoke({"messages":state.article})
article_result = reply["messages"][-1].content
return {"article":article_result}
from langgraph.graph import StateGraph,END
supervisor_graph_builder = StateGraph(SupervisorState)
supervisor_graph_builder.add_node("research_node", research_node)
supervisor_graph_builder.add_node("write_node", writer_node)
# 流程:先研究,再写作 (简单的线性流程)
supervisor_graph_builder.set_entry_point("research_node")
supervisor_graph_builder.add_edge("research_node", "write_node")
supervisor_graph_builder.add_edge("write_node", END)
team_app_mode1 = supervisor_graph_builder.compile()
# --- 运行团队! ---
print("--- 运行 ---")
inputs = {"topic": "简单的说下,天空为什么是蓝色的,不超过200字。"}
result = team_app_mode1.invoke(inputs)
print("\n--- 最终文章 ---")
print(result['article'])
输出结果如下所示:
--- 运行 ---
--- [黑盒内部] Researcher 正在执行 ---
--- [黑盒内部] Writer 正在执行 ---
--- 最终文章 ---
**报告:天空为何呈现蓝色**
阳光看似白色,实际上是由多种颜色的光组成的复合光,不同颜色对应不同的波长。在可见光谱中,蓝光的波长较短(约450–495纳米),而红光的波长较长(约620–750纳米)。
当阳光穿过地球大气层时,会与空气中的气体分子(如氮气和氧气)以及微小颗粒发生相互作用。由于瑞利散射的强度与波长的四次方成反比,波长越短的光被散射得越强烈。因此,蓝光比红光等其他颜色的光更容易被散射到各个方向。
这种强烈的散射使得无论我们从天空的哪个方向观察,都能接收到大量来自太阳光中被散射的蓝光,从而让整个天空呈现出蔚蓝色。这一现象在晴朗的白天尤为明显。
综上所述,天空之所以呈现蓝色,是由于阳光中波长较短的蓝光在大气中发生瑞利散射的结果。
从结果可以看到,我们得到了问题的答案,读者可以尝试更多的问题。下面我们主要讲一下“article”在多智能体间的传递逻辑。
“article”在这套多智能体系统中的传递,核心依托于全局状态(SupervisorState)这一“数据中枢”和“研究→写作”的线性工作流,它从初始的空值状态,逐步成为承载资料、最终形成成果的核心内容载体,全程在研究员、写作者智能体间有序流转。
在整个系统中,全局状态扮演着统筹所有信息的角色,存储着任务全生命周期的关键数据,包括任务主题(topic)、研究资料(research_data)以及文章(article),所有智能体的输入与输出都通过它实现同步;而研究员的ResearchState和写作者的WriterState,则是对应智能体的“专属工作面板”,仅包含各自所需的核心字段,本质上是全局状态的子集映射,这为“article”的精准传递奠定了基础。
任务启动前,所有与“article”相关的字段都处于初始空值状态:ResearchState的article默认为空字符串,WriterState的article同样是空字符串,作为全局核心的SupervisorState的article则为None。此时系统仅接收用户输入的任务主题“简单的说下,天空为什么是蓝色的,不超过200字”,尚无任何“article”相关的实质性内容,传递流程尚未真正开始。
流程进入“research_node”后,研究员智能体接收全局状态中的任务主题,调用网络搜索工具生成含天空呈蓝色的“资料型article”(topic_result),节点返回该内容后,LangGraph将其更新至SupervisorState的article字段,全局与ResearchState的article同步,完成“article”首次传递。
研究员工作结束,流程流转至“write_node”,写作者智能体以全局状态中的“资料型article”为素材,按要求创作“成品型article”(article_result),其返回后覆盖全局原有内容,WriterState的article同步更新。写作者工作结束,流程至END节点,系统调用team_app_mode1.invoke(inputs)获取结果,通过print(result['article'])输出最终成果,形成传递闭环。代码中研究员输出未存research_data而是直接存article,不影响逻辑仅简化路径。
从 LangGraph 框架视角来看,该多智能体系统的核心优势在于通过全局状态与流程编排实现了跨智能体的数据精准流转。LangGraph 以 SupervisorState作为全局数据中枢,统一存储任务全生命周期的关键信息,其中“article”字段作为核心内容载体,成为不同智能体间数据传递的纽带,而研究员、写作者的专属状态(ResearchState、WriterState)本质是全局状态的子集映射,确保各智能体仅获取所需字段,同时保障数据同步一致性。
在流程设计上,LangGraph 通过线性编排“research_node→write_node→END”的工作流,让“article”从初始空值逐步流转:
- 研究员节点调用工具生成资料型内容后,LangGraph 自动将其更新至全局状态的“article” 字段。
- 写作者节点则从全局状态读取该内容进行加工,生成成品后再反向覆盖全局状态,全程无需额外通信机制,仅依赖 LangGraph的状态同步能力即可完成协作。
可以看到,这种设计充分体现了 LangGraph 在多智能体系统中的核心价值——通过全局状态统一管控与节点流程编排,简化了跨智能体的数据传递逻辑,确保了内容从生成到加工的有序流转,最终高效达成协作任务目标。
11.2.2 管控全局的共享空间详解
上一节中,我们建立了一个由SupervisorState驱动的多智能体,而SupervisorState作为管控全局的共享空间正是这一机制的核心载体——它并非简单的状态传递媒介,而是多智能体协同的“公共数据枢纽”,让不同职能的智能体能够围绕统一的信息资产展开协作。
共享空间的核心价值在于打破单个智能体的“信息孤岛”,通过标准化的全局状态定义(如前文统一命名的“article” 字段),让所有参与协作的智能体都能访问、读取和更新关键数据,无需额外搭建复杂的点对点通信链路。这种设计模式下,共享空间就像多智能体团队的“公共工作台”,研究员获取的研究资料、写作者生成的文章草稿、主管汇总的任务进度等,都能实时同步至该空间,确保每个智能体拿到的都是最新、最一致的信息。
相较于传统的分步数据传递,共享空间通过全局状态的统一管控,大幅简化了多智能体的协作逻辑:无需手动维护智能体间的信息同步,只需约定好共享字段的定义与使用规则,LangGraph 框架就能自动完成状态的流转与更新。例如研究员完成数据搜集后,仅需将结果写入共享空间的“article” 字段,写作者即可直接从该字段读取素材开展创作,整个过程无需额外的交互指令,完全依托共享空间的全局可见性实现无缝衔接。
同时,共享空间还保障了流式协同的顺畅推进,让多智能体的工作流能够按既定顺序高效迭代 ——从任务主题传入、研究资料积累,到文章成品生成,每一步的成果都沉淀在共享空间中,既避免了数据冗余与不一致,又为后续智能体的工作提供了可靠依据。这种以共享空间为核心的协作模式,不仅降低了多智能体系统的开发与维护成本,更让不同角色的智能体能够聚焦自身核心职能,在统一的信息底座上协同完成复杂任务,充分发挥多智能体分工协作的优势。
从整体来看,我们通过对整体状态空间的不同管控,从而在多个智能体之间对信息和数据进行流转,从而完成了对整体状态空间的精细化管控,在多个智能体之间构建起高效的信息与数据流转通道。而“智能体驱动”的核心升级,在于让协作的主导权从“固定流程”转向“智能体自主决策”——不再依赖预设的线性节点排布,而是由智能体根据共享状态中的信息(如任务进度、数据完整性、需求变化)主动判断行动方向、分配工作优先级,甚至动态调整协作链路。
在这种模式下,每个智能体都具备了“目标导向”的决策能力:主管智能体不再只是传递任务,而是会基于用户需求拆解核心目标,判断需要调用哪些职能的智能体(如研究员、写作者、审核员),并根据各智能体的执行反馈实时优化分工;研究员智能体拿到任务主题后,会自主判断现有资料是否充足,主动触发搜索工具补充数据,若遇到复杂问题还能向主管申请协同其他专业智能体支援;写作者智能体则会基于共享空间中的研究资料,自主决定创作框架,若发现资料存在缺口或逻辑矛盾,会直接通过共享状态向研究员发起补充需求,无需人工介入。
LangGraph的状态驱动特性为这种自主协作提供了底层支撑:智能体的每一次决策都会同步至全局共享状态,而状态的变化又会反过来触发下一轮的决策与行动——比如当共享空间中“research_data” 字段更新为完整资料时,写作者智能体自动感知并启动创作;当“article”字段生成初稿后,审核智能体可主动介入进行优化。这种“决策−行动−状态更新−再决策”的闭环,让多智能体系统从“被动执行流程”升级为“主动推进任务”,不仅大幅提升了协作效率,更让系统具备了应对复杂、动态任务的自适应能力,真正实现了以智能体为核心的高效协同。
11.3 本章小结
本章我们主要讲解了基于共享空间的多智能体实战,可以看到,智能体的每一次决策都会同步至全局共享状态,而状态的变化又会反过来触发下一轮的决策与行动。比如,当共享空间中 “research_data”字段更新为完整资料时,写作者智能体自动感知并启动创作;当“article”字段生成初稿后,审核智能体可主动介入进行优化。
这种 “决策−行动−状态更新−再决策” 的闭环,使得多智能体系统从“被动执行流程” 升级为 “主动推进任务”,不仅大幅提升了协作效率,更让系统具备了应对复杂、动态任务的自适应能力,真正实现了以智能体为核心的高效协同。


620

被折叠的 条评论
为什么被折叠?



