天津建设协会网站首页,广告字体效果图在线制作,个体户营业执照可以网站备案,技术培训从零开始掌握 LangGraph#xff1a;构建下一代 AI Agent 的终极指南摘要#xff1a;当 LangChain 的线性链#xff08;Chain#xff09;无法满足复杂的业务逻辑时#xff0c;我们需要更强大的工具。本文将带你深入理解 LangGraph 的核心概念#xff0c;通过实战代码掌握状…从零开始掌握 LangGraph构建下一代 AI Agent 的终极指南摘要当 LangChain 的线性链Chain无法满足复杂的业务逻辑时我们需要更强大的工具。本文将带你深入理解 LangGraph 的核心概念通过实战代码掌握状态管理、循环逻辑与人机协作开启构建复杂 AI Agent 的大门。1. 为什么我们需要 LangGraph在 LLM 应用开发的早期LangChain凭借其Chain链的概念迅速流行。它非常适合处理线性的任务流程输入 - 提示词 - 模型 - 输出。然而现实世界的应用场景往往不是线性的。想象一下你要构建一个自主 Agent它需要思考Thinking它需要调用工具Tool Use如果工具报错它需要重试Retry Loop在关键操作前它需要人类确认Human-in-the-loop这种包含循环Cycles、条件分支和持久化状态的逻辑用传统的线性 Chain 很难优雅地实现。这就是LangGraph登场的时刻。它是 LangChain 生态的一部分专门用于构建有状态的Stateful、多角色Multi-actor的应用程序。简单来说它把 LLM 应用从“流水线”变成了“流程图”。2. LangGraph 的核心概念理解 LangGraph只需要掌握三个核心要素。你可以把它想象成在画一张流程图2.1 状态State这是 LangGraph 的灵魂。整个图共享一个状态对象通常是一个 TypedDict 或 Pydantic 模型。每个节点都可以读取和更新这个状态。比喻就像游戏中的“存档”记录着当前的对话历史、变量值和执行进度。2.2 节点Nodes节点是执行具体工作的 Python 函数。它可以是调用 LLM。它可以是执行一段代码。它可以是调用外部 API。关键点节点接收当前状态返回更新后的状态。2.3 边Edges边决定了流程的走向。普通边从节点 A 无条件走到节点 B。条件边根据节点 A 的输出结果决定走到节点 B 还是节点 C例如如果意图是“查询天气”走 A否则走 B。3 核心优势langgraph为任何长期运行的有状态工作流或者代理提供底层基础设施有以下核心优势持久执行构建能够在失败中持续运行、并能从中断处恢复运行代理。人机参与通过检查和修改代理状态纳入人工监督。综合记忆创建具有短期工作记忆用于持续推理和跨会话长期记忆的有状态智能体。使用langsmith进行调试通过可视化工具追踪执行路径、捕捉状态转换并提供详细的运行时指标深入了解复杂代理行为。生产准备部署自信的部署复杂的代理系统配备可扩展的基础设施以应对有的状态长期运行的独立工作流挑战。4. 快速上手Hello LangGraph让我们通过一个简单的代码示例来感受 LangGraph 的工作流。我们将构建一个简单的“加法器 Agent它可以连续接收数字并累加。4.1 环境准备pipinstalllanggraph langchain-core4.2 定义状态与节点fromtypingimportTypedDict,Annotated,Listfromlanggraph.graphimportStateGraph,ENDimportoperator# 1. 定义状态classAgentState(TypedDict):numbers:Annotated[List[int],operator.add]# 使用 operator.add 实现列表自动合并total:int# 2. 定义节点函数definput_number(state:AgentState):# 模拟用户输入一个数字new_num5print(f输入数字{new_num})return{numbers:[new_num]}defcalculate_sum(state:AgentState):current_sumsum(state[numbers])print(f当前总和{current_sum})return{total:current_sum}# 3. 构建图workflowStateGraph(AgentState)# 添加节点workflow.add_node(input,input_number)workflow.add_node(calculate,calculate_sum)# 添加边 (设置入口和流程)workflow.set_entry_point(input)workflow.add_edge(input,calculate)workflow.add_edge(calculate,END)# 编译appworkflow.compile()4.3 运行initial_state{numbers:[],total:0}resultapp.invoke(initial_state)print(result)# 输出{numbers: [5], total: 5}虽然这个例子很简单但它展示了State如何在节点间传递以及Graph如何编排逻辑。5. 进阶特性LangGraph 的杀手锏真正让 LangGraph 强大的是以下三个高级特性它们解决了生产级 AI 应用的核心痛点。5.1 循环与 Agent 逻辑在 LangGraph 中你可以轻松创建循环。这是构建ReAct Agent推理 - 行动的基础。逻辑LLM 思考-决定调用工具-执行工具-返回结果给 LLM-LLM 再次思考。实现通过条件边Conditional Edges如果 LLM 认为任务未完成将流程指回 LLM 节点。5.2 持久化与时间旅行Persistence Time TravelLangGraph 内置了Checkpointer。断点续传如果程序崩溃可以从上一步的状态继续执行无需重新计算。人机协作在敏感操作前暂停流程等待人类批准。时间旅行你可以查看历史状态快照甚至回滚到之前的某个步骤重新修改参数运行。这对于调试 Agent 极其有用。fromlanggraph.checkpoint.memoryimportMemorySaver memoryMemorySaver()appworkflow.compile(checkpointermemory)# 运行时传入 thread_id 即可保存状态config{configurable:{thread_id:user_123}}app.invoke(input_state,config)5.3 多 Agent 协作Multi-Agent你可以将不同的 LangGraph 图嵌套在一起。例如主管节点负责分发任务。子图 A负责写代码。子图 B负责测试代码。子图 C负责写文档。这种模块化设计让复杂的系统变得可维护。6. LangChain vs LangGraph我该选哪个特性LangChain (Chains)LangGraph控制流线性为主 (DAG)支持循环 (Cycles)状态管理隐式传递较难显式全局共享 State持久化需自行实现内置 Checkpointer人机交互较复杂原生支持中断/恢复适用场景简单问答、RAG 流水线复杂 Agent、工作流自动化建议如果你的应用只是简单的“检索 - 生成”LangChain 足够且更轻量。如果你需要构建能自主规划、多步执行、需要人工干预的 AgentLangGraph 是必选项。7. 学习建议与避坑指南在深入学习 LangGraph 的过程中我总结了几条经验状态设计是关键不要把所有数据都塞进 State。只存放需要在节点间共享的、持久化的数据。临时变量请在节点函数内部处理。善用 LangSmithLangGraph 的执行轨迹非常复杂配合 LangSmith 的可视化追踪Tracing你能清晰地看到每一步的状态变化调试效率提升 10 倍。注意类型安全尽量使用 Pydantic 模型来定义 State这样 IDE 能提供自动补全减少字段拼写错误。避免无限循环在编写条件边逻辑时务必设置最大迭代次数recursion_limit防止 Agent 陷入死循环消耗 Token。