news 2026/9/2 21:09:29

LangGraph 完整核心概念 + 运行流程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LangGraph 完整核心概念 + 运行流程

LangGraph 完整核心概念概述

LangGraph 是面向 Agent 的状态图编排框架,底层基于 Google Pregel BSP(批量同步并行)模型,支持循环、分支、多 Agent、断点续跑;和普通 DAG(Directed Acyclic Graph:有向无环图) 最大区别:允许图里面有环(循环),完美适配 Agent「思考 - 调用工具 - 再思考」循环逻辑。

一、核心概念

1. State(状态)【全局共享数据总线】LangGraph

整个图唯一共享的数据容器,所有节点只读 state,返回增量更新,禁止直接修改入参 state 对象。

  • 定义:TypedDict/ Pydantic BaseModel;
  • 普通字段:节点返回字典,直接覆盖原值;
  • Annotated + reducer(归约器):定义字段如何合并新旧状态,这是编写 Agent 需要重点掌握的点。
from typing import TypedDict, Annotated import operator from langchain_core.messages import BaseMessage class AgentState(TypedDict): # operator.add:列表拼接,新消息追加,不覆盖旧列表 messages: Annotated[list[BaseMessage], operator.add] next_agent: str report_content: str
  • operator.add:简单列表拼接;适合日志、trajectory 轨迹记录;
  • add_messages:LangGraph 内置,处理 Message 对象,支持按 id 覆盖更新,对话消息优先用它LangChain。

如果不加 Annotated 归约器:节点返回{"messages":[new_msg]}会直接把历史消息全部覆盖丢失。

2. Node(节点)【计算单元】LangGraph

本质就是普通 Python 函数。

  1. 入参:接收当前完整state
  2. 执行逻辑:可以调用 LLM、调用工具(lighthouse/jmeter)、数据库、业务逻辑;
  3. 返回值:返回字典,只写需要更新的字段增量,不要返回完整 state;
  4. 分类:LLM 节点、工具节点、Supervisor 主管调度节点。
def lighthouse_agent(state: AgentState): # 读取state msgs = state["messages"] # 执行业务逻辑 result = run_lighthouse_test(msgs[-1].content) # 返回增量更新,不是完整state return {"messages": [AIMessage(content=result)]}

3. Edge(边)【控制流转,节点之间的通路】

分为 2 大类:普通边、条件边。

  1. 普通边 add_edge (A,B):A 执行完,固定流转到 B;
  2. 条件边 add_conditional_edges:根据当前 state,动态决定下一个跑哪个节点。
graph.add_conditional_edges( "supervisor", lambda s: s["next_agent"], { "lighthouse_agent": "lighthouse_agent", "jmeter_agent": "jmeter_agent", "analyst_agent": "analyst_agent", "finish": END } )

supervisor 节点执行完成,读取 state 里面next_agent字段的值,映射到对应节点,如果返回finish,直接走到 END 结束图。

  • START:虚拟入口节点,图执行起点,没有业务逻辑;
  • END:虚拟终止节点,走到 END,整个 graph.invoke () 结束,返回最终 state。

4. compile ()【编译】

graph = builder.compile(checkpointer=xxx)

编译阶段做的事情:

  1. 校验图结构,检查是否存在孤立节点;
  2. 内部创建Channels通道,对应 state 每个字段;
  3. 注册节点、边、条件路由逻辑;
  4. 如果传入checkpointer,开启状态持久化、断点续跑。

compile 之后,才是真正可执行的 Runnable 对象。

5. Checkpointer(检查点)生产级重要组件

  • 每一个超级步(superstep)执行完成,自动保存一份完整 state 快照;
  • 支持中断、人工介入、断点续跑;
  • 内存 / 文件 / Redis 都可以做存储;
  • Agent 执行失败,可以从快照恢复,重新跑,不需要从头执行。

6. SuperStep(超级步)底层执行单元LangGraph

LangGraph 底层 BSP 模型核心概念:

关于bsp的详细信息可以参考文章:

一文带大家理解LangGraph 的底层模型——BSP (Bulk‑Synchronous Parallel)-CSDN博客

  1. 一个 SuperStep = 一轮执行周期;
  2. 同一 SuperStep 内满足条件的节点可以并行执行;
  3. 全部节点执行完毕,统一合并状态更新,写入 Channels;
  4. 再进入下一轮 SuperStep,判断下一批要运行的节点;
  5. 循环往复,直到没有任何节点被触发,执行终止。

通俗理解:一轮一轮跑,同一轮多个节点可以并行;全部跑完统一合并状态,不会出现并发读写冲突。

7. Trajectory(轨迹)

完整图执行历史:每一轮 superstep 的 state 快照、节点输入输出、工具调用记录。

就是我们做 Agent 测试,Eval‑Harness 要采集的核心日志。

二、完整运行流程

举例:Supervisor 多 Agent (性能测试)架构

用户输入 → START → supervisor主管节点 ↓(条件边路由) ├─ lighthouse_agent (子Agent节点) ├─ jmeter_agent (子Agent节点) └─ analyst_agent (子Agent节点) ↓子节点执行完毕,都会回到 supervisor主管 循环往复,直到主管判断任务完成 → END → 返回最终state

