当前位置: 首页 > news >正文

06-LangGraph入门

第06章:LangGraph 入门

版本:LangChain v1.3.7 | 讲师:汤姆小白


1. LangGraph 是什么

LangGraph是 LangChain 生态的底层编排运行时,专门用于构建有状态、长时间运行的 Agent。

简单理解:LangChain 做"零件",LangGraph 做"组装线"。

三者关系

产品定位适用场景
LangChain基础构件(LLM、Tools、Retrieval)提供标准化的组件
LangGraph编排运行时复杂工作流、多步推理、持久化
Deep Agents开箱即用 Agent 套件高级 Agent,内置规划/子代理

create_agent底层就是基于 LangGraph 实现的。学 LangGraph 就是学 Agent 的底层原理。

安装

pipinstalllanggraph

2. StateGraph:定义工作流

2.1 最简单的图

fromlanggraph.graphimportStateGraph,MessagesState,START,ENDfromlangchain.chat_modelsimportinit_chat_model model=init_chat_model("openai:gpt-4o-mini")defcall_model(state:MessagesState):"""节点函数:调用模型"""response=model.invoke(state["messages"])return{"messages":[response]}# 创建图graph=StateGraph(MessagesState)# 添加节点graph.add_node("model",call_model)# 添加边graph.add_edge(START,"model")graph.add_edge("model",END)# 编译并执行app=graph.compile()result=app.invoke({"messages":[{"role":"user","content":"你好!"}]})print(result["messages"][-1].content)

2.2 StateGraph 核心概念

概念说明
StateGraph图的容器,定义工作流的状态类型
State在节点间传递的共享数据(如MessagesState是预定义的消息列表状态)
Node(节点)一个可执行的函数,接收 State 并返回 State 的部分更新
Edge(边)节点之间的连接,定义执行顺序
START / END特殊内置节点,表示图的起点和终点

2.3 自定义 State

fromtypingimportTypedDict,Annotatedfromlanggraph.graphimportStateGraph,START,ENDclassMyState(TypedDict):messages:listcounter:intfinal_answer:strdefstep1(state:MyState):return{"counter":state["counter"]+1}defstep2(state:MyState):return{"final_answer":f"执行了{state['counter']}步"}graph=StateGraph(MyState)graph.add_node("step1",step1)graph.add_node("step2",step2)graph.add_edge(START,"step1")graph.add_edge("step1","step2")graph.add_edge("step2",END)app=graph.compile()result=app.invoke({"messages":[],"counter":0,"final_answer":""})print(result["final_answer"])# 执行了 1 步

3. 条件边:根据状态选择路径

条件边让工作流能根据运行时状态动态决定下一步。

importrandomfromlanggraph.graphimportStateGraph,MessagesState,START,END model=init_chat_model("openai:gpt-4o-mini")defcall_model(state:MessagesState):response=model.invoke(state["messages"])return{"messages":[response]}defshould_continue(state:MessagesState)->str:"""条件判断函数:返回下一个节点名"""last_message=state["messages"][-1]# 检查是否需要工具调用ifhasattr(last_message,"tool_calls")andlast_message.tool_calls:return"tools"returnENDdefcall_tools(state:MessagesState):"""执行工具"""last_message=state["messages"][-1]# 这里简化处理return{"messages":[{"role":"tool","content":"工具结果"}]}graph=StateGraph(MessagesState)graph.add_node("model",call_model)graph.add_node("tools",call_tools)graph.add_edge(START,"model")graph.add_conditional_edges("model",should_continue,{"tools":"tools",END:END,})graph.add_edge("tools","model")# 工具结果返回模型app=graph.compile()

条件边的三个参数:(源节点, 判断函数, 路由映射)。判断函数返回的字符串必须在路由映射中存在。


4. 持久化:断点恢复

Agent 执行中可能因网络、API 限流等原因中断。持久化让 Agent 能从断点继续,不丢失进度。

fromlanggraph.checkpoint.memoryimportMemorySaver# 创建内存检查点(生产环境推荐用 SqliteSaver 或 PostgresSaver)checkpointer=MemorySaver()graph=StateGraph(MessagesState)# ... 添加节点和边 ...app=graph.compile(checkpointer=checkpointer)# 执行时指定 thread_idconfig={"configurable":{"thread_id":"user_123"}}# 第一次调用result1=app.invoke({"messages":[{"role":"user","content":"列出3个Python框架"}]},config=config)# 即使程序崩溃重启,用同一个 thread_id 继续result2=app.invoke({"messages":[{"role":"user","content":"详细说明第一个"}]},config=config# 同一个 thread_id,自动加载历史)

5. 人机协同:关键节点人工审批

在敏感操作(如删除文件、发送邮件)前暂停,等待人工确认。

