LangGraph:构建有状态大模型工作流的利器

一. LangGraph简介

LangGraph 是基于 LangChain 的扩展框架,专为构建有状态(Stateful)的大模型工作流而设计。它通过图结构(Graph)定义多个执行节点(Node)及其依赖关系,支持复杂任务编排,尤其适合多智能体协作长对话管理等场景。

1.1 核心优势

  • 状态持久化:自动维护任务执行过程中的上下文状态

  • 灵活编排:支持条件分支、循环、并行等控制流

  • 容错机制:内置错误重试、回滚策略

  • 可视化调试:自动生成执行流程图

  • image.png

二. LangGraph最佳实践

2.1 基础代码结构

Python

from langgraph.graph import StateGraph, END  
from typing import TypedDict, Annotated  
import operator  
# 定义状态结构  
class AgentState(TypedDict):  
    input: str  
    result: Annotated[list, operator.add]  # 自动累积结果  
# 初始化图  
graph = StateGraph(AgentState)  
# 添加节点与边(后续章节详解)  
...  
# 编译并运行  
app = graph.compile()  
result = app.invoke({"input": "任务描述"})

2.2 开发原则

模块化设计:每个节点只完成单一职责

状态最小化:仅保留必要数据,避免内存膨胀

幂等性保证:节点可安全重试

三. 状态设计(State Design)

3.1 状态定义规范

使用 Pydantic模型 或 TypedDict 明确状态结构:

Python

from pydantic import BaseModel  
class ProjectState(BaseModel):  
    requirements: str  
    draft_versions: list[str]  
    current_step: int  
# 初始化状态  
initial_state = ProjectState(  
    requirements="开发一个聊天机器人",  
    draft_versions=[],  
    current_step=0  
)

3.2 状态自动管理

LangGraph通过注解(Annotation)实现状态字段的自动更新:

Python

from langgraph.graph import add_messages  
class DialogState(TypedDict):  
    history: Annotated[list, add_messages]  # 自动追加消息  
def user_node(state: DialogState):  
    return {"history": ["用户: 你好"]}  
def bot_node(state: DialogState):  
    return {"history": ["AI: 您好,有什么可以帮您?"]}

四. 节点函数(Node Functions)

4.1 节点定义标准

节点是工作流的基本单元,接收状态并返回更新:

Python

from langchain_core.runnables import RunnableLambda  
# 简单节点  
def data_loader(state: dict):  
    return {"data": load_dataset(state["input"])}  
# 包含LLM调用的节点  
llm_node = RunnableLambda(  
    lambda state: {"answer": chat_model.invoke(state["question"])}  
)  
# 注册节点  
graph.add_node("loader", data_loader)  
graph.add_node("llm", llm_node)

4.2 多智能体协作

Python

def designer_agent(state):  
    return {"design": "界面草图"}  
def developer_agent(state):  
    return {"code": "实现代码"}  
# 并行执行  
graph.add_node("designer", designer_agent)  
graph.add_node("developer", developer_agent)  
graph.add_edge("designer", "reviewer")  
graph.add_edge("developer", "reviewer")

c0941fbd5ae3d4a9557d233015f16fb8_3451762-20240704103924673-580721204.png

五. 边的设计(Edge Design)

5.1 条件分支(Conditional Edges)

根据状态值动态路由:

Python

from langgraph.graph import conditional_edge  
def should_continue(state):  
    return "continue" if state["step"] < 5 else "end"  
graph.add_conditional_edges(  
    source="decision_node",  
    path_map={"continue": "next_node", "end": END},  
    condition=should_continue  
)

5.2 循环结构

Python

graph.add_edge("start", "process")  
graph.add_conditional_edges(  
    "process",  
    lambda s: "loop" if s["count"] < 3 else "end",  
    {"loop": "process", "end": END}  
)

六. 错误处理(Error Handling)

6.1 重试机制

Python

from langgraph.retry import RetryPolicy  
policy = RetryPolicy(  
    max_retries=3,  
    backoff_factor=1.5,  
    retry_on=(Exception,)  
)  
graph.add_node(  
    "api_call",   
    api_wrapper.with_retry(policy)  
)

6.2 回滚策略

Python

def compensation_action(state):  
    # 执行补偿操作  
    rollback_transaction(state["tx_id"])  
    return {"status": "rolled_back"}  
graph.add_edge("failed_node", "compensation")  
graph.add_edge("compensation", END)

 学习书籍文档

书籍和学习文档资料是学习大模型过程中必不可少的,我们精选了一系列深入探讨大模型技术的书籍和学习文档,它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。(书籍含电子版PDF)

在这里插入图片描述

学习视频教程

对于很多自学或者没有基础的同学来说,书籍这些纯文字类的学习教材会觉得比较晦涩难以理解,因此,我们提供了丰富的大模型视频教程,以动态、形象的方式展示技术概念,帮助你更快、更轻松地掌握核心知识。

在这里插入图片描述

项目实战源码

学以致用 ,当你的理论知识积累到一定程度,就需要通过项目实战,在实际操作中检验和巩固你所学到的知识,同时为你找工作和职业发展打下坚实的基础。

在这里插入图片描述

大模型面试题

面试不仅是技术的较量,更需要充分的准备。

在你已经掌握了大模型技术之后,就需要开始准备面试,我们将提供精心整理的大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。

图片

:本文代码基于LangGraph 0.1+版本实现,需预先安装依赖:

Bash

pip install langgraph langchain pydantic

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

AI小模型

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

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

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

打赏作者

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

抵扣说明:

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

余额充值