【DeepSeek实战】24、LangGraph完全指南:从入门到实战,构建复杂AI工作流

在这里插入图片描述

引言:为什么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工作流执行流程如下:

  1. entry_point(入口节点)开始;
  2. 节点处理状态并返回更新后的数据;
  3. 边根据状态决定下一个节点;
  4. 重复步骤2-3,直到到达END节点或触发循环;
  5. 检查点实时保存状态,支持中断后恢复。

可视化示例(数学解题工作流):

正确
错误
Start
分析题目
重新计算
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无心水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值