fromlanggraph.typesimportinterruptdefsensitive_operation(state:MessagesState):"""需要人工审批的节点"""# 暂停并询问用户approval=interrupt("即将删除重要数据,是否继续?")ifapproval=="yes":# 执行操作return{"messages":[{"role":"ai","content":"操作已执行"}]}else:return{"messages":[{"role":"ai","content":"操作已取消"}]}# 在图中使用graph.add_node("sensitive_op",sensitive_operation)app=graph.compile(checkpointer=checkpointer)# 第一次调用:会在 interrupt() 处暂停result=app.invoke(input_data,config)# 此时 result 包含中断信息# 用户确认后,恢复执行app.invoke(None,# 无新输入config,# 传入用户确认的 Command)

6. Stream:实时监控执行过程

# 流式输出每个节点的结果foreventinapp.stream({"messages":[{"role":"user","content":"你好"}]},config={"configurable":{"thread_id":"1"}},stream_mode="values",):# event 是当前完整状态last_msg=event["messages"][-1]print(f"[{last_msg.get('role','node')}]{last_msg.get('content','')}")

7. LangGraph 与 create_agent 的关系

create_agent本质上就是预先配置好的 LangGraph:

# create_agent 内部做的事 ≈fromlanggraph.prebuiltimportcreate_react_agent# create_agent 自动创建了:# - model 节点# - tools 节点# - 条件边(有工具调用→继续,无→结束)# - 中间件机制# - 流式支持

理解 LangGraph 后,你就能:

  • create_agent不够灵活时,用 LangGraph 自定义 Agent 行为
  • 添加自定义逻辑到 Agent 循环中
  • 实现复杂的多 Agent 协作

本章小结

概念作用
StateGraph定义工作流图的容器
Node可执行函数,操作 State
Edge节点间的执行顺序
Conditional Edge根据状态动态路由
Checkpointer持久化状态,断点恢复
interrupt暂停等待人工审批
stream实时监控图执行

LangGraph 是 Agent 的"骨架",create_agent 是 LangGraph 的"快捷方式"。先学 create_agent 快速上手,再用 LangGraph 深入定制。

http://www.jsqmd.com/news/1076173/

相关文章:

  • 链博会上的英伟达:“五层蛋糕”AI 生态,多领域展现强大布局野心!
  • 【TEE从入门到精通及实战】55 密钥轮换与生命周期管理:在Enclave内实现无缝旋转
  • 我用 Claude Opus 4.8 做了一次接口评审,记录几个真正有用的 Prompt
  • 四Agent科研协作实战:Codex、Claude Code、OpenClaw、Hermes组成可迭代AI研究团队
  • 2026年6个字体素材网站推荐,设计师常用的字体资源整理
  • 终极ADB图形化管理工具:QtAdb让Android调试从未如此简单
  • V-Ray 7.20.01 for 3ds Max2020-2026 完整版安装教程|GPU 渲染性能全面升级
  • 【零基础AI应用开发】第01章:环境搭建与工具安装(入门篇)
  • PHP文件包含漏洞与Phar反序列化攻击链深度剖析与防御实践
  • 精准选对矩形导向轨,专业制造商该看哪些点
  • RAG+多智能体:金融AI分析的可验证工程实践
  • 机器学习落地闭环:从Notebook到生产环境的实战指南
  • 传统后端程序员,如何利用业余时间3-6个月转行高薪AI应用开发
  • 为什么你收藏了 100 个 Skills,也未必能用得好 AI 编程?
  • 高级 | 系统工程与信息系统基础错题集
  • GPT-3范式迁移:从微调到提示驱动的NLP革命
  • 关闭 VIP 通道(高频踩坑点)
  • 5种实战方案:如何用智能浏览器自动化重构你的工作流
  • 从“问对问题”到“建对系统”:Prompt、Context、Loop、Harness 工程的演变与理解
  • CSRF攻击原理深度解析:从身份冒用到防御实战
  • Appsmith:开源低代码平台,快速构建内部工具
  • 7个已落地AI工程方向:轻量化部署、RAG增强、多模态理解等实操指南
  • 人形机器人全身动作跟踪算法解析:从参考动作、奖励函数到真实机器人部署
  • 在长度2N的数组中找出重复N次的元素(一)
  • 多级蒙特卡洛梯度估计:原理、复杂度分析与在随机优化中的应用
  • 深圳登报声明去哪里办理?深圳登报声明要多少钱?
  • MitoHiFi:5步掌握PacBio HiFi线粒体基因组组装完整指南
  • 向量空间 JBoltAI TokUI 底层设计理念与技术演进
  • PUBG罗技鼠标压枪宏:三步实现终极后坐力控制的完整指南
  • okbiye AI 写作数据分析:自动生成 docx 实证报告,解决社科论文数据处理难题