[智能体-335]:LangGraph 核心概念 + 底层实现机制

[智能体-335]:LangGraph 核心概念 + 底层实现机制 LangGraph 是 LangChain 生态下面向大模型复杂流程的有状态有向图编排框架底层基于可迭代状态机实现原生支持分支、循环、状态持久、人工介入解决传统线性 Chain 无法处理长流程、自主 Agent 的问题。一、核心概念分层梳理1. 基础四元组图的最小组成1State 全局状态整张图唯一的全局数据容器所有节点共享读写是数据流转的核心载体。定义方式使用TypedDict约束字段名、数据类型配合Annotated归约函数 (Reducer)定义字段合并规则。两种更新规则默认覆盖新值直接替换旧值Annotated[list, operator.add]列表追加多轮对话标准用法扩展搭配Checkpointer可序列化持久化到内存 / Redis / 数据库实现断点续跑、跨会话记忆。python运行from typing import TypedDict, Annotated import operator class GraphState(TypedDict): query: str messages: Annotated[list[str], operator.add]2Node 节点图中最小执行单元代表一段独立逻辑调用 LLM、工具、数据处理、规则判断。本质普通 Python 函数入参当前全局State出参局部更新字典只返回需要修改的字段不用返回完整 State特性节点本身无状态纯计算逻辑数据全部托管在全局 State。python运行def llm_node(state: GraphState) - dict: return {messages: [LLM 执行完成]}3Edge 边定义节点间的执行流向分两类是实现线性 / 分支 / 循环的关键普通边add_edge固定跳转A 执行完成 → 强制走到 B用于线性串行流程。条件边add_conditional_edges动态路由根据State 内容执行路由函数返回目标节点名再通过path_map映射跳转用于分支、循环。4Graph 状态图实例由State Node Edge组装而成的可执行对象。内置两个特殊标记START节点流程唯一入口、END节点流程终止节点生命周期定义结构 → 编译 (compile) → 执行 (invoke/stream)。2. 高阶核心组件1Checkpointer 检查点状态持久化中间件每一步执行后自动快照全局 State结合thread_id实现多会话隔离、服务重启恢复、历史回溯。2Human-in-the-Loop 人在回路原生流程暂停机制编译时通过interrupt_before / interrupt_after指定暂停点流程走到目标位置自动挂起允许外部读取 / 修改 State再恢复执行。3Reducer 归约函数配合Annotated使用定义同字段多份更新内容的合并策略内置operator.add列表拼接支持自定义函数实现去重、保留最新、条件合并等逻辑。二、底层整体实现机制LangGraph 底层不是一次性执行的代码脚本而是循环驱动的迭代式状态机。 整体运行范式读取当前节点 → 执行节点逻辑→ 合并更新 State → 根据边路由选择下一节点→ 循环直到命中 END1. 整体执行流程底层通用逻辑初始化阶段接收外部入参基于TypedDict初始化全局 State若开启 Checkpointer优先从持久化存储恢复历史状态。主调度循环核心框架维护一个执行指针不断推进取出当前待执行节点执行节点函数得到「局部更新字典」根据字段绑定的 Reducer 规则合并新旧 State匹配当前节点的 Edge普通边 / 条件边计算出下一个节点若下一节点是END终止循环否则切换指针进入下一轮迭代。结束阶段退出循环返回最终 State开启 Checkpointer 则保存最终状态快照。2. 细分场景底层机制1状态合并机制Annotated Reducer这是 LangGraph 区别于普通传参的核心多个节点同时更新同一个字段或单节点多次更新框架识别字段上绑定的归约函数旧 State 值 新更新值按照 Reducer 规则合并而非简单覆盖最终生成一份全新 State 供后续节点使用。典型场景多轮对话messages列表不断追加历史消息。2线性流程实现普通边plaintextSTART → NodeA → NodeB → END指针从START指向 NodeA执行并更新 State匹配普通边固定跳转至 NodeB执行 NodeB匹配边指向END循环终止。3分支流程实现条件边plaintextSTART → NodeA → 路由判断 → 分支1 / 分支2 → ENDNodeA 执行完毕State 产生标记字段调用路由函数读取 State返回字符串标记通过path_map映射到目标分支节点分支节点执行完成走向终点。4循环流程实现有环图LangGraph允许图存在环路线性 Chain 不支持循环本质 条件边 回跳上游节点plaintextSTART → NodeA → NodeB → 路由判断 ↑ ↓ └──── 条件成立(循环) ────┘ 条件不成立 → END一轮逻辑执行完成后路由判断不走向 END而是跳回上游节点执行指针回退复用原有节点逻辑开启新一轮迭代直到判断条件满足才退出循环。应用Agent 「思考→工具调用→再思考」迭代推理。5人在回路流程暂停底层机制编译阶段标记暂停节点interrupt_before[node_name]运行阶段执行指针走到目标节点之前主动打断主调度循环框架保存当前完整 State 和执行位置对外暴露get_state/update_stateAPI人工修改状态后再次调用invoke(None)从断点位置恢复调度循环。6状态持久化Checkpointer机制每一轮节点执行完成后自动对当前 State 做序列化快照以thread_id作为会话唯一标识区分不同用户 / 会话重启 / 断线后通过thread_id加载快照恢复执行指针与 State实现断点续跑。三、LangGraph 与 LangChain 线性 Chain 底层本质差异表格维度LangChain ChainLCELLangGraph 状态图底层模型线性管道、无环单向数据流有向图、原生支持环 / 分支数据传递上下游逐级传参无统一容器全局 State 统一托管数据流程控制顺序硬编码无法动态跳转边 路由函数动态计算流向循环能力无原生支持需手写代码循环原生有环图框架层实现循环暂停 / 介入无原生暂停能力框架层支持挂起、人工修改状态执行模式一次性串行执行迭代式状态机分步推进四、核心总结精简记忆版核心定位LangGraph 面向 LLM 的迭代式有状态有向图状态机。四大核心概念State全局数据容器靠 TypedDict Reducer 做结构与合并规则Node业务执行单元纯函数、无全局状态Edge流程控制线普通边 串行条件边 分支 / 循环Graph图容器负责整体调度。底层核心机制整体节点执行 → 状态合并 → 路由跳转的无限迭代直到遇见END循环条件边回跳上游节点多轮对话Reducer 列表追加 Checkpointer 状态持久人在回路调度循环主动暂停 外部修改状态 断点恢复。