分步拆解 invoke 执行完整链路

  1. 调用 graph.invoke (input_dict),传入初始输入;
  2. 框架把输入写入 Channels 通道,触发START
  3. SuperStep #1:执行supervisor节点
    • 读取当前完整 state;
    • LLM 分析用户任务,输出next_agent写入 state;
    • 节点返回增量更新,合并到全局 state;
    • 条件边读取next_agent,路由到对应子 Agent 节点;
  4. SuperStep #2:执行选中的子 Agent(lighthouse/jmeter)
    • 读取 state,执行工具调用,执行性能测试;
    • 将工具输出追加写入messages
    • 子 Agent 执行完成,固定边跳转回supervisor
  5. SuperStep #3:再次运行 supervisor
    • 读取刚刚子 Agent 返回的结果;
    • LLM 再次判断:是否还需要调用其他工具 / 子 Agent;
    • 如果还需要干活:继续路由对应子节点;
    • 如果任务全部完成:next_agent="finish",条件边路由到END
  6. 到达 END,整个图停止执行,返回完整最终 state;
  7. 如果配置 checkpointer,每一步都会保存状态快照。

关键点:子 Agent 跑完,强制回到主管,由主管做下一次决策,这就是 Supervisor 模式。

三、关键误区(写代码高频踩坑)

  • Node 函数不要直接修改传入的 state 对象
# 错误 def node(state): state["messages"].append(AIMessage("xxx")) return state # 正确:返回增量字典,由框架做状态合并 def node(state): return {"messages": [AIMessage("xxx")]}
  • 忘记Annotated[..., operator.add],messages 列表被覆盖丢失历史对话。
  • compile () 之前没有定义 START、END 路径,编译报错。
  • 条件边路由函数返回的字符串,必须和 add_node 注册节点名称完全一致,大小写敏感。
  • 不要把compile()写在循环内部,compile 只执行一次。

四、invoke () vs stream ()

  1. graph.invoke(input):同步阻塞,全部跑完返回最终完整 state;适合自动化 Eval‑Harness 测试;
  2. graph.stream(input):迭代器,每一个 SuperStep 执行完成就返回当前更新片段,可以实时流式输出,看中间执行轨迹。

五、和普通 LangChain Chain 区别

LangChain ChainLangGraph
流程只能线性 DAG,不支持循环支持循环、分支、条件跳转;适合 Agent 思考循环
状态外部手动维护记忆内置 State 状态管理、归约合并
中断恢复不支持Checkpointer 支持断点续跑
多 Agent很难实现调度Supervisor 原生支持多智能体编排

六、生产级 Agent 标准链路

定义State →

编写各个Node函数 →

add_node注册节点 →

add_edge/add_conditional_edges编排流程 →

compile(带checkpointer) →

invoke/stream执行 →

采集trajectory轨迹 →

Eval‑Harness做自动化评测

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 21:04:08

智能送药小车实战:STM32+树莓派双核架构与二维码识别方案详解

简介:本资源为2021年全国大学生电子设计竞赛F题‘智能送药小车’的完整参赛方案实现包,面向嵌入式系统开发初学者、电赛备赛学生及智能控制方向实践者,聚焦多传感器融合、视觉识别与运动控制等典型工程问题。压缩包共298个文件,含…

作者头像 李华
网站建设 2026/9/2 21:00:42

微信小程序集成科大讯飞语音识别:音频处理与实时流式架构实战

简介:本资源是一套面向微信小程序开发者的科大讯飞语音识别集成实战方案,聚焦解决小程序端语音上传、PCM格式转换、音频降噪提取及实时语音转文字等核心痛点,适用于具备基础JavaScript与小程序开发能力的中初级开发者。压缩包共34个文件&…

作者头像 李华
网站建设 2026/9/2 21:00:25

AI代理在CAD工程中的实测:Claude Fable 5×MecAgent的自动化流程

当我决定认真跑一轮 Claude Fable 5 MecAgent 的 CAD 工程实测时,预期和现在跑完之后的理解完全不同。当时我以为重点会是“AI 自动画图”,结果真正有价值的是另一件事。先从一个常见场景说起:一批图纸要改版本号,一共 47 张&…

作者头像 李华
网站建设 2026/9/2 21:00:22

脑机接口赋能认知障碍辅助诊断:P300信号与工程化之路

过去做认知障碍筛查,临床最常用的办法是量表。医生拿着一份 MMSE 或 MoCA 问卷,让老人画钟、算数、回忆单词,最后根据得分判断有没有认知下降风险。这个过程看起来简单,实际操作中却有一个很难回避的问题:结果太依赖受…

作者头像 李华
网站建设 2026/9/2 20:54:21

Python的包安装工具——pip命令大全

在多数使用之人角度上而言, 注定是晓得pip这个包安装工具的情况, 然而针对pip则兴许尚未做到足够了解, 于今日之际作者向众人阐述一下pip的命令要点, 目的在于达成自如灵活去使用pip的意图。一、pip工具使用方法pip的语法如下:pip式子当中, 存在着pip的命令, 这pip的…

作者头像 李华
网站建设 2026/9/2 20:54:13

Oracle 19c升级OPatch工具p6880880完整指南与踩坑记录

简介:这是一份面向Linux x86-64环境的Oracle 19c数据库官方补丁包,资源编号p6880880,主要供数据库管理员(DBA)解决19c版本的性能、安全与稳定性问题。压缩包内共496个文件,容量约115.39MB,以jar…

作者头像 李华