一. LangGraph简介
LangGraph 是基于 LangChain 的扩展框架,专为构建有状态(Stateful)的大模型工作流而设计。它通过图结构(Graph)定义多个执行节点(Node)及其依赖关系,支持复杂任务编排,尤其适合多智能体协作、长对话管理等场景。
1.1 核心优势
-
状态持久化:自动维护任务执行过程中的上下文状态
-
灵活编排:支持条件分支、循环、并行等控制流
-
容错机制:内置错误重试、回滚策略
-
可视化调试:自动生成执行流程图
-
二. 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")
五. 边的设计(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