作者:AI小模型
一. 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
复制代码
原文地址:https://blog.csdn.net/machinegunjoe/article/details/147834311 |