LangGraph 深度使用教程与总结

文章目录

LangGraph 深度使用教程与总结

  • LangGraph 是由 LangChain 团队推出的专为构建复杂、有状态 AI 智能体(Agent)打造的编排框架。它通过图结构(Nodes + Edges)和状态管理,解决了传统线性链(Chain)无法处理循环逻辑、自我纠错和长短期记忆的痛点,是目前构建生产级自主 Agent 的首选工具。
  • 如果你不是工作要用这玩意,没必要深度学,不值得浪费大量时间。这个东西更偏向于框架和工程过渡的产物,技术人员觉得他偏业务,业务人员根本不愿意用这个东西,后期维护量也很大。
一、核心概念解析

LangGraph 将 AI 工作流建模为有状态的图,其核心由三大要素构成:

  1. 状态(State):工作流的"记忆"与数据载体。所有节点共享并读写同一个状态对象,确保上下文(如对话历史、用户偏好、中间变量)在流转中不丢失。
  2. 节点(Nodes):工作流的基本执行单元。每个节点是一个独立的 Python 函数,负责执行特定任务(如调用 LLM、检索数据库、执行计算),并返回更新后的状态字段。
  3. 边(Edges):节点间的连接与控制流。分为无条件边(固定流转)和条件边(Conditional Edges,根据当前状态动态决定下一步走向),支持复杂的业务分支与循环。
二、核心能力与架构优势

相较于传统框架,LangGraph 提供了支撑生产级应用的关键能力:

  • 循环与自我纠错:原生支持图结构中的"回环(Loops)",允许 Agent 执行"计划 -> 执行 -> 检查 -> 修正"的循环推理,具备自我反思与纠错能力。
  • 持久化与时间旅行:内置 Checkpointer 机制,在每一步自动保存图的状态。支持"时间旅行",可随时查看历史步骤、回滚到特定节点并修改状态后重新运行(Fork),极大降低了复杂任务的调试成本。
  • 人机协同(Human-in-the-Loop):支持在特定节点前设置"断点(Interrupt)",暂停执行并等待人工审批或输入。人类可在暂停期间修改内部状态,随后 Agent 基于新状态继续运行,确保高风险操作的安全可控。
  • 多 Agent 与子图编排:支持将一个复杂的图封装为子图(Subgraphs)嵌入到更大的图中,轻松构建分层架构的多 Agent 协作系统。
  • 细粒度流式控制:不仅流式输出最终文本,还能流式输出中间过程(如工具调用、状态变更),提升用户体验。
三、基础实战:构建带条件分支的聊天机器人

以下代码演示了 LangGraph 的核心工作流:定义状态、构建节点、配置条件边并编译运行。

python 复制代码
from typing import Annotated, TypedDict
from langgraph.graph import StateGraph, START, END
from langgraph.graph.message import add_messages
from langchain_core.messages import HumanMessage, AIMessage

# 1. 定义状态(State):使用 Annotated 确保消息追加而非覆盖
class State(TypedDict):
    messages: Annotated[list, add_messages]
    intent: str = None

# 2. 定义节点(Nodes)
def classify_intent(state: State):
    """意图识别节点"""
    last_msg = state["messages"][-1].content
    intent = "technical" if "登录" in last_msg or "报错" in last_msg else "general"
    return {"intent": intent}

def handle_technical(state: State):
    """技术问题处理节点"""
    return {"messages": [AIMessage(content="检测到技术问题,正在为您转接技术专家...")]}

def handle_general(state: State):
    """常规问题处理节点"""
    return {"messages": [AIMessage(content="收到您的常规咨询,正在查询知识库...")]}

# 3. 构建图(Graph Construction)
builder = StateGraph(State)
builder.add_node("classify_intent", classify_intent)
builder.add_node("handle_technical", handle_technical)
builder.add_node("handle_general", handle_general)

# 4. 配置边(Edges)
builder.add_edge(START, "classify_intent")

# 动态条件边:根据意图动态路由
def route_by_intent(state: State) -> str:
    return "handle_technical" if state["intent"] == "technical" else "handle_general"

builder.add_conditional_edges(
    "classify_intent",
    route_by_intent,
    {"handle_technical": "handle_technical", "handle_general": "handle_general"}
)

builder.add_edge("handle_technical", END)
builder.add_edge("handle_general", END)

# 5. 编译并运行
graph = builder.compile()
result = graph.invoke({"messages": [HumanMessage(content="我的账号登不上了!")]})
print(result["messages"][-1].content)
四、进阶应用场景
  1. 复杂客服工单处理:结合人机协同与多 Agent 协作。用户投诉触发意图识别 -> 自动路由至技术专家 Agent -> 敏感操作触发人工审批断点 -> 审批通过后执行自动化流程。
  2. RAG 检索增强生成优化:构建"检索 -> 生成 -> 质量评估 -> 重新检索/生成"的循环图。若生成内容未通过质量检查,自动回环重新执行,大幅提升回答准确率。
  3. 故障根因分析(RCA)自主规划:封装 RCA Agent,通过图结构自主规划排查步骤、调用监控 API、分析日志,并在遇到瓶颈时触发人工介入。
五、深度总结与选型建议

LangGraph 是 AI 应用从"简单脚本"迈向"生产级智能系统"的关键基础设施。它用代码显式地建模了现实业务的复杂性,赋予了 AI 记忆、纠错与可控执行的能力。

适用场景:需要复杂逻辑跳转、多轮状态保持、自我纠错、人机协同审批以及多 Agent 协作的生产级 AI 应用。

局限性提示:LangGraph 属于代码级编排工具,学习曲线较陡。当业务逻辑极其复杂时,图形界面连线易变成难以维护的"蜘蛛网";且封装较厚,自定义底层 RAG 召回算法等细节时可能受限。若任务核心难点仅在于"从海量文档中检索信息"而非复杂逻辑跳转,LlamaIndex 可能是更优解;若追求业务人员零代码搭建,Dify 等可视化平台更为合适。

相关推荐
井川廊咏3 小时前
初探性能优化——2个月到4小时的性能提升
jvm·数据库·性能优化
程序员天天困3 小时前
Arthas Profiler 火焰图实战:CPU 热点在哪一目了然
java·jvm·后端
Co_Hui5 小时前
JVM vs. DVM vs. ART
jvm
笨蛋不要掉眼泪1 天前
Java虚拟机:对象复活、引用强度与Stop-The-World
java·开发语言·jvm
吃饱了得干活1 天前
JVM垃圾回收:从新生代到ZGC,从理论到调优
java·jvm·后端
长不胖的路人甲1 天前
可达性分析法(根搜索算法)完整详解
java·jvm·算法
程序员天天困1 天前
Arthas mc + retransform 实战:线上改完代码不用重新发版
jvm·后端
玛丽莲茼蒿1 天前
很难出错的Spring5(十)—— IOC进阶
java·开发语言·jvm
花生了什么事o1 天前
JVM运行时数据区详解:变量、对象和类信息到底存在哪里
jvm