引言:为什么LangGraph是AI工作流的“下一代引擎”?
当你需要构建一个能处理循环逻辑的AI客服系统——比如“用户投诉未解决时自动转人工,解决后发送满意度调查”——传统的链式框架(如LangChain基础链)会显得力不从心:它们难以实现分支跳转、状态保存和循环执行。而LangGraph的出现,正是为了解决这一痛点。
LangGraph是LangChain团队推出的AI工作流引擎,专为复杂业务逻辑设计,支持循环、分支、并行执行和状态持久化。相比传统工具,它的核心优势在于:能像“流程图”一样编排AI节点,让Agent具备“记忆”和“决策”能力。无论是多Agent协作的智能运维系统,还是带错误重试的数学解题助手,LangGraph都能轻松应对。
本文整合两大技术文档精华,从核心概念到企业级实战,全方位拆解LangGraph的使用方法,包含完整代码示例和可视化图表,助你快速掌握这一热门AI开发脚手架。
一、LangGraph核心概念:5分钟读懂工作流的“骨架”
LangGraph的本质是“状态驱动的图结构”,所有功能围绕“节点(Node)、边(Edge)、状态(State)”三大要素展开。理解这些概念,是入门的关键。
1.1 核心三要素解析
(1)State(状态):工作流的“共享内存”
状态是跨节点传递的数据容器,类似工作流的“记忆”。它记录了流程中的关键信息(如输入、中间结果、执行步骤),并在节点间动态更新。
定义方式:用TypedDict
(类型化字典)定义状态结构,明确字段和类型:
from typing import TypedDict, List
# 以数学解题工作流为例
class MathWorkflowState(TypedDict):
problem: str # 题目文本
steps: List[str] # 解题步骤
current_answer: float # 当前答案
is_correct: bool # 答案是否正确
作用:确保数据在节点间规范流转,避免混乱。例如,“分析题目”节点生成的steps
,可被“计算”节点直接读取并续写。
(2)Node(节点):工作流的“执行单元”
节点是实现具体功能的函数,接收状态作为输入,处理后返回更新后的状态。每个节点专注于一件事(如“分析题目”“调用计算器”“验证答案”)。
定义示例:
def analyze_problem(state: MathWorkflowState) -> MathWorkflowState:
"""分析题目,提取关键信息"""
# 从状态中获取题目
problem = state["problem"]
# 处理逻辑:提取关键词(如“方程”“求解”)
analysis = f"分析:题目为{
problem},需求解未知数"
# 更新状态:添加分析步骤
updated_steps = state["steps"] + [analysis]
return {
**state, "steps": updated_steps} # 返回完整更新后的状态
关键点:节点必须接收state
参数,并返回包含所有字段的更新后状态(用** state
保留未修改的字段)。
(3)Edge(边):工作流的“路线图”
边定义节点间的连接关系,决定“下一步执行哪个节点”。分为两种类型:
- 固定边:无条件跳转(如“分析题目”→“计算”);
- 条件边:根据状态动态选择下一个节点(如“验证答案正确”→“输出结果”,否则→“重新计算”)。
定义示例:
# 固定边:从“分析”节点无条件跳转到“计算”节点
workflow.add_edge("analyze", "calculate")
# 条件边:根据验证结果决定下一步
def route_verify(state: MathWorkflowState) -> str:
"""根据答案是否正确返回下一个节点名称"""
return "output_result" if state["is_correct"] else "recalculate"
workflow.add_conditional_edges(
source="verify", # 源节点
condition=route_verify, # 路由函数
# 映射:路由函数返回值 → 目标节点
mapping={
"output_result": "output_result", "recalculate": "calculate"}
)
(4)Graph(图):工作流的“容器”
图是节点和边的集合,通过StateGraph
类构建,最终编译为可执行的工作流。
构建流程:
from langgraph.graph import StateGraph, END
# 1. 初始化图(指定状态类型)
workflow = StateGraph(MathWorkflowState)
# 2. 添加节点(name→node映射)
workflow.add_node("analyze", analyze_problem) # 节点名→节点函数
workflow.add_node("calculate", calculate_answer)
workflow.add_node("verify", verify_answer)
workflow.add_node("output_result", output_result)
# 3. 定义边(流转关系)
workflow.set_entry_point("analyze") # 入口节点(流程起点)
workflow.add_edge("analyze", "calculate")
workflow.add_conditional_edges("verify", route_verify, mapping)
workflow.add_edge("output_result", END) # 结束节点
# 4. 编译为可执行工作流
app = workflow.compile()
(5)Checkpoint(检查点):工作流的“存档点”
检查点自动保存工作流的执行状态,支持中断后恢复、重试或回溯。这对长流程(如复杂问题诊断)尤为重要。
启用方式:
from langgraph.checkpoint import MemorySaver
# 用MemorySaver保存检查点(生产环境可用Redis/数据库)
memory = MemorySaver()
app = workflow.compile(checkpointer=memory)
# 执行时指定thread_id(用于区分不同流程实例)
config = {
"configurable": {
"thread_id": "student_001"}} # 学生ID作为唯一标识
app.invoke({
"problem": "解方程x+5=10", "steps": [], "current_answer": None, "is_correct": False}, config=config)
# 后续可从检查点恢复执行
app.invoke(None, config=config) # 传入None表示从上次状态继续
1.2 工作流执行逻辑:从“起点”到“终点”
一个完整的LangGraph工作流执行流程如下:
- 从
entry_point
(入口节点)开始; - 节点处理状态并返回更新后的数据;
- 边根据状态决定下一个节点;
- 重复步骤2-3,直到到达
END
节点或触发循环; - 检查点实时保存状态,支持中断后恢复。
可视化示例(数学解题工作流):